NoPoSplat sagt 3D-Gauß-Funktionen in einem kanonischen Raum aus nicht gestellten, spärlichen Bildern voraus.
Ermöglicht eine hochwertige neuartige Ansichtssynthese und eine genaue Posenschätzung.
Installation
Vorab trainierte Kontrollpunkte
Kamerakonventionen
Datensätze
Ausführen des Codes
Danksagungen
Zitat
Unser Code basiert auf Python 3.10+ und wurde auf Basis von PyTorch 2.1.2 und CUDA 11.8 entwickelt, sollte aber auch mit höheren Pytorch/CUDA-Versionen funktionieren.
Klonen Sie NoPoSplat.
Git-Klon https://github.com/cvg/NoPoSplatcd NoPoSplat
Erstellen Sie die Umgebung. Hier zeigen wir ein Beispiel mit Conda.
conda create -y -n noposplat python=3.10 Conda aktiviert Noposplat pip install Torch==2.1.2 Torchvision==0.16.2 Torchaudio==2.1.2 --index-url https://download.pytorch.org/whl/cu118 pip install -r Anforderungen.txt
Kompilieren Sie optional die Cuda-Kernel für RoPE (wie in CroCo v2).
# NoPoSplat basiert auf RoPE-Positionseinbettungen, für die Sie einige Cuda-Kernel für eine schnellere Laufzeit kompilieren können.cd src/model/encoder/backbone/croco/curope/ python setup.py build_ext --inplacecd ../../../../../..
Unsere Models werden auf Hugging Face gehostet?
Modellname | Trainingsvorsätze | Trainingsdaten |
---|---|---|
re10k.ckpt | 256x256 | re10k |
Säure.ckpt | 256x256 | Säure |
mixRe10kDl3dv.ckpt | 256x256 | re10k, dl3dv |
mixRe10kDl3dv_512x512.ckpt | 512x512 | re10k, dl3dv |
Wir gehen davon aus, dass sich die heruntergeladenen Gewichte im Verzeichnis pretrained_weights
befinden.
Unser Kamerasystem ist das gleiche wie bei pixelSplat. Die kamerainternen Matrizen werden normalisiert (die erste Zeile wird durch die Bildbreite geteilt, und die zweite Zeile wird durch die Bildhöhe geteilt). Die extrinsischen Kameramatrizen sind Kamera-zu-Welt-Matrizen im OpenCV-Stil ( +X nach rechts, +Y nach unten, +Z Kamera blickt in den Bildschirm).
Informationen zur Datensatzvorbereitung finden Sie unter DATASETS.md.
Der Haupteinstiegspunkt ist src/main.py
. Rufen Sie es an über:
# 8 GPUs, mit jeder Stapelgröße = 16. Entfernen Sie die letzten beiden Argumente, wenn Sie wandb nicht für die Protokollierung verwenden möchtenpython -m src.main +experiment=re10k wandb.mode=online wandb.name=re10k
Diese Standard-Trainingskonfiguration erfordert 8x GPUs mit einer Stapelgröße von 16 auf jeder GPU (>=80 GB Speicher). Die Schulung dauert ca. 6 Stunden. Sie können die Batchgröße an Ihre Hardware anpassen. Beachten Sie jedoch, dass eine Änderung der Gesamtbatchgröße möglicherweise eine Änderung der anfänglichen Lernrate erfordert, um die Leistung aufrechtzuerhalten. Für das Training auf einer A6000-GPU (48 GB Speicher) können Sie sich auf re10k_1x8 beziehen, was zu einer ähnlichen Leistung führt.
# RealEstate10Kpython -m src.main +experiment=re10k mode=test wandb.name=re10k dataset/[email protected]_sampler=evaluation dataset.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 dataset/[email protected]_sampler=evaluation dataset.re10k.view_sampler.index_path=assets/evaluation_index_acid.json checkpointing.load=./pretrained_weights/acid.ckpt test.save_image=true
Sie können wandb.name=SAVE_FOLDER_NAME
festlegen, um den Speicherpfad anzugeben.
Um die Leistung der Posenschätzung zu bewerten, können Sie den folgenden Befehl ausführen:
# RealEstate10Kpython -m src.eval_pose +experiment=re10k +evaluation=eval_pose checkpointing.load=./pretrained_weights/mixRe10kDl3dv.ckpt dataset/[email protected]_sampler=evaluation dataset.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 dataset/[email protected]_sampler=evaluation dataset.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
Beachten Sie, dass wir hier die Auswertung anhand des auf RealEstate10K und DL3DV trainierten gemischten Modells zeigen. Sie können den Prüfpunktpfad durch andere trainierte Modelle ersetzen.
Dieses Projekt wurde mit mehreren fantastischen Repos entwickelt: pixelSplat, DUSt3R und CroCo. Wir danken den Originalautoren für ihre hervorragende Arbeit. Wir danken David Charatan für die freundliche Hilfe für die Bereitstellung des Evaluierungscodes und der vorab trainierten Modelle für einige der vorherigen Methoden.
@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} }