当前位置: 首页 > news >正文

Photo-SLAM论文理解、环境搭建、代码理解与实测效果

前言:第一个解耦式Photo-SLAM,亮点和效果。

参考:https://zhuanlan.zhihu.com/p/715311759

全网最细PhotoSLAM的conda环境配置教程,拒绝环境污染!!-CSDN博客

1. 环境搭建

硬件:RTX 4090D with 24 GB VRAM,i9 64 GB RAM。

系统:Ubuntu22.04,gcc11.4,cmake3.22.1;CUDA 11.8, CUDNN8.9.7。具体配置参考WIN11安装Ubuntu22.04双系统,驱动cuda,配置3D GS_535.230.02 最高支持cuda版本-CSDN博客

需要安装opencv及-contrib,libtorch。

1.0 依赖&源码下载

sudo apt-get update

sudo apt-get install libssl-dev

sudo apt install libeigen3-dev libboost-all-dev libjsoncpp-dev libopengl-dev mesa-utils libglfw3-dev libglm-dev

git clone https://github.com/HuajianUP/Photo-SLAM.git --recursive

1.1 OpenCV

从OpenCV realeases和
opencv_contrib下载4.8.0的压缩包,然后解压缩到同一文件夹下,比如 ~/opencv,然后在终端中:

cd opencv

cd opencv-4.8.0

mkdir build

cd build

cmake -DCMAKE_BUILD_TYPE=RELEASE -DWITH_CUDA=ON -DWITH_CUDNN=ON -DOPENCV_DNN_CUDA=ON -DWITH_NVCUVID=ON -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-11.8 -DOPENCV_EXTRA_MODULES_PATH="../../opencv_contrib-4.8.0/modules" -DBUILD_TIFF=ON -DBUILD_ZLIB=ON -DBUILD_JASPER=ON -DBUILD_CCALIB=ON -DBUILD_JPEG=ON -DWITH_FFMPEG=ON ..  //注意要提供CUDA11.8和opencv-contrib的路径

但是可能会报错:

1.1.1 报错ippicv下载不了,网络连接的问题

首先下载报错处的ippicv版本,我的是2021.8;并解压,解压后包含文件夹ippicv_lnx。

链接: https://pan.baidu.com/s/1ZIsyONF21cw6NNFG9mcQkA 提取码: astz

然后修改opencv-4.8.0/3rdparty/ippicv/ippicv.cmake第42行,将下载地质从网址"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/“改为包含下载文件ippicv_lnx的路径
                 "/xxx path xxx/ippicv_2021.8_lnx_intel64_20230330_general/"

然后继续上述cmake。

1.1.2 报错找不到cudnn

我已经成功安装了cudnn,参考Ubuntu22.04安装视觉环境(CUDA CUDNN TensorRT realsense PCL OpenCV) _multiple kernel module types are available for thi-CSDN博客

在cmake指令中增加:

-D CUDNN_VERSION=8.9.7 \
-D CUDNN_INCLUDE_DIR=/usr/local/cuda/include \

-D CUDNN_LIBRARY=/usr/local/cuda-11.8/lib64/libcudnn.so.8.9.7

然后继续上述cmake。直至configure done。

然后:

make -j8  //这个过程比较长,尤其是97%-99%这一段,等一会直到完成。

sudo make install  //将opencv安装到系统路径/usr/local/lib/cmake/opencv4。其中可执行文件在/usr/local/bin,库文件在/usr/local/lib,头文件在/usr/local/include。

1.2 安装 LibTorch <2.1.2

cxx11-abi-shared-with-deps-2.0.1+cu118, cxx11-abi 表示使用了 C++11 ABI, with-deps 表示该版本包含了所有的依赖项。

下载并解压:
wget https://download.pytorch.org/libtorch/cu118/libtorch-cxx11-abi-shared-with-deps-2.0.1%2Bcu118.zip -O libtorch-cu118.zip
unzip libtorch-cu118.zip -d ./the_path_to_where_you_extracted_LibTorch
rm libtorch-cu118.zip

修改Photo_SLAM的CMakeLists.txt,添加:
set(Torch_DIR ./LibTorch解压文件路径/libtorch/share/cmake/Torch)

1.3 编译Photo-SLAM

cd Photo-SLAM/
chmod +x ./build.sh
./build.sh

我是没有遇到编译问题。

1.4下载数据集

 Photo_SLAM的作者使用了Replica(NICE-SLAM版)、TUM-RGBD、EUROC三个数据集进行评估,提供了scripts/对应数据集的下载脚本download_xxx.sh。

