Ce référentiel contient le code source de notre article :
SLAM multi-sessions avec optimisation de pose à large base différenciable
Lahav Lipson, Jia Deng
@inproceedings{lipson2024multi, title={Multi-Session SLAM with Differentiable Wide-Baseline Pose Optimization}, author={Lipson, Lahav and Deng, Jia}, booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition}, year={2024} }
git clone --recursive [email protected]:princeton-vl/MultiSlam_DiffPose.git cd MultiSlam_DiffPose conda env create --file environment.yml --name msdp conda activate msdp
Vous devrez également installer les bibliothèques tierces hloc
cd tiers/localisation hiérarchique python -m pip install -e .cd ../..
et propre
wget https://gitlab.com/libeigen/eigen/-/archive/3.4.0/eigen-3.4.0.zip décompresser eigen-3.4.0.zip -d tiers
Enfin, courez
pip installer.
Télécharger les poids des modèles
Nous fournissons les poids du modèle pour le squelette VO, le squelette à deux vues et le squelette à deux vues après pré-entraînement à l'homographie :
https://drive.google.com/drive/folders/11iC4ZAmO_mWMUjkpS83HgVcS80hFL-30?usp=sharing
Exécutez conda install jupyter
si ce n’est pas déjà fait.
Nous fournissons des cahiers pour démontrer notre méthode de pose à deux vues. La fonction run_model(model, images, intrinsics)
génère une liste de prédictions intermédiaires de pose/matchs. La dernière (meilleure) prédiction est de la forme
Pour visualiser les prédictions sur Scannet/megadegree, suivez les instructions de téléchargement de données à deux vues et exécutez
jupyter notebook demo_scannet_megadepth.ipynb
Pour visualiser une prédiction sur n'importe quelle paire d'images, modifiez et exécutez demo_pair.ipynb
carnet jupyter demo_pair.ipynb
Deux vues
Les auteurs de LoFTR fournissent généreusement les ensembles de tests pour Scannet et Megadegree. Téléchargez-les et décompressez-les respectivement dans data/scannet/scannet_test_1500/
et data/megadepth/megadepth_test_1500/
.
décompresser megaprofondeur_test_1500.tar -C data/mégaprofondeur/ décompresser scannet_test_1500.tar -C data/scannet/
SLAM multi-sessions
EuRoC : Téléchargez les séquences du jeu de données EuRoC ici. Assurez-vous de télécharger le format ASL. Décompressez les séquences sous data/EuRoC
ETH3D : vous pouvez télécharger les séquences de l'ensemble de données de formation ETH3D à l'aide du script fourni download_eth3d_slam_datasets.py. Vous pouvez sélectionner mono, RVB uniquement. Décompressez les séquences sous data/ETH3D
SLAM multi-sessions
Pour évaluer notre approche SLAM multi-session complète sur tous les groupes de séquences EuRoC, exécutez
python eval_euroc.py 'Vicon 1'python eval_euroc.py 'Vicon 2'python eval_euroc.py 'Salle des machines'python eval_euroc.py 'Salle des machines0-3'
Pour évaluer notre méthode sur les groupes de séquences ETH3D, exécutez
canapé python eval_eth3d.py table python eval_eth3d.py python eval_eth3d.py plante_scene python eval_eth3d.py einstein python eval_eth3d.py planaire
Les deux scripts suivent le même modèle. L'extension du pipeline à de nouvelles données nécessite uniquement la mise en œuvre d'un chargeur de données pour charger les images et les éléments intrinsèques.
Pose à deux vues
Pour évaluer notre méthode de pose à deux vues sur Scannet, exécutez
python évaluer.py --dataset test_scannet --load_ckpt twoview.pth -o ScanNetDatasetWrapper.pad_to_size=840
Pour Megaprofondeur, exécutez
python évaluer.py --dataset test_megadegree --load_ckpt twoview.pth
Téléchargement de données
Homographies synthétiques : exécutez le script de téléchargement sur https://github.com/filipradenovic/revisitop pour télécharger l'ensemble de données des distractions Oxford-Paris. Stockez les fichiers sous data/revisitop1m/jpg/
Scannet/Megadegree : Suivez les instructions de la configuration des données d'entraînement LoFTR : https://github.com/zju3dv/LoFTR/blob/master/docs/TRAINING.md. Décompressez le *_indices.tar
dans les sous-dossiers index
.
Téléchargement des données VO : Pour télécharger les données nécessaires à l'entraînement du backbone VO, suivez les instructions de téléchargement à partir du dépôt DROID-SLAM.
La présentation complète des données doit être la suivante :
├── données ├── revisitop1m ├──jpg ├── revisitop1m.txt ├── scannet ├── indice ├── scannet_test_1500 ├── train ├── mégaprofondeur ├── indice ├── scannet_test_1500 ├── train ├──TartanAir ├── usine abandonnée ├── ...
Pré-formation Homographie à deux vues
Sur un ou plusieurs A6000 (nous en avons utilisé 1), exécutez
python train.py -g train_homog.gin --batch_size 14 --name homog_pretrain mv model_weights/homog_pretrain/step_140000.pth homog_pretrain.pth
Formation complète à deux vues
Sur un ou plusieurs A6000 (nous en avons utilisé 10), exécutez
python train.py -g train_pose.gin --batch_size 12 --name twoview --load_ckpt homog_pretrain.pth mv model_weights/twoview/step_100000.pth twoview.pth
Formation VO
Sur un ou plusieurs A6000 (nous en avons utilisé 1), exécutez
python train_vo.py --steps=240000 --lr=0.00008 --name=vo mv points de contrôle/vo_240000.pth vo.pth
Ce projet s'appuie sur le code des référentiels existants :
Localisation hiérarchique
LoFTR
DPVO
Pytorch3D
Merci aux auteurs d'avoir open-source leur code