NoPoSplat prédit des Gaussiennes 3D dans un espace canonique à partir d'images clairsemées non posées,
permettant une nouvelle synthèse de vues de haute qualité et une estimation précise de la pose.
Installation
Points de contrôle pré-entraînés
Conventions relatives aux caméras
Ensembles de données
Exécuter le code
Remerciements
Citation
Notre code s'appuie sur Python 3.10+ et est développé sur la base de PyTorch 2.1.2 et CUDA 11.8, mais il devrait également fonctionner avec les versions supérieures de Pytorch/CUDA.
Clonez NoPoSplat.
clone git https://github.com/cvg/NoPoSplatcd NoPoSplat
Créez l'environnement, nous montrons ici un exemple utilisant conda.
conda create -y -n noposplat python=3.10 conda activer 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 exigences.txt
Facultatif, compilez les noyaux cuda pour RoPE (comme dans CroCo v2).
# NoPoSplat s'appuie sur les intégrations positionnelles RoPE pour lesquelles vous pouvez compiler certains noyaux cuda pour une exécution plus rapide.cd src/model/encoder/backbone/croco/curope/ python setup.py build_ext --inplacecd ../../../../../..
Nos modèles sont hébergés sur Hugging Face ?
Nom du modèle | Résolutions de formation | Données de formation |
---|---|---|
re10k.ckpt | 256x256 | re10k |
acide.ckpt | 256x256 | acide |
mixRe10kDl3dv.ckpt | 256x256 | re10k, dl3dv |
mixRe10kDl3dv_512x512.ckpt | 512x512 | re10k, dl3dv |
Nous supposons que les poids téléchargés se trouvent dans le répertoire pretrained_weights
.
Notre système de caméra est le même que pixelSplat. Les matrices intrinsèques de la caméra sont normalisées (la première ligne est divisée par la largeur de l'image et la deuxième ligne est divisée par la hauteur de l'image). Les matrices extrinsèques de la caméra sont des matrices caméra-monde de style OpenCV (+X à droite, +Y vers le bas, +Z la caméra regarde l'écran).
Veuillez vous référer à DATASETS.md pour la préparation de l'ensemble de données.
Le point d'entrée principal est src/main.py
. Appelez-le via :
# 8 GPU, avec chaque taille de lot = 16. Supprimez les deux derniers arguments si vous ne souhaitez pas utiliser wandb pour la journalisationpython -m src.main +experiment=re10k wandb.mode=online wandb.name=re10k
Cette configuration de formation par défaut nécessite 8 GPU avec une taille de lot de 16 sur chaque GPU (>=80 Go de mémoire). La formation durera environ 6 heures. Vous pouvez ajuster la taille du lot en fonction de votre matériel, mais notez que la modification de la taille totale du lot peut nécessiter une modification du taux d'apprentissage initial pour maintenir les performances. Vous pouvez vous référer au re10k_1x8 pour un entraînement sur 1 GPU A6000 (48 Go de mémoire), qui produira des performances similaires.
# 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
Vous pouvez définir wandb.name=SAVE_FOLDER_NAME
pour spécifier le chemin d'enregistrement.
Pour évaluer les performances de l'estimation de pose, vous pouvez exécuter la commande suivante :
# RealEstate10kpython -m src.eval_pose + expériment = re10k + evaluation = eval_pose checkPointing.load =. / Pretrained_weights / mixre10kdl3dv.ckpt dataset/[email protected]_sampler=evaluation / evaluation_ .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
Notez que nous montrons ici l'évaluation à l'aide du modèle mixte formé sur RealEstate10K et DL3DV. Vous pouvez remplacer le chemin du point de contrôle par d'autres modèles formés.
Ce projet est développé avec plusieurs dépôts fantastiques : pixelSplat, DUSt3R et CroCo. Nous remercions les auteurs originaux pour leur excellent travail. Nous remercions l'aimable aide de David Charatan pour avoir fourni le code d'évaluation et les modèles pré-entraînés pour certaines des méthodes précédentes.
@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} }