Esta é a implementação oficial do Pytorch do artigo IROS 2024 Deep Visual Odometry com eventos e quadros usando redes recorrentes assíncronas e massivamente paralelas (RAMP) para odometria visual (VO).
Se você usar qualquer parte deste código ou conjuntos de dados que acompanham o artigo, considere citar o seguinte
@InProceedings{Pellerito_2024_IROS,author = {Pellerito, Roberto e Cannici, Marco e Gehrig, Daniel e Belhadj, Joris e Dubois-Matra, Olivier e Casasco, Massimo e Scaramuzza, Davide},title = {Odometria Visual Profunda com Eventos e Quadros} ,booktitle = {Conferência Internacional IEEE/RSJ sobre Robôs Inteligentes (IROS)}, mês = {junho}, ano = {2024}}
Apresentamos o RAMP-VO, o primeiro sistema VO baseado em imagens e eventos aprendidos de ponta a ponta. Ele aproveita novos codificadores recorrentes, assíncronos e massivamente paralelos (RAMP), capazes de fundir eventos assíncronos com dados de imagem.
Você pode criar diretamente um novo ambiente conda usando o arquivo environment.yml
fornecido.
conda env create -f ambiente.yml conda ativar rampavo
Dependendo da sua versão CUDA, pode ser necessário instalar uma versão diferente do torch
. O código a seguir foi testado com python 3.10.0 e CUDA 12.2 em uma GPU Nvidia Quadro RTX 8000.
pip instalar tocha torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124 pip instalar -r requisitos.txt
Como usamos o lietorch para as operações do grupo Lie, você precisa instalar alguns pacotes adicionais. Para instalar o eigen-3.4.0 necessário, execute os seguintes comandos:
cd rampavo wget https://gitlab.com/libeigen/eigen/-/archive/3.4.0/eigen-3.4.0.zip descompacte eigen-3.4.0.zip -d terceiros
Finalmente instale o pacote Ramp VO.
cd rampavo instalação do pip.
Baixe os pontos de verificação pré-treinados e coloque-os na pasta de checkpoints
.
RAMP-VO Multiescala | Escala única RAMP-VO | |
---|---|---|
posto de controle | download | download |
Tartan Event é uma versão do conjunto de dados TartanAir com dados adicionais de câmeras de eventos.
Baixe o conjunto de dados TartanAir aqui.
Baixe o conjunto de dados TartanEvent com o script fornecido e descompacte-o na mesma pasta do TartanAir:
UNZIP_FILES=true DELETE_FILES=true ./scripts/download_tartanevent.sh /path/to/TartanAir
A estrutura de pastas resultante deve ser a seguinte:
|--- /your/path/to/TartanAir | |--- abandonedfactory | |--- Easy | |--- P000 | |--- depth_left | |--- events.h5 | |--- fps.txt | |--- image_left | |--- indices.txt | |--- pose_left.txt | |--- timestamps.txt | |--- P001 | |--- ... | |--- P002 | |--- ... | |--- Hard | |--- P000 | |--- P001 | |--- P002 | |--- ... |
A competição TartanEvent é um subconjunto do conjunto de dados TartanAir usado para competição SLAM com dados adicionais de câmeras de eventos.
Baixe o conjunto de dados TartanAir para competição SLAM aqui.
Baixe o conjunto de dados da competição TartanEvent aqui.
Por fim, organize os dados conforme relatado acima para o conjunto de dados TartanEvent.
Baixe as sequências de Malapert aqui.
Baixe as sequências da Apollo aqui.
Você pode organizar esse conjunto de dados da seguinte maneira:
|--- /your/path/to/MoonLanding | |--- Malapert_crater | |--- Cam 1 | |--- Cam 2 | |--- Apollo | |--- record1_segment0_54-320 | |--- record3_segment0_81-208 | |--- record4_segment0_96-252
Baixe o conjunto de dados StereoDavis aqui.
Selecione as sequências conforme relatado aqui.
Baixe o conjunto de dados EDS aqui.
Organize o conjunto de dados conforme relatado acima para o conjunto de dados TartanAir ou MoonLanding.
python avaliar_tartanevent.py --pesos=pontos de verificação/RAMPVO_MultiScale.pth --config_eval=config_net/MultiScale_TartanEvent.json --config_VO=config_vo/default.yaml
avaliação python.py --pesos=pontos de verificação/RAMPVO_MultiScale.pth --config_eval=config_net/MultiScale_ECCV20Competition.json --config_VO=config_vo/default.yaml
avaliação python.py --pesos=pontos de verificação/RAMPVO_MultiScale.pth --config_eval=config_net/MultiScale_Apollo.json --config_VO=config_vo/default.yaml
avaliação python.py --pesos=pontos de verificação/RAMPVO_MultiScale.pth --config_eval=config_net/MultiScale_Malapert.json --config_VO=config_vo/default.yaml
avaliação python.py --pesos=pontos de verificação/RAMPVO_MultiScale.pth --config_eval=config_net/MultiScale_StereoDavis.json --config_VO=config_vo/default.yaml
avaliação python.py --pesos=pontos de verificação/RAMPVO_MultiScale.pth --config_eval=config_net/MultiScale_EDS.json --config_VO=config_vo/default.yaml
Você pode usar a mesma ferramenta de comando acima, alterando os pesos e o arquivo de configuração. Fornecemos em rampvo/config_net os arquivos de configuração para alguns exemplos de conjuntos de dados, por exemplo, Malapert. Você pode alterar a seguinte variável "input_mode" e especificar "SingleScale" para usar nosso modelo de escala única.
avaliação python.py --pesos=pontos de verificação/RAMPVO_SingleScale.pth --config_eval=config_net/SingleScale_Malapert.json --config_VO=config_vo/default.yaml
Baixe o conjunto de dados TartanAir, do TartanAir e baixe o conjunto de dados TartanEvent aqui. Organize os dados usando a estrutura de pastas relatada acima para a avaliação do conjunto de dados TartanAir.
Baixe as informações do conjunto de dados em conserva de TartanEvent.pickle e coloque-as no diretório rampvo/datasets_pickle
treinar correndo
python train.py --name = nome_do_seu_experimento --config_path=config_net/MultiScale_TartanEvent.json --data_path=conjuntos de dados/TartanEvent --trabalhadores=8
Este projeto usou código dos seguintes projetos:
DPVO