NoPoSplat은 포즈가 없는 희소 이미지로부터 표준 공간의 3D 가우스를 예측합니다.
고품질의 새로운 뷰 합성과 정확한 포즈 추정이 가능합니다.
설치
사전 훈련된 체크포인트
카메라 규칙
데이터 세트
코드 실행
감사의 말
소환
우리 코드는 Python 3.10+를 사용하고 PyTorch 2.1.2 및 CUDA 11.8을 기반으로 개발되었지만 더 높은 Pytorch/CUDA 버전에서도 작동해야 합니다.
NoPoSplat을 복제합니다.
자식 클론 https://github.com/cvg/NoPoSplatcd NoPoSplat
환경을 만듭니다. 여기서는 conda를 사용하는 예를 보여줍니다.
conda create -y -n noposplat python=3.10 conda 활성화 noposplat pip 설치 torch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 --index-url https://download.pytorch.org/whl/cu118 pip 설치 -r 요구사항.txt
선택적으로 RoPE용 cuda 커널을 컴파일합니다(CroCo v2에서와 같이).
# NoPoSplat은 더 빠른 런타임을 위해 일부 cuda 커널을 컴파일할 수 있는 RoPE 위치 임베딩을 사용합니다.cd src/model/encoder/backbone/croco/curope/ python setup.py build_ext --inplacecd ../../../../../..
우리 모델은 Hugging Face?에서 호스팅됩니다.
모델명 | 훈련 결심 | 훈련 데이터 |
---|---|---|
re10k.ckpt | 256x256 | re10k |
산성.ckpt | 256x256 | 산 |
mixRe10kDl3dv.ckpt | 256x256 | re10k, dl3dv |
mixRe10kDl3dv_512x512.ckpt | 512x512 | re10k, dl3dv |
다운로드한 가중치는 pretrained_weights
디렉터리에 있다고 가정합니다.
우리의 카메라 시스템은 pixelSplat과 동일합니다. 카메라 고유 행렬은 정규화됩니다(첫 번째 행은 이미지 너비로 나뉘고 두 번째 행은 이미지 높이로 나뉩니다). 카메라 외부 행렬은 OpenCV 스타일의 카메라-세계 행렬입니다(+X 오른쪽, +Y 아래, +Z 카메라가 화면을 봅니다).
데이터 세트 준비는 DATASETS.md를 참조하세요.
주요 진입점은 src/main.py
입니다. 다음을 통해 전화하세요.
# GPU 8개, 각 배치 크기 = 16. 로깅에 wandb를 사용하지 않으려면 마지막 두 인수를 제거하세요.python -m src.main +experiment=re10k wandb.mode=online wandb.name=re10k
이 기본 훈련 구성에는 각 GPU에 배치 크기가 16인 8x GPU가 필요합니다(>=80GB 메모리). 교육을 완료하는 데 약 6시간이 소요됩니다. 하드웨어에 맞게 배치 크기를 조정할 수 있지만 전체 배치 크기를 변경하려면 성능을 유지하기 위해 초기 학습 속도를 수정해야 할 수도 있습니다. 1개의 A6000 GPU(48GB 메모리)에 대한 훈련을 위해 re10k_1x8을 참조할 수 있으며 유사한 성능을 얻을 수 있습니다.
# RealEstate10Kpython -m src.main +experiment=re10k mode=test wandb.name=re10k 데이터 세트/[email protected]_sampler=evaluation 데이터 세트.re10k.view_sampler.index_path=assets/evaluation_index_re10k.json checkpointing.load=./pretrained_weights /re10k.ckpt test.save_image=true# RealEstate10Kpython -m src.main +experiment=acid mode=test wandb.name=acid 데이터 세트/[email protected]_sampler=평가 데이터 세트.re10k.view_sampler.index_path=assets/evaluation_index_acid .json checkpointing.load=./pretrained_weights/acid.ckpt test.save_image=true
wandb.name=SAVE_FOLDER_NAME
설정하여 저장 경로를 지정할 수 있습니다.
포즈 추정 성능을 평가하려면 다음 명령을 실행할 수 있습니다.
# RealEstate10Kpython -m src.eval_pose +experiment=re10k +evaluation=eval_pose checkpointing.load=./pretrained_weights/mixRe10kDl3dv.ckpt 데이터세트/[email protected]_sampler=평가 데이터세트.re10k.view_sampler.index_path=assets/evaluation_index_re10k.json # ACIDpython -m src.eval_pose +experiment=acid +evaluation=eval_pose checkpointing.load=./pretrained_weights/mixRe10kDl3dv.ckpt 데이터 세트/[email protected]_sampler=evaluation 데이터 세트.re10k.view_sampler.index_path=assets/evaluation_index_acid.json # ScanNet-1500python -m src.eval_pose +experiment=scannet_pose +evaluation=eval_pose checkpointing.load=./pretrained_weights/mixRe10kDl3dv.ckpt
여기서는 RealEstate10K 및 DL3DV에서 훈련된 혼합 모델을 사용한 평가를 보여줍니다. 체크포인트 경로를 다른 훈련된 모델로 바꿀 수 있습니다.
이 프로젝트는 pixelSplat, DUSt3R 및 CroCo와 같은 몇 가지 환상적인 저장소를 사용하여 개발되었습니다. 훌륭한 작업을 해주신 원저자들에게 감사드립니다. 이전 방법 중 일부에 대한 평가 코드와 사전 훈련된 모델을 제공한 David Charatan의 친절한 도움에 감사드립니다.
@article{ye2024noposplat, title = {No Pose, No Problem: Surprisingly Simple 3D Gaussian Splats from Sparse Unposed Images}, author = {Ye, Botao and Liu, Sifei and Xu, Haofei and Xueting, Li and Pollefeys, Marc and Yang, Ming-Hsuan and Songyou, Peng}, journal = {arXiv preprint arXiv:xxxx.xxxx}, year = {2024} }