cd scripts
chmod +x ./*.sh
./download_replica.sh
./download_tum.sh
./download_euroc.sh

我选择手动下载到我创建的数据集路径下。

2. 效果评估

2.1 实际运行界面

以replica/office1为例,指令:./bin/replica_rgbd ./ORB-SLAM3/Vocabulary/ORBvoc.txt ./cfg/ORB_SLAM3/RGB-D/Replica/office1.yaml ./cfg/gaussian_mapper/RGB-D/Replica/replica_rgbd.yaml /your path to/Replica/office1 ./your path to/results/replica/office1。

最终保存的结果包括:相机位姿、关键帧位姿(按TUM、EUROC、KITTI格式);GPU使用峰值,每帧跟踪用时;渲染图像、点云;3D GS场的psnr dssim指标(每个关键帧)。

3. 论文&代码理解

3.1 论文摘要

目的:虽然目前基于隐式神经(NeRF)表征的SLAM系统相比传统SLAM增加了逼真视觉重建的能力,但是依赖于计算资源(违背了SLAM系统的应用需求)。作者将3DGS实时渲染能力与传统的基于稀疏特征的SLAM系统ORB-SLAM3结合,从而保证能在嵌入式平台上实时运行。

创新点:基于几何特征主动致密化超级基元(hyper primitive,参数除了高斯椭球自带的位置、协方差(旋转和缩放)、密度、SH系数以外,还有ORB特征,可以理解为传统地图点和高斯椭球的结合);用图像的高斯金字塔而不是单张图像渐进式训练高斯场。

方法:基于ORB-SLAM3的跟踪和局部建图。然后对每个新关键帧,ORB-SLAM3会检测特征点是否有匹配地图点,如果没有,Photo-SLAM定义为inactive不活跃特征,然后用来初始化新的超级基元。在高斯场优化时(学习率固定为0.2),除了上述几何引导的致密化技巧,作者先用图像高斯金字塔(3层)中最顶层,即分辨率最低/最模糊的观测图像训练参数,然后向下层遍历直至底层原始分辨率图像。

验证:指标包括定位准确性ATE的RMSE和STD统计值;图像重建质量的PSNR,SSIM,LPIPS;跟踪帧率、渲染帧率;GPU现存使用峰值。每个序列运行5次取均值。

总结:跟踪准确性和实时性最好,证明了传统方法ORB-SLAM3跨场景的鲁棒性和泛化能力(相比于DROID-SLAM);相比于nerf-based SLAM的图像重建质量也是最优的(当时没有发表过同期的3DGS-based SLAM工作),证明了所提出的致密化和高斯金字塔优化方法的效果;内存占据最少,说明本方法基于稀疏特征点初始化高斯球,并结合致密化和优化技巧,对场景表征高效,冗余度很少。

3.2 代码架构

3.3 贡献和对应的代码细节

4. 运行结果

4.1 Replica

4.2 TUM-RGBD

4.3 EuRoC

4.4我的室内数据集

相关文章:

  • 使用 IDEA + Maven 搭建传统 Spring MVC + Thymeleaf 项目的详细步骤
  • java学习之数据结构:四、树(代码补充)
  • 数据结构-希尔排序(Python)
  • Python格式化字符串的四种方法
  • Web Workers 技术详解与最佳实践
  • 【STM32 学习笔记】GPIO输入与输出
  • C++初学者的入门指南
  • Nginx核心功能2
  • 初始AI大模型-起源和发展
  • 解决DNS劫持问题
  • 7400MB/s5050TBW完美结合,全新希捷酷玩530R SSD体验评测
  • 【KWDB 创作者计划】_Ubuntu 22.04系统KWDB数据库安装部署使用教程
  • 开源模型应用落地-qwen模型小试-Qwen3-8B-推理加速-vLLM(一)
  • 生成式AI服务内容被滥用的法律责任划分
  • 掌纹图像识别:解锁人类掌纹/生物识别的未来——技术解析与前沿数据集探索
  • 如何快速获取字符串的UTF-8或UTF-16编码二进制数据?数值转换成字符串itoa不是C标准?其它类型转换成字符串?其它类型转换成数值类型?
  • Java学习手册:Hibernate/JPA 使用指南
  • Python 矩阵运算:从理论到实践
  • 免费开源又全能,文件对比需求选他
  • (即插即用模块-Attention部分) 六十五、(2024 WACV) DLKA 可变形大核注意力
  • 印巴矛盾已达近年“最高点”:军政经文全面紧张,巴将向联合国通报局势
  • 恒瑞医药通过港交所上市聆讯,最快或5月挂牌上市
  • 福建两名厅级干部履新,张文胜已任省委省直机关工委副书记
  • 上千游客深夜滞留张家界大喊退票?景区:已采取措施限制人流量
  • 准80后遵义市自然资源局局长陈清松任怀仁市委副书记、代市长
  • 美股三大指数均收涨超1%,热门中概股强势拉升