graphdeco-inria/gaussian-splatting
요약
본 구현은 '3D Gaussian Splatting for Real-Time Radiance Field Rendering' 논문과 관련된 공식 코드를 제공하며, 실시간 시점 합성(novel-view synthesis)을 가능하게 합니다. 기존의 복사 휘도장 방법론이 높은 품질을 위해 느렸던 문제를 해결하기 위해, 3D Gaussians를 사용하여 장면을 표현하고 비등방성 스플래팅 및 가시성 인식 렌더링 알고리즘을 도입했습니다. 이를 통해 1080p 해상도에서 실시간(≥ 30 fps) 고품질 시점 합성을 달성하는 것이 가능해졌습니다.
핵심 포인트
- 3D Gaussian Splatting은 높은 품질과 실시간 성능을 동시에 달성한 최첨단(SOTA) 기술입니다.
- 장면 표현에 연속적인 볼륨 복사 휘도장 속성을 가진 3D Gaussians를 사용합니다.
- 비등방성 공분산 최적화와 가시성 인식 렌더링 알고리즘이 실시간 성능의 핵심 요소입니다.
- 저장소는 공식 논문 구현 외에도 사전 학습된 모델, 참조 이미지 등 다양한 리소스를 제공하며 지속적으로 업데이트되고 있습니다.
Bernhard Kerbl*, Georgios Kopanas*, Thomas Leimkühler, George Drettakis (*는 동일한 기여를 나타냄)
| 웹페이지 | 논문 전문 | 비디오 | 기타 GRAPHDECO 출판물 | FUNGRAPH 프로젝트 페이지 |
| T&T+DB COLMAP (650MB) | 사전 학습된 모델 (Pre-trained Models) (14 GB) | Windows용 뷰어 (60MB) | 평가 이미지 (7 GB) |
이 저장소는 여기에서 확인할 수 있는 "3D Gaussian Splatting for Real-Time Radiance Field Rendering" 논문과 관련된 저자들의 공식 구현을 포함하고 있습니다. 또한 논문에 보고된 오차 지표(error metrics)를 생성하는 데 사용된 참조 이미지와 최근에 생성된 사전 학습된 모델(pre-trained models)을 추가로 제공합니다.
초록: *Radiance Field (복사 휘도장) 방법론은 최근 여러 장의 사진이나 비디오로 캡처된 장면의 새로운 시점 합성(novel-view synthesis)에 혁신을 일으켰습니다. 그러나 높은 시각적 품질을 달성하기 위해서는 여전히 훈련과 렌더링 비용이 많이 드는 신경망(neural networks)이 필요하며, 최근의 더 빠른 방법들은 필연적으로 품질을 위해 속도를 희생합니다. (고립된 객체가 아닌) 경계가 없는 완전한 장면과 1080p 해상도 렌더링의 경우, 현재 어떤 방법도 실시간 디스플레이 속도를 달성할 수 없습니다. 우리는 경쟁력 있는 훈련 시간을 유지하면서 최첨단(state-of-the-art) 시각적 품질을 달성하고, 무엇보다 1080p 해상도에서 고품질의 실시간(≥ 30 fps) 새로운 시점 합성을 가능하게 하는 세 가지 핵심 요소를 소개합니다. 첫째, 카메라 보정(camera calibration) 중에 생성된 희소한 포인트(sparse points)로부터 시작하여, 빈 공간에서의 불필요한 계산을 피하면서 장면 최적화를 위해 연속적인 볼륨 복사 휘도장(continuous volumetric radiance fields)의 바람직한 속성을 보존하는 3D Gaussians (3D 가우시안)으로 장면을 표현합니다. 둘째, 3D Gaussians의 교차 최적화/밀도 제어(interleaved optimization/density control)를 수행하며, 특히 장면의 정확한 표현을 달성하기 위해 비등방성 공분산(anisotropic covariance)을 최적화합니다. 셋째, 비등방성 스플래팅(anisotropic splatting)을 지원하며 훈련을 가속화하고 실시간 렌더링을 가능하게 하는 빠른 가시성 인식 렌더링(visibility-aware rendering) 알고리즘을 개발합니다.
우리는 여러 기존 데이터셋(datasets)에서 최첨단(state-of-the-art) 시각적 품질과 실시간 렌더링(real-time rendering)을 입증합니다.*
@Article{kerbl3Dgaussians,
author = {Kerbl, Bernhard and Kopanas, Georgios and Leimk{"u}hler, Thomas and Drettakis, George},
title = {3D Gaussian Splatting for Real-Time Radiance Field Rendering},
...
이 연구는 ERC Advanced grant FUNGRAPH No 788065의 지원을 받았습니다. 저자들은 관대한 기부를 해준 Adobe, Université Côte d’Azur의 OPAL 인프라, 그리고 GENCI–IDRIS의 HPC 리소스(Grant 2022-AD011013409)에 감사를 표합니다. 저자들은 소중한 피드백을 준 익명의 검토자들, 초기 초안을 교정해 준 P. Hedman과 A. Tewari, 그리고 비교 작업을 도와준 T. Müller, A. Yu, S. Fridovich-Keil에게 감사를 전합니다.
우리는 코드를 유지 관리하고 업데이트할 수 있는 리소스가 제한적입니다. 하지만, 많은 다른 연구자들이 3DGS에 대해 수행해 온 훌륭한 작업들로부터 영감을 받아 초기 출시 이후 몇 가지 새로운 기능을 추가했습니다. 우리는 리소스가 허용하는 범위 내에서 다른 기능들도 추가할 예정입니다.
2024년 10월 업데이트: 학습 속도 가속화를 통합하였으며, 이를 깊이 정규화(depth regularization), 안티앨리어싱(anti-aliasing) 및 노출 보정(exposure compensation)과 호환되도록 만들었습니다. 버그를 수정하고 입력 및 사용자 카메라의 시각화를 허용하는 Top View 기능을 추가하여 SIBR 실시간 뷰어(real time viewer)를 개선했습니다.
2024년 봄 업데이트:
Orange Labs에서 VR 시청을 위한 OpenXR 지원을 친절하게 추가해 주었습니다.
Jonathan Stephens는 비디오로부터 사용 가능한 데이터셋을 만드는 지침과 함께, 여러분의 기기에 Gaussian Splatting을 설정하기 위한 환상적인 단계별 튜토리얼을 제작했습니다. 아래의 지침이 너무 딱딱하게 느껴진다면, 여기에서 확인해 보세요.
사용자 camenduru는 이 저장소의 소스(상태: 2023년 8월!)를 사용하여 해당 방법론에 빠르고 쉽게 접근할 수 있는 Colab 템플릿을 친절하게 제공해 주었습니다. 여기에서 확인해 보세요.
이 저장소는 서브모듈(submodules)을 포함하고 있으므로, 다음 명령어로 체크아웃해 주세요.
# SSH
git clone git@github.com:graphdeco-inria/gaussian-splatting.git --recursive
또는
# HTTPS
git clone https://github.com/graphdeco-inria/gaussian-splatting --recursive
코드베이스는 4가지 주요 구성 요소로 이루어져 있습니다:
- SfM 입력을 통해 3D Gaussian 모델을 생성하는 PyTorch 기반의 옵티마이저 (optimizer)
- 최적화 (optimization) 과정을 연결하고 시각화할 수 있는 네트워크 뷰어 (network viewer)
- 학습된 모델을 실시간으로 렌더링하는 OpenGL 기반의 실시간 뷰어 (real-time viewer)
- 사용자의 이미지를 최적화 준비가 된 SfM 데이터 세트로 변환하는 데 도움을 주는 스크립트
각 구성 요소는 하드웨어와 소프트웨어 측면에서 서로 다른 요구 사항을 가집니다. 이들은 Windows 10 및 Ubuntu Linux 22.04에서 테스트되었습니다. 각 구성 요소를 설정하고 실행하기 위한 지침은 아래 섹션에서 확인할 수 있습니다.
옵티마이저는 학습된 모델을 생성하기 위해 Python 환경에서 PyTorch 및 CUDA 확장을 사용합니다.
-
Compute Capability 7.0 이상의 CUDA 지원 GPU
-
24 GB VRAM (논문 평가 수준의 품질로 학습하기 위해 필요)
-
더 작은 VRAM 구성에 대해서는 FAQ를 참조하십시오.
-
Conda (쉬운 설정을 위해 권장됨)
-
PyTorch 확장을 위한 C++ 컴파일러 (Windows의 경우 Visual Studio 2019 사용)
-
PyTorch 확장을 위한 CUDA SDK 11, Visual Studio 설치 이후에 설치하십시오 (11.8을 사용했으며, 11.6 버전에는 알려진 문제들이 있음) - C++ 컴파일러와 CUDA SDK는 서로 호환되어야 합니다.
우리가 기본적으로 제공하는 설치 방법은 Conda 패키지 및 환경 관리를 기반으로 합니다:
SET DISTUTILS_USE_SDK=1 # Windows 전용
conda env create --file environment.yml
conda activate gaussian_splatting
이 과정은 CUDA SDK 12가 아닌 11이 설치되어 있다고 가정한다는 점에 유의하십시오. 수정을 원하시면 아래를 참조하십시오.
팁: Conda로 패키지를 다운로드하고 새로운 환경을 생성하면 상당한 양의 디스크 공간이 필요할 수 있습니다. 기본적으로 Conda는 메인 시스템 하드 드라이브를 사용합니다. 패키지 다운로드 위치와 환경을 다른 드라이브로 지정함으로써 이를 방지할 수 있습니다:
conda config --add pkgs_dirs <Drive>/<pkg_path>
conda env create --file environment.yml --prefix <Drive>/<env_path>/gaussian_splatting
conda activate <Drive>/<env_path>/gaussian_splatting
디스크 공간에 여유가 있다면, 저희와 동일한 학습 환경 (training environment)을 설정하기 위해 저희의 환경 파일 (environment files)을 사용하는 것을 권장합니다. 만약 수정을 원하신다면, 주요 버전 (major version) 변경이 저희 방법론의 결과에 영향을 미칠 수 있음을 유의해 주세요. 하지만 저희의 (제한적인) 실험 결과에 따르면, 더 최신 환경 (Python 3.8, PyTorch 2.0.0, CUDA 12)에서도 코드베이스가 잘 작동함을 시사합니다. PyTorch와 해당 CUDA 런타임 (CUDA runtime) 버전이 일치하고, 설치된 CUDA SDK가 PyTorch의 CUDA 버전과 주요 버전 차이가 없는 환경을 생성해야 합니다.
일부 사용자들은 Windows에서 서브모듈 (submodules)을 빌드할 때 문제(cl.exe: File not found 또는 유사한 오류)를 경험합니다. FAQ에 있는 이 문제에 대한 해결 방법 (workaround)을 참고해 주세요.
최적화 도구 (optimizer)를 실행하려면, 간단히 다음을 사용하세요:
python train.py -s <COLMAP 또는 NeRF Synthetic 데이터셋 경로>
train.py를 위한 명령줄 인자 (Command Line Arguments)
COLMAP 또는 Synthetic NeRF 데이터셋을 포함하는 소스 디렉토리 (source directory) 경로입니다.
학습된 모델이 저장될 경로입니다 (기본값은 output/<random>).
COLMAP 이미지들을 위한 대체 하위 디렉토리입니다 (기본값은 images).
평가를 위해 MipNeRF360 스타일의 학습/테스트 분할 (training/test split)을 사용하려면 이 플래그를 추가하세요.
학습 전 로드된 이미지의 해상도 (resolution)를 지정합니다. 1, 2, 4 또는 8이 제공되면 각각 원본, 1/2, 1/4 또는 1/8 해상도를 사용합니다. 그 외의 모든 값에 대해서는 이미지 종횡비 (aspect ratio)를 유지하면서 너비 (width)를 주어진 숫자로 재조정합니다. 설정되지 않았고 입력 이미지의 너비가 1.6K 픽셀을 초과하는 경우, 입력값은 자동으로 이 목표치로 재조정됩니다.
소스 이미지 데이터를 어디에 둘지 지정합니다. 기본값은 cuda이며, 대규모/고해상도 데이터셋으로 학습하는 경우 cpu를 사용하는 것을 권장합니다. 이는 VRAM 소비를 줄여주지만, 학습 속도는 약간 느려질 수 있습니다. HrsPythonix님께 감사드립니다.
검은색(기본값) 대신 흰색 배경을 사용하기 위해 이 플래그를 추가하세요. 예: NeRF Synthetic 데이터셋 평가 시.
사용될 구면 조화 함수 (Spherical Harmonics, SH)의 차수 (3보다 크면 안 됨). 기본값은 3입니다.
파이프라인이 SH의 순전파 (Forward) 및 역전파 (Backward)를 자체 구현 방식 대신 PyTorch를 사용하여 계산하도록 하는 플래그입니다.
파이프라인이 3D 공분산 (3D covariance)의 순전파 (Forward) 및 역전파 (Backward)를 자체 구현 방식 대신 PyTorch를 사용하여 계산하도록 하는 플래그입니다.
오류가 발생할 경우 디버그 모드를 활성화합니다. 래스터라이저 (Rasterizer)가 실패하면 dump 파일이 생성되며, 저희가 확인할 수 있도록 이슈 (Issue)를 통해 해당 파일을 전달해 주실 수 있습니다.
디버깅은 느립니다. 위의 디버깅이 활성화되기 시작할 반복 횟수 (0부터 시작)를 지정할 수 있습니다.
총 학습 반복 횟수. 기본값은 30_000입니다.
GUI 서버를 시작할 IP. 기본값은 127.0.0.1입니다.
GUI 서버에서 사용할 포트. 기본값은 6009입니다.
학습 스크립트가 테스트 세트에 대해 L1 및 PSNR을 계산할 반복 횟수 (공백으로 구분). 기본값은 7000 30000입니다.
학습 스크립트가 Gaussian 모델을 저장할 반복 횟수 (공백으로 구분). 기본값은 7000 30000 <iterations>입니다.
나중에 학습을 재개하기 위해 체크포인트 (Checkpoint)를 저장할 반복 횟수 (공백으로 구분). 모델 디렉토리에 저장됩니다.
학습을 재개할 저장된 체크포인트의 경로.
표준 출력 (Standard out) 파이프로 작성되는 모든 텍스트를 생략하기 위한 플래그.
구면 조화 함수 (Spherical Harmonics) 특징 학습률 (Learning rate). 기본값은 0.0025입니다.
불투명도 (Opacity) 학습률. 기본값은 0.05입니다.
스케일링 (Scaling) 학습률. 기본값은 0.005입니다.
회전 (Rotation) 학습률. 기본값은 0.001입니다.
위치 학습률 (Position learning rate)이 initial에서 final로 변하는 단계 수 (0부터 시작). 기본값은 30_000입니다.
초기 3D 위치 학습률. 기본값은 0.00016입니다.
최종 3D 위치 학습률. 기본값은 0.0000016입니다.
위치 학습률 승수 (Plenoxels 참조). 기본값은 0.01입니다.
밀도화 (Densification)가 시작되는 반복 횟수. 기본값은 500입니다.
밀도화 (Densification)가 중단되는 반복 횟수. 기본값은 15_000입니다.
2D 위치 그래디언트 (2D position gradient)를 기반으로 점을 밀도화할지 여부를 결정하는 임계값. 0.0002
기본값.
밀도화 (densify)를 수행하는 빈도, 100
기본값은 (매 100회 반복 (iterations)마다)입니다.
불투명도 (opacity)를 재설정하는 빈도, 3_000
기본값.
전체 손실 (total loss)에 대한 SSIM의 영향력을 0에서 1 사이로 설정, 0.2
기본값.
강제 밀도화 (forcibly densified)를 위해 점이 초과해야 하는 장면 범위 (scene extent)의 비율 (0--1), 0.01
기본값.
MipNeRF360과 유사하게, 당사는 1-1.6K 픽셀 범위의 해상도를 가진 이미지를 목표로 한다는 점에 유의하십시오. 편의를 위해 임의 크기의 입력을 전달할 수 있으며, 너비가 1600 픽셀을 초과할 경우 자동으로 크기가 조정됩니다. 이 동작을 유지하는 것을 권장하지만, -r 1을 설정하여 더 높은 해상도의 이미지를 사용하도록 학습을 강제할 수 있습니다.
MipNeRF360 장면은 논문 저자들이 이곳에 호스팅하고 있습니다. Tanks&Temples 및 Deep Blending에 대한 당사의 SfM 데이터 세트는 여기서 찾을 수 있습니다. 출력 모델 디렉토리 (-m)를 제공하지 않으면, 학습된 모델은 output 디렉토리 내의 무작위로 생성된 고유한 이름의 폴더에 저장됩니다. 이 시점에서 학습된 모델은 실시간 뷰어(이하 설명)로 확인할 수 있습니다.
기본적으로 학습된 모델은 데이터 세트의 사용 가능한 모든 이미지를 사용합니다. 평가를 위해 테스트 세트를 제외하고 학습하려면 --eval 플래그를 사용하십시오. 이 방식을 통해 다음과 같이 학습/테스트 세트를 렌더링하고 오차 지표 (error metrics)를 생성할 수 있습니다:
python train.py -s <COLMAP 또는 NeRF Synthetic 데이터 세트 경로> --eval # 학습/테스트 분할로 학습
python render.py -m <학습된 모델 경로> # 렌더링 생성
python metrics.py -m <학습된 모델 경로> # 렌더링에 대한 오차 지표 계산
당사의 사전 학습된 (pre-trained) 모델을 평가하려면, 해당 소스 데이터 세트를 다운로드하고 추가적인 --source_path/-s 플래그를 사용하여 render.py에 해당 위치를 지정해야 합니다. 참고: 사전 학습된 모델은 릴리스된 코드베이스로 생성되었습니다. 현재의 코드베이스는 정리되었으며 버그 수정이 포함되어 있으므로, 이를 통해 평가할 때 얻는 지표는 논문에 기재된 지표와 다를 수 있습니다.
python render.py -m <path to pre-trained model> -s <path to COLMAP dataset>
python metrics.py -m <path to pre-trained model>
render.py용 명령줄 인수 (Command Line Arguments)
Path to the trained model directory you want to create renderings for.
렌더링을 생성하려는 학습된 모델 디렉터리 경로.
Flag to skip rendering the training set.
학습 세트 렌더링 건너뛰기 플래그.
Flag to skip rendering the test set.
테스트 세트 렌더링 건너뛰기 플래그.
Flag to omit any text written to standard out pipe.
표준 출력 파이프에 쓰이는 모든 텍스트를 생략하는 플래그.
The below parameters will be read automatically from the model path, based on what was used for training. However, you may override them by providing them explicitly on the command line.
아래 매개변수들은 학습 시 사용된 것을 기반으로 모델 경로에서 자동으로 읽어옵니다. 하지만 명령줄에 명시적으로 제공하여 이를 재정의할 수 있습니다.
Path to the source directory containing a COLMAP or Synthetic NeRF data set.
COLMAP 또는 합성(Synthetic) NeRF 데이터 세트를 포함하는 소스 디렉터리 경로.
Alternative subdirectory for COLMAP images (images by default).
COLMAP 이미지의 대체 하위 디렉터리 (기본값: images).
Add this flag to use a MipNeRF360-style training/test split for evaluation.
평가를 위해 MipNeRF360 스타일의 학습/테스트 분할을 사용하려면 이 플래그를 추가하세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub Trending Python (daily)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기