Este repositório contém o código fonte do nosso artigo:
SLAM multissessão com otimização de pose de linha de base ampla diferenciável
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
Você também precisará instalar as bibliotecas de terceiros hloc
cd de terceiros/localização hierárquica python -m pip instalar -e .cd ../..
e próprio
wget https://gitlab.com/libeigen/eigen/-/archive/3.4.0/eigen-3.4.0.zip descompacte eigen-3.4.0.zip -d terceiros
Finalmente, corra
instalação do pip.
Baixar pesos do modelo
Fornecemos os pesos do modelo para o backbone VO, o backbone de duas visualizações e o backbone de duas visualizações após o pré-treinamento de homografia:
https://drive.google.com/drive/folders/11iC4ZAmO_mWMUjkpS83HgVcS80hFL-30?usp=sharing
Execute conda install jupyter
se não tiver feito isso anteriormente.
Fornecemos cadernos para demonstrar nosso método de pose de duas visualizações. A função run_model(model, images, intrinsics)
gera uma lista de previsões intermediárias de pose/correspondências. A última (melhor) previsão é da forma
Para visualizar previsões no Scannet/megaprofundidade, siga as instruções de download de dados de duas visualizações e execute
jupyter notebook demo_scannet_megadepth.ipynb
Para visualizar uma previsão em qualquer par de imagens, edite e execute demo_pair.ipynb
notebook jupyter demo_pair.ipynb
Duas visualizações
Os autores do LoFTR fornecem generosamente os conjuntos de testes para Scannet e Megaprofundidade. Baixe e descompacte-os em data/scannet/scannet_test_1500/
e data/megadepth/megadepth_test_1500/
, respectivamente.
descompactar megaprofundidade_test_1500.tar -C data/megaprofundidade/ descompacte scannet_test_1500.tar -C data/scannet/
SLAM multisessão
EuRoC : Baixe as sequências do conjunto de dados EuRoC aqui. Certifique-se de baixar o formato ASL. Descompacte as sequências em data/EuRoC
ETH3D : você pode baixar as sequências do conjunto de dados de treinamento ETH3D usando o script fornecido download_eth3d_slam_datasets.py. Você pode selecionar apenas mono, RGB. Descompacte as sequências em data/ETH3D
SLAM multisessão
Para avaliar nossa abordagem SLAM multissessão completa em todos os grupos de sequências EuRoC, execute
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 avaliar nosso método nos grupos de sequências ETH3D, execute
sofá python eval_eth3d.py tabela python eval_eth3d.py python eval_eth3d.py planta_scene python eval_eth3d.py einstein python eval_eth3d.py plano
Ambos os scripts seguem o mesmo modelo. Estender o pipeline para novos dados requer apenas a implementação de um dataloader para carregar imagens e intrínsecos.
Pose de duas vistas
Para avaliar nosso método de pose de duas visualizações no Scannet, execute
python avaliar.py --dataset test_scannet --load_ckpt twoview.pth -o ScanNetDatasetWrapper.pad_to_size=840
Para Megaprofundidade, execute
python avaliar.py --dataset test_megaprofundidade --load_ckpt twoview.pth
Download de dados
Homografias Sintéticas : Execute o script de download em https://github.com/filipradenovic/revisitop para baixar o conjunto de dados de distratores Oxford-Paris. Armazene os arquivos em data/revisitop1m/jpg/
Scannet/Megaprofundidade : Siga as instruções da configuração dos dados de treinamento do LoFTR: https://github.com/zju3dv/LoFTR/blob/master/docs/TRAINING.md. Descompacte *_indices.tar
em subpastas index
.
Download de dados VO : Para baixar os dados para treinar o backbone VO, siga as instruções de download do repositório DROID-SLAM.
O layout completo dos dados deve ser o seguinte:
├── dados ├── revisitop1m ├──jpg ├── revisitop1m.txt ├── scannet ├── índice ├── scannet_test_1500 ├── trem ├── megaprofundidade ├── índice ├── scannet_test_1500 ├── trem ├──TartanAir ├── fábrica abandonada ├── ...
Pré-treinamento de duas visualizações de homografia
Em um ou vários A6000s (usamos 1), execute
python train.py -g train_homog.gin --batch_size 14 --name homog_pretrain mv model_weights/homog_pretrain/step_140000.pth homog_pretrain.pth
Treinamento completo em duas visualizações
Em um ou vários A6000s (usamos 10), execute
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
Treinamento VO
Em um ou vários A6000s (usamos 1), execute
python train_vo.py --steps=240000 --lr=0.00008 --name=vo pontos de verificação mv/vo_240000.pth vo.pth
Este projeto depende de código de repositórios existentes:
Localização hierárquica
LoFTR
DPVO
Pytorch3D
Obrigado aos autores por abrirem o código de seu código