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 thirdparty/Hierarchical-Localization
python -m pip install -e .
cd ../..
et propre
wget https://gitlab.com/libeigen/eigen/-/archive/3.4.0/eigen-3.4.0.zip
unzip eigen-3.4.0.zip -d thirdparty
Enfin, courez
pip install .
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
jupyter notebook 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/
.
untar megadepth_test_1500.tar -C data/megadepth/
untar 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 ' Machine Hall '
python eval_euroc.py ' Machine Hall0-3 '
Pour évaluer notre méthode sur les groupes de séquences ETH3D, exécutez
python eval_eth3d.py sofa
python eval_eth3d.py table
python eval_eth3d.py plant_scene
python eval_eth3d.py einstein
python eval_eth3d.py planar
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 evaluate.py --dataset test_scannet --load_ckpt twoview.pth -o ScanNetDatasetWrapper.pad_to_size=840
Pour Megaprofondeur, exécutez
python evaluate.py --dataset test_megadepth --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 d'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 :
├── data
├── revisitop1m
├── jpg
├── revisitop1m.txt
├── scannet
├── index
├── scannet_test_1500
├── train
├── megadepth
├── index
├── scannet_test_1500
├── train
├── TartanAir
├── abandonedfactory
├── ...
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 checkpoints/vo_240000.pth vo.pth
Ce projet s'appuie sur le code des référentiels existants :
Merci aux auteurs d'avoir open-source leur code