Bernhard Kerbl*, Georgios Kopanas*, Thomas Leimkühler, George Drettakis (*는 균등 기여를 나타냄)
| 웹페이지 | 전체 보고서 | 비디오 | 기타 GRAPHDECO 출판물 | FUNGRAPH 프로젝트 페이지 |
| T&T+DB 콜맵(650MB) | 사전 훈련된 모델(14GB) | Windows용 뷰어(60MB) | 평가 이미지(7GB) |
이 저장소에는 여기에서 찾을 수 있는 "실시간 래디언스 필드 렌더링을 위한 3D 가우스 스플래팅" 논문과 관련된 공식 저자 구현이 포함되어 있습니다. 우리는 최근 생성된 사전 훈련된 모델뿐만 아니라 논문에 보고된 오류 측정항목을 생성하는 데 사용되는 참조 이미지도 제공합니다.
개요: Radiance Field 방법은 최근 여러 사진이나 비디오로 캡처한 장면의 새로운 관점 합성에 혁명을 일으켰습니다. 그러나 높은 시각적 품질을 달성하려면 여전히 훈련 및 렌더링에 비용이 많이 드는 신경망이 필요하며, 최근의 더 빠른 방법은 필연적으로 품질과 속도를 절충합니다. (고립된 객체가 아닌) 무한하고 완전한 장면과 1080p 해상도 렌더링의 경우 현재 어떤 방법으로도 실시간 표시 속도를 달성할 수 없습니다. 경쟁력 있는 훈련 시간을 유지하면서 최첨단 시각적 품질을 달성할 수 있게 하고 중요한 것은 1080p 해상도에서 고품질 실시간(≥ 30fps) 새로운 뷰 합성을 허용하는 세 가지 핵심 요소를 소개합니다. 첫째, 카메라 보정 중에 생성된 희소 점부터 시작하여 빈 공간에서 불필요한 계산을 피하면서 장면 최적화를 위한 연속 체적 복사 필드의 바람직한 속성을 보존하는 3D 가우시안으로 장면을 표현합니다. 둘째, 3D 가우시안의 인터리브 최적화/밀도 제어를 수행하며, 특히 장면의 정확한 표현을 달성하기 위해 이방성 공분산을 최적화합니다. 셋째, 이방성 스플래팅을 지원하고 훈련을 가속화하며 실시간 렌더링을 허용하는 빠른 가시성 인식 렌더링 알고리즘을 개발합니다. 우리는 여러 확립된 데이터 세트에서 최첨단 시각적 품질과 실시간 렌더링을 시연합니다.
@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}, journal = {ACM Transactions on Graphics}, number = {4}, volume = {42}, month = {July}, year = {2023}, url = {https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/} }
이 연구는 ERC Advanced 보조금 FUNGRAPH No 788065의 지원을 받았습니다. 저자는 Adobe에 넉넉한 기부, Université Côte d'Azur의 OPAL 인프라 및 GENCI–IDRIS(Grant 2022-AD011013409)의 HPC 리소스에 대해 감사드립니다. 저자들은 귀중한 피드백을 주신 익명의 검토자들, 이전 초안을 교정해 주신 P. Hedman 및 A. Tewari, 비교에 도움을 주신 T. Müller, A. Yu 및 S. Fridovich-Keil에게 감사드립니다.
코드를 유지하고 업데이트하기 위한 리소스가 제한되어 있습니다. 그러나 우리는 다른 많은 연구자들이 3DGS에 대해 수행한 훌륭한 작업 중 일부에서 영감을 받은 최초 릴리스 이후 몇 가지 새로운 기능을 추가했습니다. 우리는 리소스 능력 내에서 다른 기능을 추가할 예정입니다.
2024년 10월 업데이트 : 훈련 속도 가속을 통합하고 깊이 정규화, 앤티앨리어싱 및 노출 보상과 호환되도록 만들었습니다. 버그를 수정하고 입력 및 사용자 카메라를 시각화할 수 있는 Top View 기능을 추가하여 SIBR 실시간 뷰어를 개선했습니다.
2024년 봄 업데이트 : Orange Labs는 친절하게도 VR 시청을 위한 OpenXR 지원을 추가했습니다.
Jonathan Stephens는 비디오에서 사용 가능한 데이터 세트를 생성하는 방법에 대한 지침과 함께 컴퓨터에서 Gaussian Splatting을 설정하기 위한 환상적인 단계별 튜토리얼을 만들었습니다. 아래 지침이 너무 어렵다면 여기에서 확인해 보세요.
사용자 camenduru는 메소드에 빠르고 쉽게 액세스할 수 있도록 이 저장소의 소스(상태: 2023년 8월!)를 사용하는 Colab 템플릿을 제공할 만큼 친절했습니다. 여기서 확인해 보세요.
저장소에는 하위 모듈이 포함되어 있으므로 다음을 통해 확인하십시오.
# SSHgit 복제 [email protected]:graphdeco-inria/gaussian-splatting.git --recursive
또는
# HTTPSgit 복제 https://github.com/graphdeco-inria/gaussian-splatting --recursive
코드베이스에는 4가지 주요 구성 요소가 있습니다.
SfM 입력에서 3D 가우스 모델을 생성하는 PyTorch 기반 최적화 프로그램
최적화 프로세스에 연결하고 시각화할 수 있는 네트워크 뷰어
학습된 모델을 실시간으로 렌더링하는 OpenGL 기반 실시간 뷰어입니다.
자신의 이미지를 최적화 가능한 SfM 데이터 세트로 변환하는 데 도움이 되는 스크립트
구성 요소에는 하드웨어와 소프트웨어 모두에 대한 요구 사항이 다릅니다. Windows 10 및 Ubuntu Linux 22.04에서 테스트되었습니다. 각각의 설정 및 실행에 대한 지침은 아래 섹션에 나와 있습니다.
최적화 프로그램은 Python 환경에서 PyTorch 및 CUDA 확장을 사용하여 훈련된 모델을 생성합니다.
컴퓨팅 기능 7.0 이상을 갖춘 CUDA 지원 GPU
24GB 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는 gaussian_splatting을 활성화합니다.
이 프로세스에서는 12가 아닌 CUDA SDK 11 이 설치되어 있다고 가정합니다. 수정 사항은 아래를 참조하세요.
팁: Conda를 사용하여 패키지를 다운로드하고 새 환경을 생성하려면 상당한 양의 디스크 공간이 필요할 수 있습니다. 기본적으로 Conda는 기본 시스템 하드 드라이브를 사용합니다. 다른 패키지 다운로드 위치와 다른 드라이브의 환경을 지정하면 이를 방지할 수 있습니다.
conda config --add pkgs_dirs <드라이브>/conda env create --file Environment.yml --prefix <드라이브>/ /gaussian_splatting conda 활성화 / /gaussian_splatting
디스크 공간이 여유가 되신다면 당사의 환경 파일을 사용하여 당사와 동일한 교육 환경을 설정하실 것을 권장합니다. 수정하려는 경우 주요 버전 변경이 우리 방법의 결과에 영향을 미칠 수 있다는 점에 유의하십시오. 그러나 우리의 (제한된) 실험에 따르면 코드베이스는 최신 환경(Python 3.8, PyTorch 2.0.0, CUDA 12)에서 잘 작동하는 것으로 나타났습니다. PyTorch와 해당 CUDA 런타임 버전이 일치하고 설치된 CUDA SDK가 PyTorch의 CUDA 버전과 주요 버전 차이가 없는 환경을 만들어야 합니다.
일부 사용자는 Windows에서 하위 모듈을 빌드하는 데 문제가 발생합니다( cl.exe: File not found
유사함). FAQ에서 이 문제에 대한 해결 방법을 고려하십시오.
옵티마이저를 실행하려면 다음을 사용하세요.
python train.py -s
COLMAP 또는 Synthetic NeRF 데이터 세트가 포함된 소스 디렉토리의 경로입니다.
훈련된 모델을 저장해야 하는 경로(기본적으로 output/
).
COLMAP 이미지의 대체 하위 디렉터리(기본적으로 images
).
평가를 위해 MipNeRF360 스타일 교육/테스트 분할을 사용하려면 이 플래그를 추가하세요.
훈련 전 로드된 이미지의 해상도를 지정합니다. 1, 2, 4
또는 8
이 제공되면 각각 원본 해상도, 1/2, 1/4 또는 1/8 해상도를 사용합니다. 다른 모든 값의 경우 이미지 측면을 유지하면서 너비를 지정된 숫자로 다시 조정합니다. 설정되지 않고 입력 이미지 너비가 1.6K 픽셀을 초과하는 경우 입력은 자동으로 이 대상에 맞게 크기가 조정됩니다.
소스 이미지 데이터(기본적으로 cuda
를 저장할 위치를 지정합니다. 대규모/고해상도 데이터 세트에 대한 교육을 수행하는 경우 cpu
사용하는 것이 좋습니다. 그러면 VRAM 소비가 줄어들지만 교육 속도가 약간 느려집니다. HrsPythonix에게 감사드립니다.
예를 들어 NeRF Synthetic 데이터 세트를 평가할 때 검정색(기본값) 대신 흰색 배경을 사용하려면 이 플래그를 추가하세요.
사용할 구면 고조파의 순서(3개 이하). 기본적으로 3
입니다.
파이프라인이 우리 대신 PyTorch를 사용하여 SH의 앞뒤로 계산하도록 플래그를 지정합니다.
파이프라인이 우리 대신 PyTorch를 사용하여 3D 공분산의 앞뒤로 계산하도록 플래그를 지정합니다.
오류가 발생하면 디버그 모드를 활성화합니다. 래스터라이저가 실패하면 문제가 있는 경우 당사에 전달할 수 있는 dump
파일이 생성되어 당사에서 살펴볼 수 있습니다.
디버깅이 느립니다 . 위의 디버깅이 활성화된 후 반복(0부터 시작)을 지정할 수 있습니다.
학습할 총 반복 횟수는 기본적으로 30_000
입니다.
GUI 서버를 시작하기 위한 IP는 기본적으로 127.0.0.1
입니다.
GUI 서버에 사용할 포트는 기본적으로 6009
입니다.
훈련 스크립트가 테스트 세트(기본적으로 7000 30000
에 대해 L1 및 PSNR을 계산하는 공백으로 구분된 반복입니다.
훈련 스크립트가 가우스 모델을 저장하는 공백으로 구분된 반복은 기본적으로 7000 30000
입니다.
나중에 계속하기 위해 체크포인트를 저장하는 공백으로 구분된 반복으로, 모델 디렉터리에 저장됩니다.
훈련을 계속할 저장된 체크포인트의 경로입니다.
표준 출력 파이프에 작성된 텍스트를 생략하는 플래그입니다.
구형 고조파의 특징은 학습률이 기본적으로 0.0025
입니다.
불투명 학습률은 기본적으로 0.05
입니다.
스케일링 학습률은 기본적으로 0.005
입니다.
회전 학습률은 기본적으로 0.001
입니다.
위치 학습률이 initial
에서 final
까지 진행되는 단계 수(0부터)입니다. 기본적으로 30_000
입니다.
초기 3D 위치 학습률은 기본적으로 0.00016
입니다.
최종 3D 위치 학습률은 기본적으로 0.0000016
입니다.
위치 학습률 승수(Plenoxels 참조), 기본값은 0.01
입니다.
치밀화가 시작되는 반복은 기본적으로 500
입니다.
치밀화가 중지되는 반복은 기본적으로 15_000
입니다.
2D 위치 그라데이션을 기반으로 포인트를 조밀화해야 하는지 여부를 결정하는 제한(기본값은 0.0002
입니다.
치밀화 빈도는 기본적으로 100
(100회 반복마다)입니다.
불투명도를 재설정하는 빈도는 기본적으로 3_000
입니다.
총 손실에 대한 SSIM의 영향은 0에서 1까지, 기본적으로 0.2
.
강제로 조밀화하려면 포인트가 초과해야 하는 장면 범위(0-1)의 백분율(기본적으로 0.01
입니다.
MipNeRF360과 유사하게 1~1.6K 픽셀 범위의 해상도로 이미지를 대상으로 합니다. 편의를 위해 임의 크기 입력을 전달할 수 있으며 너비가 1600픽셀을 초과하면 자동으로 크기가 조정됩니다. 이 동작을 유지하는 것이 좋지만 -r 1
설정하여 훈련에서 고해상도 이미지를 사용하도록 강제할 수도 있습니다.
MipNeRF360 장면은 여기 논문 작성자가 호스팅합니다. Tanks&Temples 및 Deep Blending에 대한 SfM 데이터 세트는 여기에서 찾을 수 있습니다. 출력 모델 디렉터리( -m
)를 제공하지 않으면 훈련된 모델이 output
디렉터리 내의 무작위 고유 이름을 가진 폴더에 기록됩니다. 이 시점에서 훈련된 모델은 실시간 뷰어로 볼 수 있습니다(자세한 내용은 아래 참조).
기본적으로 학습된 모델은 데이터 세트에서 사용 가능한 모든 이미지를 사용합니다. 평가를 위해 테스트 세트를 보류하면서 훈련하려면 --eval
플래그를 사용하세요. 이런 방식으로 훈련/테스트 세트를 렌더링하고 다음과 같이 오류 측정항목을 생성할 수 있습니다.
python train.py -s--eval # 기차/테스트를 사용하여 훈련하십시오. # 렌더링에 대한 오류 측정항목을 계산합니다.
사전 훈련된 모델을 평가하려면 해당 소스 데이터 세트를 다운로드하고 추가 --source_path/-s
플래그를 사용하여 render.py
에 해당 위치를 표시해야 합니다. 참고: 사전 훈련된 모델은 릴리스 코드베이스를 사용하여 생성되었습니다. 이 코드 베이스는 정리되었으며 버그 수정이 포함되어 있으므로 이를 평가하여 얻는 측정항목은 문서에 있는 측정항목과 다릅니다.
python render.py -m <사전 훈련된 모델의 경로> -spythonmetrics.py -m <사전 훈련된 모델의 경로>
렌더링을 생성하려는 학습된 모델 디렉터리의 경로입니다.
훈련 세트 렌더링을 건너뛰도록 플래그를 지정합니다.
테스트 세트 렌더링을 건너뛰도록 플래그를 지정합니다.
표준 출력 파이프에 작성된 텍스트를 생략하는 플래그입니다.
아래 매개변수는 훈련에 사용된 항목을 기반으로 모델 경로에서 자동으로 읽혀집니다. 그러나 명령줄에서 명시적으로 제공하여 이를 재정의할 수 있습니다.
COLMAP 또는 Synthetic NeRF 데이터 세트가 포함된 소스 디렉토리의 경로입니다.
COLMAP 이미지의 대체 하위 디렉터리(기본적으로 images
).
평가를 위해 MipNeRF360 스타일 교육/테스트 분할을 사용하려면 이 플래그를 추가하세요.
훈련 전에 로드된 이미지의 해상도를 변경합니다. 1, 2, 4
또는 8
이 제공되면 각각 원본 해상도, 1/2, 1/4 또는 1/8 해상도를 사용합니다. 다른 모든 값의 경우 이미지 측면을 유지하면서 너비를 지정된 숫자로 다시 조정합니다. 기본적으로 1
입니다.
예를 들어 NeRF Synthetic 데이터 세트를 평가할 때 검정색(기본값) 대신 흰색 배경을 사용하려면 이 플래그를 추가하세요.
우리 대신 PyTorch에서 계산된 SH를 사용하여 파이프라인을 렌더링하도록 플래그를 지정합니다.
우리 대신 PyTorch에서 계산된 3D 공분산을 사용하여 파이프라인을 렌더링하도록 플래그를 지정합니다.
측정항목을 계산해야 하는 모델 경로의 공백으로 구분된 목록입니다.
우리는 full_eval.py
스크립트를 추가로 제공합니다. 이 스크립트는 평가에 사용되는 루틴을 지정하고 COLMAP 데이터 세트 내에서 대체 이미지 디렉토리를 정의하기 위한 --images (-i)
와 같은 몇 가지 추가 매개변수의 사용을 보여줍니다. 모든 학습 데이터를 다운로드하고 추출한 경우 다음과 같이 실행할 수 있습니다.
python full_eval.py -m360-tat <탱크 및 사원 폴더> -db <딥 블렌딩 폴더>
현재 버전에서 이 프로세스는 A6000이 포함된 참조 시스템에서 약 7시간이 걸립니다. 사전 훈련된 모델에 대한 전체 평가를 수행하려면 다운로드 위치를 지정하고 훈련을 건너뛸 수 있습니다.
python full_eval.py -o <사전 훈련된 모델이 있는 디렉터리> --skip_training -m360-tat <탱크 및 사원 폴더> -db <딥 블렌딩 폴더>
우리 논문의 평가 이미지에 대한 지표를 계산하려면 렌더링을 건너뛸 수도 있습니다. 이 경우 소스 데이터 세트를 제공할 필요가 없습니다. 한 번에 여러 이미지 세트에 대한 측정항목을 계산할 수 있습니다.
python full_eval.py -m <평가 이미지가 있는 디렉터리>/garden ... --skip_training --skip_rendering
우리는 우리 방법에 대해 원격 및 실시간이라는 두 가지 대화형 뷰어를 제공합니다. 당사의 뷰 솔루션은 GRAPHDECO 그룹이 여러 가지 새로운 뷰 합성 프로젝트를 위해 개발한 SIBR 프레임워크를 기반으로 합니다.
OpenGL 4.5 지원 GPU 및 드라이버(또는 최신 MESA 소프트웨어)
4GB VRAM 권장
컴퓨팅 기능 7.0 이상을 갖춘 CUDA 지원 GPU(실시간 뷰어에만 해당)
Clang이 아닌 Visual Studio 또는 g++(Windows용 Visual Studio 2019를 사용했습니다)
CUDA SDK 11, Visual Studio 이후 설치(저희는 11.8 사용)
CMake(최신 버전, 3.24 사용)
7zip(Windows에만 해당)
여기서는 Windows용으로 사전 구축된 바이너리를 제공합니다. SIBR 구축에는 즉시 다운로드하고 컴파일해야 하는 여러 외부 종속성이 포함되므로 효율적인 설정을 위해 Windows에서 이를 사용하는 것이 좋습니다.
하위 모듈을 사용하여 복제한 경우(예: --recursive
사용) 뷰어의 소스 코드는 SIBR_viewers
에서 찾을 수 있습니다. 네트워크 뷰어는 이미지 기반 렌더링 애플리케이션을 위한 SIBR 프레임워크 내에서 실행됩니다.
CMake는 종속성을 관리해야 합니다.
CD SIBR_viewers cmake -Bbuild .cmake --build 빌드 --target 설치 --config RelWithDebInfo
개발 중에 더 많은 제어가 필요한 경우 Debug
와 같이 다른 구성을 지정할 수 있습니다.
프로젝트 설정을 실행하기 전에 몇 가지 종속성을 설치해야 합니다.
# 종속성sudo apt install -y libglew-dev libassimp-dev libboost-all-dev libgtk-3-dev libopencv-dev libglfw3-dev libavdevice-dev libavcodec-dev libeigen3-dev libxxf86vm-dev libembree-dev# 프로젝트 setupcd SIBR_viewers cmake -Bbuild . -DCMAKE_BUILD_TYPE=릴리스 # 더 빠르게 빌드하려면 -G Ninja 추가cmake --build build -j24 --target install
Focal Fossa와의 하위 호환성은 완전히 테스트되지 않았지만 CMake를 사용하여 SIBR을 빌드하면 호출 후에도 계속 작동해야 합니다.
자식 체크아웃 fossa_compatibility
SIBR 인터페이스는 장면을 탐색하는 여러 가지 방법을 제공합니다. 기본적으로 FPS 네비게이터로 시작되며, W, A, S, D, Q, E
로 카메라 이동을 제어하고 I, K, J, L, U, O
로 회전을 제어할 수 있습니다. 또는 트랙볼 스타일 탐색기를 사용할 수도 있습니다(플로팅 메뉴에서 선택). Snap to
버튼을 사용하여 데이터 세트에서 카메라에 스냅하거나 Snap to closest
사용하여 가장 가까운 카메라를 찾을 수도 있습니다. 부동 메뉴를 사용하면 탐색 속도를 변경할 수도 있습니다. Scaling Modifier
사용하여 표시된 가우스의 크기를 제어하거나 초기 포인트 클라우드를 표시할 수 있습니다.
뷰어를 추출하거나 설치한 후
에서 컴파일된 SIBR_remoteGaussian_app[_config]
앱을 실행할 수 있습니다. 예:
.//bin/SIBR_remoteGaussian_app
네트워크 뷰어를 사용하면 동일하거나 다른 컴퓨터에서 실행 중인 훈련 프로세스에 연결할 수 있습니다. 동일한 머신 및 OS에서 교육하는 경우 명령줄 매개변수가 필요하지 않습니다. 최적화 프로그램은 교육 데이터의 위치를 네트워크 뷰어에 전달합니다. 기본적으로 최적화 프로그램과 네트워크 뷰어는 포트 6009 의 localhost 에 연결을 설정하려고 시도합니다. 최적화 프로그램과 네트워크 뷰어 모두에 일치하는 --ip
및 --port
매개변수를 제공하여 이 동작을 변경할 수 있습니다. 어떤 이유로 옵티마이저가 훈련 데이터를 찾기 위해 사용하는 경로에 네트워크 뷰어가 접근할 수 없는 경우(예: 다른 (가상) 머신에서 실행되는 경우) -s
사용하여 뷰어에 재정의 위치를 지정할 수 있습니다. -s
.
모델의 소스 데이터세트 경로를 재정의하는 인수입니다.
실행 중인 학습 스크립트에 연결하는 데 사용할 IP입니다.
실행 중인 훈련 스크립트에 연결하는 데 사용할 포트입니다.
네트워크 렌더링이 발생하는 해상도를 정의하기 위해 공백으로 구분된 두 개의 숫자를 사용합니다. 기본적으로 너비는 1200
. 입력 이미지와 다른 측면을 적용하려면 --force-aspect-ratio
도 필요합니다.
각 카메라의 상단 보기에 표시할 소스 데이터 세트 이미지를 로드하는 플래그입니다.
뷰어를 추출하거나 설치한 후
에서 컴파일된 SIBR_gaussianViewer_app[_config]
앱을 실행할 수 있습니다. 예:
.//bin/SIBR_gaussianViewer_app -m <훈련된 모델 경로>
훈련된 모델 디렉토리를 가리키는 -m
매개변수를 제공하는 것으로 충분합니다. 또는 -s
사용하여 훈련 입력 데이터에 대한 재정의 위치를 지정할 수 있습니다. 자동 선택된 해상도가 아닌 특정 해상도를 사용하려면 --rendering-size
지정하세요. 정확한 해상도를 원하고 이미지 왜곡에 신경 쓰지 않는다면 --force-aspect-ratio
와 결합하십시오.
전체 프레임 속도를 잠금 해제하려면 기기와 애플리케이션(메뉴 → 디스플레이)에서 V-Sync를 비활성화하십시오. 다중 GPU 시스템(예: 노트북)에서 최대 성능을 위해서는 OpenGL/디스플레이 GPU가 CUDA GPU와 동일해야 합니다(예: Windows에서 응용 프로그램의 GPU 기본 설정을 지정합니다. 아래 참조). 초기 포인트 클라우드 및 스플랫 외에도 부동 메뉴에서 가우스를 타원체로 렌더링하여 시각화할 수 있는 옵션도 있습니다. SIBR에는 다른 많은 기능이 있습니다. 뷰어, 탐색 옵션 등에 대한 자세한 내용은 설명서를 참조하십시오. 또한 입력 카메라의 배치와 원본 SfM 포인트 클라우드를 보여주는 Top View(메뉴에서 사용 가능)도 있습니다. Top View를 활성화하면 렌더링 속도가 느려집니다. 실시간 뷰어는 플로팅 메뉴에서 전환할 수 있는 약간 더 공격적이고 빠른 컬링도 사용합니다. 빠른 선별 기능을 꺼서 해결할 수 있는 문제가 발생하면 알려주시기 바랍니다.
COLMAP 로더는 소스 경로 위치에서 다음 데이터 세트 구조를 예상합니다.
|---images | |--- | |--- | |---... |---sparse |---0 |---cameras.bin |---images.bin |---points3D.bin
래스터화의 경우 카메라 모델은 SIMPLE_PINHOLE 또는 PINHOLE 카메라여야 합니다. 우리는 입력 이미지에서 왜곡되지 않은 이미지와 SfM 정보를 추출하기 위해 변환기 스크립트 convert.py
제공합니다. 선택적으로 ImageMagick을 사용하여 왜곡되지 않은 이미지의 크기를 조정할 수 있습니다. 이 크기 조정은 MipNeRF360과 유사합니다. 즉, 해당 폴더에 원래 해상도의 1/2, 1/4 및 1/8로 이미지를 생성합니다. 이를 사용하려면 먼저 최신 버전의 COLMAP(이상적으로는 CUDA 기반) 및 ImageMagick을 설치하십시오. 사용하려는 이미지를
디렉토리에 넣으세요.
|---input |--- |--- |---...
시스템 경로에 COLMAP 및 ImageMagick이 있는 경우 간단히 다음을 실행할 수 있습니다.
python Convert.py -s[--resize] #크기를 조정하지 않으면 ImageMagick이 필요하지 않습니다.
또는 선택적 매개변수 --colmap_executable
및 --magick_executable
을 사용하여 해당 경로를 가리킬 수 있습니다. Windows에서 실행 파일은 실행 환경 설정을 담당하는 COLMAP .bat
파일을 가리켜야 합니다. 완료되면
원본 이미지와 distorted
디렉터리의 일부 임시(왜곡된) 데이터 외에도 왜곡되지 않고 크기가 조정된 입력 이미지가 포함된 예상 COLMAP 데이터 세트 구조가 포함됩니다.
왜곡되지 않은 자체 COLMAP 데이터 세트가 있는 경우(예: OPENCV
카메라 사용) 스크립트의 마지막 부분만 실행해 볼 수 있습니다. input
에 이미지를 넣고 distorted
하위 디렉터리에 COLMAP 정보를 넣습니다.
|---input | |--- | |--- | |---... |---distorted |---database.db |---sparse |---0 |---...
그런 다음 실행
python Convert.py -s--skip_matching [--resize] # 크기를 조정하지 않으면 ImageMagick이 필요하지 않습니다.
COLMAP에서 GPU를 사용하지 않도록 플래그를 지정합니다.
이미지에 COLMAP 정보를 사용할 수 있음을 나타내는 플래그입니다.
입력 위치.
초기 매칭 단계에 사용할 카메라 모델은 기본적으로 OPENCV
.
입력 이미지의 크기가 조정된 버전을 생성하기 위한 플래그입니다.
COLMAP 실행 파일의 경로(Windows의 경우 .bat
)
ImageMagick 실행 파일의 경로입니다.
훈련 시간을 단축하기 위해 Taming-3dgs 1 의 드롭인 대체품과 융합된 Ssim을 원래 코드베이스에 통합했습니다. 일단 설치되면 가속 래스터라이저는 --optimizer_type default
과 a를 사용하여 훈련 시간 단축 --optimizer_type sparse_adam
사용한 훈련 시간 단축 .
훈련 시간을 단축하려면 먼저 가속 래스터라이저를 환경에 설치해야 합니다.
pip 제거 diff-gaussian-rasterization -ycd 하위 모듈/diff-gaussian-rasterization rm -r 빌드 자식 체크아웃 3dgs_accel 핍 설치 .
그런 다음 train.py
실행할 때 희소 adam 최적화 프로그램을 사용하기 위해 다음 매개변수를 추가할 수 있습니다.
--optimizer_type sparse_adam
이 사용자 정의 래스터라이저는 원래 버전과 동작이 다릅니다. 훈련 시간에 대한 자세한 내용은 훈련 시간 통계를 참조하세요 .
1. 말릭(Mallick)과 고엘(Goel) 외. '3DGS 길들이기: 제한된 자원으로 고품질 래디언스 필드'. SIGGRAPH 아시아 2024 컨퍼런스 논문, 2024, https://doi.org/10.1145/3680528.3687694, github
더 나은 재구성된 장면을 갖기 위해 각 입력 이미지의 최적화 중에 깊이 맵을 사전으로 사용합니다. 도로 등 질감이 없는 부분에 가장 잘 작동하며 부유물을 제거할 수 있습니다. 여러 논문에서는 3DGS의 다양한 측면을 개선하기 위해 유사한 아이디어를 사용했습니다. (예: DepthRegularizedGS, SparseGS, DNGaussian). 우리가 통합한 깊이 정규화는 Hierarchical 3DGS 논문에서 사용되었지만 원본 3DGS에 적용되었습니다. 일부 장면(예: DeepBlending 장면)의 경우 품질이 크게 향상됩니다. 다른 사람들에게는 작은 차이가 되거나 심지어 더 나빠질 수도 있습니다. 잠재적인 이점과 품질에 대한 통계를 보여주는 결과 예는 깊이 정규화에 대한 통계를 참조하세요.
합성 데이터 세트를 훈련할 때 깊이 맵을 생성할 수 있으며 우리 방법에서 사용하기 위해 추가 처리가 필요하지 않습니다.
실제 데이터 세트의 경우 각 입력 이미지에 대해 깊이 맵을 생성해야 하며 이를 생성하려면 다음을 수행하십시오.
복제 깊이 v2:
git clone https://github.com/DepthAnything/Depth-Anything-V2.git
Depth-Anything-V2-Large에서 가중치를 다운로드하여 Depth-Anything-V2/checkpoints/
아래에 배치합니다.
깊이 맵 생성:
python Depth-Anything-V2/run.py --encoder vitl --pred-only --grayscale --img-path--outdir
다음을 사용하여 depth_params.json
파일을 생성합니다.
python utils/make_depth_scale.py --base_dir--depths_dir
깊이 정규화 -d
사용하려면 훈련할 때 새 매개변수를 설정해야 합니다.
다양한 입력 이미지의 노출 변화를 보상하기 위해 Hierarchical 3dgs에서와 마찬가지로 각 이미지에 대한 아핀 변환을 최적화합니다.
이는 예를 들어 카메라의 노출 설정이 고정되지 않은 경우 스마트폰을 사용하여 "야생" 캡처에 대한 재구성 결과를 크게 향상시킬 수 있습니다. 잠재적인 이점과 품질에 대한 통계를 보여주는 결과 예는 여기를 참조하세요. 노출 보상 통계.
활성화하려면 다음 매개변수를 추가하세요.
--exposure_lr_init 0.001 --exposure_lr_final 0.0001 --exposure_lr_delay_steps 5000 --exposure_lr_delay_mult 0.001 --train_test_exp
다시 말하지만, 다른 우수한 논문에서는 NeRF-W, URF와 같은 유사한 아이디어를 사용했습니다.
앨리어싱을 제거하기 위해 코드베이스에 Mip Splatter의 EWA 필터를 추가했습니다. 기본적으로 비활성화되어 있지만 train.py
사용하여 장면을 훈련하거나 render.py
사용하여 렌더링할 때 --antialiasing
추가하면 활성화할 수 있습니다. 안티앨리어싱은 SIBR 뷰어에서 전환할 수 있으며 기본적으로 비활성화되어 있지만 --antialiasing
사용하여 훈련된 장면을 볼 때는 활성화해야 합니다. 이 장면은 --antialiasing
사용하여 훈련되었습니다 .
Views > Top view
Top view
해당 입력 카메라와 Point view
사용자 카메라를 사용하여 다른 뷰에서 SfM 포인트 클라우드를 렌더링합니다. 이를 통해 예를 들어 뷰어가 입력 카메라로부터 얼마나 멀리 떨어져 있는지 시각화할 수 있습니다.
이는 3D 보기이므로 사용자는 Point view
(사용 가능한 모드: FPS, 트랙볼, 궤도)에서와 마찬가지로 탐색할 수 있습니다.
이 뷰를 사용자 정의하는 옵션이 제공되며, 메쉬를 비활성화/활성화하고 해당 배율을 수정할 수 있습니다.
유용한 추가 기능은 입력 이미지의 위치로 이동하고 해당 위치에서 SfM 포인트 뷰로 점진적으로 페이드 아웃하는 것입니다(예: 카메라 정렬 확인). 입력 카메라의 뷰는 Top view
에 표시될 수 있습니다( --images-path
명령줄에서 설정되어야 합니다 ). Top view settings > Cameras > Snap to closest
클릭하여 Point view
에서 사용자 카메라로부터 가장 가까운 입력 카메라에 Top view
카메라를 맞출 수 있습니다. OpenXR 지원
OpenXR은 gaussian_code_release_openxr
브랜치에서 지원됩니다. 해당 브랜치 내에서 여기에서 VR 지원에 대한 문서를 찾을 수 있습니다.
full_eval.py
에서 참조되는 데이터 세트는 어디서 얻을 수 있나요? MipNeRF360 데이터 세트는 프로젝트 사이트의 원본 논문 작성자가 제공합니다. 데이터 세트 중 두 개는 공개적으로 공유할 수 없으며 작성자에게 직접 문의해야 합니다. Tanks&Temples 및 Deep Blending의 경우 페이지 상단에 제공된 다운로드 링크를 사용하세요. 또는 HuggingFace에서 복제된 데이터(상태: 2023년 8월!)에 액세스할 수 있습니다.
도시 지역과 같이 훨씬 더 큰 데이터세트에 이를 어떻게 사용할 수 있나요? 현재 방법은 이를 위해 설계되지 않았지만 메모리가 충분하면 제대로 작동할 것입니다. 그러나 이 접근 방식은 다중 규모의 세부 장면(원거리 장면과 혼합된 극단적인 클로즈업)에서는 어려움을 겪을 수 있습니다. 이는 일반적으로 운전 데이터 세트(자동차가 가깝고 건물이 멀리 있음)의 경우입니다. 이러한 장면의 경우 --position_lr_init
, --position_lr_final
및 --scaling_lr
(x0.3, x0.1, ...)을 낮출 수 있습니다. 장면이 더 광범위할수록 이 값은 낮아져야 합니다. 아래에서는 기본 학습률(왼쪽)과 --position_lr_init 0.000016 --scaling_lr 0.001"
(오른쪽)을 사용합니다.
저는 Windows를 사용하고 있는데 하위 모듈을 빌드할 수 없습니다. 어떻게 해야 합니까? 여기에 있는 훌륭한 비디오 튜토리얼의 단계를 따르는 것을 고려해 보십시오. 도움이 되기를 바랍니다. 단계가 수행되는 순서가 중요합니다! 또는 연결된 Colab 템플릿을 사용해 보세요.
여전히 작동하지 않습니다. cl.exe
에 대한 내용이 나와 있습니다. 어떻게 해야 하나요? 사용자 Henry Pearce가 해결 방법을 찾았습니다. 환경 변수에 Visual Studio 경로를 추가해 볼 수 있습니다(버전 번호는 다를 수 있음). C:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsMSVC14.29.30133binHostx64x64
그런 다음 새 conda 프롬프트를 시작하고 리포지토리 위치로 CD를 이동한 후 이를 시도해 보세요.
conda activate gaussian_splatting cd/gaussian-splatting pip install submodulesdiff-gaussian-rasterization pip install submodulessimple-knn
macOS/Puppy Linux/Greenhat을 사용하고 있는데 빌드할 수 없습니다. 어떻게 해야 합니까? 죄송합니다. 이 README에 나열된 플랫폼 이외의 플랫폼에 대해서는 지원을 제공할 수 없습니다. 연결된 Colab 템플릿을 사용해 보세요.
교육용 24GB VRAM이 없습니다. 어떻게 해야 합니까? VRAM 소비는 최적화되는 포인트 수에 따라 결정되며 시간이 지남에 따라 증가합니다. 7,000번의 반복으로만 훈련하려는 경우 훨씬 더 적은 횟수가 필요합니다. 전체 교육 루틴을 수행하고 메모리 부족을 방지하려면 --densify_grad_threshold
, --densification_interval
늘리거나 --densify_until_iter
값을 줄일 수 있습니다. 그러나 이는 결과의 품질에 영향을 미칠 수 있습니다. 또한 테스트 중 메모리 급증을 방지하려면 --test_iterations
-1
로 설정해 보세요. --densify_grad_threshold
가 매우 높으면 치밀화가 발생하지 않으며 장면 자체가 성공적으로 로드되면 훈련이 완료되어야 합니다.
참조 품질 교육을 위한 24GB VRAM은 여전히 많습니다! 더 적은 비용으로 할 수는 없나요? 네, 그럴 가능성이 높습니다. 우리 CA로