Este repositorio contiene el código fuente de nuestro artículo:
SLAM multisesión con optimización de pose 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 de terceros/localización jerárquica python -m pip instalar -e .cd ../..
y propio
wget https://gitlab.com/libeigen/eigen/-/archive/3.4.0/eigen-3.4.0.zip descomprimir eigen-3.4.0.zip -d tercero
Finalmente, corre
instalación de pipas.
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 previamente.
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
cuaderno jupyter 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.
descomprimir megaprofundidad_test_1500.tar -C datos/megaprofundidad/ descomprimir scannet_test_1500.tar -C datos/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 'Sala de máquinas'python eval_euroc.py 'Sala de máquinas0-3'
Para evaluar nuestro método en los grupos de secuencia ETH3D, ejecute
python eval_eth3d.py sofá tabla python eval_eth3d.py python eval_eth3d.py planta_escena pitón eval_eth3d.py einstein Python eval_eth3d.py plano
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 evalua.py --dataset test_scannet --load_ckpt twoview.pth -o ScanNetDatasetWrapper.pad_to_size=840
Para Megaprofundidad, ejecute
python evaluar.py --conjunto de datos test_megaprofundidad --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:
├── datos ├── revisitop1m ├──jpg ├── revisitop1m.txt ├── escannet ├── índice ├── scannet_test_1500 ├── tren ├── megaprofundidad ├── índice ├── scannet_test_1500 ├── tren ├── TartanAir ├── fábrica abandonada ├──...
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 puntos de control mv/vo_240000.pth vo.pth
Este proyecto se basa en código de repositorios existentes:
Localización jerárquica
LoFTR
OVPD
Pytorch3D
Gracias a los autores por abrir su código.