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/Hierarchische-Lokalisierung python -m pip install -e .cd ../..
und eigen
wget https://gitlab.com/libeigen/eigen/-/archive/3.4.0/eigen-3.4.0.zip entpacken Sie eigen-3.4.0.zip -dthirdparty
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/
.
entpacken mega Depth_test_1500.tar -C data/mega Depth/ entpacken 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-Tabelle 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 evaluieren.py --dataset test_scannet --load_ckpt twoview.pth -o ScanNetDatasetWrapper.pad_to_size=840
Für Mega Depth führen Sie aus
Python evaluieren.py --dataset test_mega Depth --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.
Herunterladen von VO-Daten : Um die Daten für das Training des VO-Backbones herunterzuladen, folgen Sie den Download-Anweisungen aus dem DROID-SLAM-Repo.
Das vollständige Datenlayout sollte wie folgt aussehen:
├── Daten ├── revisitop1m ├── jpg ├── revisitop1m.txt ├── scannet ├── Index ├── scannet_test_1500 ├── Zug ├── Megatiefe ├── Index ├── scannet_test_1500 ├── Zug ├── TartanAir ├── verlassene Fabrik ├── ...
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:
Hierarchische Lokalisierung
LoFTR
DPVO
Pytorch3D
Vielen Dank an die Autoren für die Open-Source-Veröffentlichung ihres Codes