实验笔记之——MASt3R-SLAM

2025-02-26

引言

在MASt3R提供的a two-view 3D reconstruction and matching prior基础上,作者通过引入有效的pointmap matching, camera tracking and local fusion, graph construction and loop closure, 以及second-order global optimisation,提出了MASt3R-SLAM,一个实时的单目稠密SLAM系统(可以实现15FPS的定位及稠密三维重建)。 同时,MASt3R原本就不依赖于camera的model,那么就可以实现reconstructing scenes with generic, time-varying camera models(也就是demo中zoom in zoom out的情况下的稳定三维重建).当然要达到在多个benchmark上的SOTA performance,还是需要“已知的标定参数”。

之前博客已经将DUSt3R以及MASt3R进行了介绍以及测试。 本博文对MASt3R-SLAM进行深入的学习~

@article{murai2024mast3r,
  title={MASt3R-SLAM: Real-Time Dense SLAM with 3D Reconstruction Priors},
  author={Murai, Riku and Dexheimer, Eric and Davison, Andrew J},
  journal={arXiv preprint arXiv:2412.12392},
  year={2024}
}

本博客为本人学习记录用~

配置过程

# git clone --recurse-submodules https://github.com/rmurai0610/MASt3R-SLAM.git
# rm -rf .git

conda create -n mast3r-slam python=3.11
conda activate mast3r-slam
# conda remove --name mast3r-slam --all

# 查看cuda版本来决定安装哪个pytorch
nvcc --version

# CUDA 12.1 (12.2应该也是用这个,A100)
conda install pytorch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1 pytorch-cuda=12.1 -c pytorch -c nvidia

#CUDA11.7 (3090)
conda install pytorch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 pytorch-cuda=11.7 -c pytorch -c nvidia

pip install -e thirdparty/mast3r
pip install -e thirdparty/in3d
pip install --no-build-isolation -e .

设置checkpoint

应该就是下载系列的权重文件

mkdir -p checkpoints/
wget https://download.europe.naverlabs.com/ComputerVision/MASt3R/MASt3R_ViTLarge_BaseDecoder_512_catmlpdpt_metric.pth -P checkpoints/
wget https://download.europe.naverlabs.com/ComputerVision/MASt3R/MASt3R_ViTLarge_BaseDecoder_512_catmlpdpt_metric_retrieval_trainingfree.pth -P checkpoints/
wget https://download.europe.naverlabs.com/ComputerVision/MASt3R/MASt3R_ViTLarge_BaseDecoder_512_catmlpdpt_metric_retrieval_codebook.pkl -P checkpoints/

下载数据集

此处直接用之前下载的Euroc数据集/home/gwp/AirIMU/Euroc_dataset

# TUM-RGBD Dataset
bash ./scripts/download_tum.sh

# 7-Scenes Dataset
bash ./scripts/download_7_scenes.sh

# EuRoC Dataset
bash ./scripts/download_euroc.sh

# ETH3D SLAM Dataset
bash ./scripts/download_eth3d.sh

注意在下载的脚本里面会对数据集进行创建文件夹然后规定命名,比如euroc,而代码中会寻找euroc来确定是否目标数据集,因此如果下载的数据文件命名不一样,需要修改文件名或者代码~

当然也可以进行软链接:

ln -s /home/gwp/AirIMU/Euroc_dataset /home/gwp/MASt3R-SLAM/datasets/euroc

Debug过程

EuRoC Dataset,bash运行的应该就是分别采用带标定参数或者不带标定参数的

conda activate mast3r-slam
# bash ./scripts/eval_euroc.sh 
# bash ./scripts/eval_euroc.sh --no-calib

# 直接采用py脚本运行不带标定参数的
CUDA_VISIBLE_DEVICES=3 python main.py --dataset datasets/euroc/MH_01_easy/ --no-viz --config config/eval_no_calib.yaml
CUDA_VISIBLE_DEVICES=3 python main.py --dataset datasets/euroc/V1_03_difficult --config config/eval_no_calib.yaml
CUDA_VISIBLE_DEVICES=3 python main.py --dataset datasets/tum/rgbd_dataset_freiburg1_room/ --config config/calib.yaml

但是会报错RuntimeError: CUDA error: no kernel image is available for execution on the device,也提了issue。最终在issue中发现了类似的问题,然后根据作者提供的建议进行修改~

这个问题应该是CUDA compute capability跟编译要用的不一样导致的。 先查看一下nvidia-smi --query-gpu=compute_cap --format=csv发现CUDA compute capability是8.0

那么就将setup.py中的"-gencode=arch=compute_86,code=sm_86",先改为80即可

重新编译pip install --no-build-isolation -e .,再次运行就work!!!

至此,如果不需要可视化的话应该就没有其他问题了。但是如果要进行可视化,运行代码会发现libGL打不开

从下面路径可以找到/lib/x86_64-linux-gnu/dri/swrast_dri.so然后将其进行复制到/usr/lib/dri

sudo cp /lib/x86_64-linux-gnu/dri/swrast_dri.so /usr/lib/dri

# 当然软链接一下也是可以的,注意需要创建文件夹dri
sudo mkdir dri
ln -s /lib/x86_64-linux-gnu/dri/swrast_dri.so /usr/lib/dri

接下来又出现新的错误:

libGL error: MESA-LOADER: failed to open swrast: /home/gwp/miniconda3/envs/mast3r-slam/bin/../lib/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib/x86_64-linux-gnu/libLLVM-15.so.1) (search paths /usr/lib/x86_64-linux-gnu/dri:\$${ORIGIN}/dri:/usr/lib/dri, suffix _dri)
libGL error: failed to load driver: swrast

应该是缺少conda识别的GCC,执行安装:

 conda install -c conda-forge gcc

接下来就完全可以正常运行了~

PS:也尝试了在cuda11.7的3090上配置也是正常的(而我的3090上的就是8.6因此setup.py不需要更改)~

之前有同行在issue提到到对于pytorch<2.5.0在运行pip install --no-build-isolation -e .的时候可能会报错。 对应的linalg_norm部分进行修改即可~

实验效果

见下面视频

参考资料