Dieses Repository enthält den Quellcode für unseren Artikel:
Multi-Session-SLAM mit differenzierbarer Wide-Baseline-Pose-Optimierung
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
Sie müssen außerdem die Drittanbieter-Bibliotheken hloc installieren
cd thirdparty/Hierarchical-Localization
python -m pip install -e .
cd ../..
und eigen
wget https://gitlab.com/libeigen/eigen/-/archive/3.4.0/eigen-3.4.0.zip
unzip eigen-3.4.0.zip -d thirdparty
Endlich laufen
pip install .
Modellgewichte herunterladen
Wir stellen die Modellgewichte für das VO-Backbone, das Two-View-Backbone und das Two-View-Backbone nach dem Homographie-Vortraining bereit:
https://drive.google.com/drive/folders/11iC4ZAmO_mWMUjkpS83HgVcS80hFL-30?usp=sharing
Führen Sie conda install jupyter
aus, falls dies noch nicht geschehen ist.
Wir stellen Notizbücher zur Verfügung, um unsere Zwei-Ansicht-Pose-Methode zu demonstrieren. Die Funktion run_model(model, images, intrinsics)
gibt eine Liste von Zwischenvorhersagen von Posen/Übereinstimmungen aus. Die letzte (beste) Vorhersage hat die Form
Um Vorhersagen auf Scannet/Mega Depth zu visualisieren, befolgen Sie die Anweisungen zum Herunterladen von Daten mit zwei Ansichten und führen Sie sie aus
jupyter notebook demo_scannet_megadepth.ipynb
Um eine Vorhersage für ein beliebiges Bildpaar zu visualisieren, bearbeiten Sie demo_pair.ipynb
und führen Sie es aus
jupyter notebook demo_pair.ipynb
Zwei-Ansicht
Die Autoren von LoFTR stellen großzügig die Testsets für Scannet und Mega Depth zur Verfügung. Laden Sie sie herunter und entpacken Sie sie in data/scannet/scannet_test_1500/
bzw. data/megadepth/megadepth_test_1500/
.
untar megadepth_test_1500.tar -C data/megadepth/
untar scannet_test_1500.tar -C data/scannet/
Mehrsitzungs-SLAM
EuRoC : Laden Sie hier die Sequenzen aus dem EuRoC-Datensatz herunter. Stellen Sie sicher, dass Sie das ASL-Format herunterladen. Entpacken Sie die Sequenzen unter data/EuRoC
ETH3D : Sie können die Sequenzen aus dem ETH3D-Trainingsdatensatz herunterladen, indem Sie das bereitgestellte Skript download_eth3d_slam_datasets.py verwenden. Sie können nur Mono und RGB auswählen. Entpacken Sie die Sequenzen unter data/ETH3D
Mehrsitzungs-SLAM
Um unseren vollständigen Multi-Session-SLAM-Ansatz für alle EuRoC-Sequenzgruppen zu evaluieren, führen Sie Folgendes aus:
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 '
Um unsere Methode für die ETH3D-Sequenzgruppen auszuwerten, führen Sie Folgendes aus:
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
Beide Skripte folgen derselben Vorlage. Um die Pipeline auf neue Daten zu erweitern, ist lediglich die Implementierung eines Datenladers zum Laden von Bildern und intrinsischen Daten erforderlich.
Zwei-Ansicht-Pose
Um unsere Zwei-Ansicht-Pose-Methode auf Scannet auszuwerten, führen Sie Folgendes aus:
python evaluate.py --dataset test_scannet --load_ckpt twoview.pth -o ScanNetDatasetWrapper.pad_to_size=840
Für Mega Depth führen Sie aus
python evaluate.py --dataset test_megadepth --load_ckpt twoview.pth
Datendownload
Synthetische Homographien : Führen Sie das Download-Skript unter https://github.com/filipradenovic/revisitop aus, um den Oxford-Paris-Distraktoren-Datensatz herunterzuladen. Speichern Sie die Dateien unter data/revisitop1m/jpg/
Scannet/Mega Depth : Befolgen Sie die Anweisungen aus dem LoFTR-Trainingsdaten-Setup: https://github.com/zju3dv/LoFTR/blob/master/docs/TRAINING.md. Entpacken Sie *_indices.tar
in index
Unterordner.
VO-Daten herunterladen : Um die Daten zum Training des VO-Backbones herunterzuladen, folgen Sie den Download-Anweisungen aus dem DROID-SLAM-Repo.
Das vollständige Datenlayout sollte wie folgt aussehen:
├── data
├── revisitop1m
├── jpg
├── revisitop1m.txt
├── scannet
├── index
├── scannet_test_1500
├── train
├── megadepth
├── index
├── scannet_test_1500
├── train
├── TartanAir
├── abandonedfactory
├── ...
Homographie Zwei-Ansicht-Vorschulung
Auf einem oder mehreren A6000 (wir haben 1 verwendet) ausführen
python train.py -g train_homog.gin --batch_size 14 --name homog_pretrain
mv model_weights/homog_pretrain/step_140000.pth homog_pretrain.pth
Vollständiges Training mit zwei Ansichten
Auf einem oder mehreren A6000 (wir haben 10 verwendet) ausführen
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
VO-Training
Auf einem oder mehreren A6000 (wir haben 1 verwendet) ausführen
python train_vo.py --steps=240000 --lr=0.00008 --name=vo
mv checkpoints/vo_240000.pth vo.pth
Dieses Projekt basiert auf Code aus vorhandenen Repositorys:
Vielen Dank an die Autoren für die Open-Source-Veröffentlichung ihres Codes