Este repositorio contiene el código fuente de nuestro artículo:
SLAM multisesión con optimización de postura de línea de base amplia diferenciable
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
También necesitarás instalar las bibliotecas de terceros hloc.
cd thirdparty/Hierarchical-Localization
python -m pip install -e .
cd ../..
y propio
wget https://gitlab.com/libeigen/eigen/-/archive/3.4.0/eigen-3.4.0.zip
unzip eigen-3.4.0.zip -d thirdparty
Finalmente, corre
pip install .
Descargar pesos modelo
Proporcionamos los pesos del modelo para la columna vertebral VO, la columna vertebral de dos vistas y la columna vertebral de dos vistas después del entrenamiento previo de homografía:
https://drive.google.com/drive/folders/11iC4ZAmO_mWMUjkpS83HgVcS80hFL-30?usp=sharing
Ejecute conda install jupyter
si no lo hizo anteriormente.
Proporcionamos cuadernos para demostrar nuestro método de pose de dos vistas. La función run_model(model, images, intrinsics)
genera una lista de predicciones intermedias de pose/coincidencias. La última (mejor) predicción es de la forma
Para visualizar predicciones en Scannet/megaprofundidad, siga las instrucciones de descarga de datos de dos vistas y ejecute
jupyter notebook demo_scannet_megadepth.ipynb
Para visualizar una predicción en cualquier par de imágenes, edite y ejecute demo_pair.ipynb
jupyter notebook demo_pair.ipynb
Dos vistas
Los autores de LoFTR proporcionan generosamente los conjuntos de prueba para Scannet y Mega Depth. Descárguelos y descomprímalos en data/scannet/scannet_test_1500/
y data/megadepth/megadepth_test_1500/
, respectivamente.
untar megadepth_test_1500.tar -C data/megadepth/
untar scannet_test_1500.tar -C data/scannet/
SLAM multisesión
EuRoC : descargue las secuencias del conjunto de datos EuRoC aquí. Asegúrese de descargar el formato ASL. Desempaquete las secuencias en data/EuRoC
ETH3D : puede descargar las secuencias del conjunto de datos de entrenamiento de ETH3D utilizando el script proporcionado download_eth3d_slam_datasets.py. Puede seleccionar mono, solo RGB. Desempaquete las secuencias en data/ETH3D
SLAM multisesión
Para evaluar nuestro enfoque SLAM multisesión completo en todos los grupos de secuencias EuRoC, ejecute
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 '
Para evaluar nuestro método en los grupos de secuencia ETH3D, ejecute
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
Ambos guiones siguen la misma plantilla. Ampliar la canalización a nuevos datos solo requiere implementar un cargador de datos para cargar imágenes e intrínsecos.
Pose de dos vistas
Para evaluar nuestro método de pose de dos vistas en Scannet, ejecute
python evaluate.py --dataset test_scannet --load_ckpt twoview.pth -o ScanNetDatasetWrapper.pad_to_size=840
Para Megaprofundidad, ejecute
python evaluate.py --dataset test_megadepth --load_ckpt twoview.pth
Descarga de datos
Homografías sintéticas : ejecute el script de descarga en https://github.com/filipradenovic/revisitop para descargar el conjunto de datos de distractores de Oxford-Paris. Guarde los archivos en data/revisitop1m/jpg/
Scannet/Mega Depth : siga las instrucciones de la configuración de datos de entrenamiento de LoFTR: https://github.com/zju3dv/LoFTR/blob/master/docs/TRAINING.md. Desempaquete *_indices.tar
en subcarpetas index
.
Descarga de datos de VO : para descargar los datos para entrenar la columna vertebral de VO, siga las instrucciones de descarga del repositorio de DROID-SLAM.
El diseño completo de los datos debe ser el siguiente:
├── data
├── revisitop1m
├── jpg
├── revisitop1m.txt
├── scannet
├── index
├── scannet_test_1500
├── train
├── megadepth
├── index
├── scannet_test_1500
├── train
├── TartanAir
├── abandonedfactory
├── ...
Preentrenamiento de homografía de dos vistas
En uno o varios A6000 (usamos 1), ejecute
python train.py -g train_homog.gin --batch_size 14 --name homog_pretrain
mv model_weights/homog_pretrain/step_140000.pth homog_pretrain.pth
Entrenamiento completo de dos vistas
En uno o varios A6000 (usamos 10), ejecute
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
entrenamiento de VO
En uno o varios A6000 (usamos 1), ejecute
python train_vo.py --steps=240000 --lr=0.00008 --name=vo
mv checkpoints/vo_240000.pth vo.pth
Este proyecto se basa en código de repositorios existentes:
Gracias a los autores por abrir su código.