Этот репозиторий содержит исходный код нашей статьи:
Многосессионный SLAM с дифференцируемой оптимизацией позы с широкой базовой линией
Лахав Липсон, Цзя Дэн
@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
Вам также потребуется установить сторонние библиотеки hloc.
cd thirdparty/Hierarchical-Localization
python -m pip install -e .
cd ../..
и собственный
wget https://gitlab.com/libeigen/eigen/-/archive/3.4.0/eigen-3.4.0.zip
unzip eigen-3.4.0.zip -d thirdparty
Наконец, запустите
pip install .
Скачать вес модели
Мы предоставляем веса модели для магистрали VO, магистрали с двумя представлениями и магистрали с двумя представлениями после предварительного обучения гомографии:
https://drive.google.com/drive/folders/11iC4ZAmO_mWMUjkpS83HgVcS80hFL-30?usp=sharing
Запустите conda install jupyter
если это не было сделано ранее.
Мы предоставляем блокноты для демонстрации нашего метода позы с двумя проекциями. Функция run_model(model, images, intrinsics)
выводит список промежуточных прогнозов позы/совпадений. Последний (лучший) прогноз имеет вид
Чтобы визуализировать прогнозы на Scannet/megahigh, следуйте инструкциям по загрузке данных в двух представлениях и запустите
jupyter notebook demo_scannet_megadepth.ipynb
Чтобы визуализировать прогноз для любой пары изображений, отредактируйте и запустите demo_pair.ipynb
jupyter notebook demo_pair.ipynb
Два вида
Авторы LoFTR щедро предоставляют наборы для тестирования Scannet и Megaeeper. Загрузите и распакуйте их в data/scannet/scannet_test_1500/
и data/megadepth/megadepth_test_1500/
соответственно.
untar megadepth_test_1500.tar -C data/megadepth/
untar scannet_test_1500.tar -C data/scannet/
Многосессионный SLAM
EuRoC : Загрузите последовательности из набора данных EuRoC здесь. Обязательно загрузите формат ASL. Распакуйте последовательности в data/EuRoC
ETH3D : вы можете загрузить последовательности из набора обучающих данных ETH3D, используя предоставленный им скрипт download_eth3d_slam_datasets.py. Вы можете выбрать моно, только RGB. Распакуйте последовательности в data/ETH3D
Многосессионный SLAM
Чтобы оценить наш полный подход Multi-Session SLAM для всех групп последовательностей EuRoC, запустите
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 '
Чтобы оценить наш метод на группах последовательностей ETH3D, запустите
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
Оба сценария следуют одному и тому же шаблону. Расширение конвейера для новых данных требует только реализации загрузчика данных для загрузки изображений и встроенных функций.
Поза с двумя видами
Чтобы оценить наш метод позы с двумя изображениями в Scannet, запустите
python evaluate.py --dataset test_scannet --load_ckpt twoview.pth -o ScanNetDatasetWrapper.pad_to_size=840
Для Мегаглубины запустите
python evaluate.py --dataset test_megadepth --load_ckpt twoview.pth
Загрузка данных
Синтетические гомографии : запустите сценарий загрузки на странице https://github.com/filipradenovic/revisitop, чтобы загрузить набор данных дистракторов Оксфорд-Париж. Сохраните файлы в data/revisitop1m/jpg/
Scannet/MegaDP : следуйте инструкциям по настройке обучающих данных LoFTR: https://github.com/zju3dv/LoFTR/blob/master/docs/TRAINING.md. Распакуйте *_indices.tar
в подпапки index
.
Загрузка данных VO : Чтобы загрузить данные для обучения магистрали VO, следуйте инструкциям по загрузке из репозитория DROID-SLAM.
Полная структура данных должна выглядеть следующим образом:
├── data
├── revisitop1m
├── jpg
├── revisitop1m.txt
├── scannet
├── index
├── scannet_test_1500
├── train
├── megadepth
├── index
├── scannet_test_1500
├── train
├── TartanAir
├── abandonedfactory
├── ...
Гомография с двумя представлениями
На одном или нескольких А6000 (мы использовали 1) запустите
python train.py -g train_homog.gin --batch_size 14 --name homog_pretrain
mv model_weights/homog_pretrain/step_140000.pth homog_pretrain.pth
Полное обучение в двух представлениях
На одном или нескольких А6000 (мы использовали 10) запустите
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
обучение ВО
На одном или нескольких А6000 (мы использовали 1) запустите
python train_vo.py --steps=240000 --lr=0.00008 --name=vo
mv checkpoints/vo_240000.pth vo.pth
Этот проект основан на коде из существующих репозиториев:
Спасибо авторам за открытый исходный код.