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

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我的室内数据集

http://www.xdnf.cn/news/3934.html

相关文章:

  • Kubernetes 虚拟机安全关机操作流程
  • 生成式AI服务内容被滥用的法律责任划分
  • Matlab实现CNN-BiLSTM时间序列预测未来
  • 进程间通信——管道
  • Paramiko 核心类关系图解析
  • Android Compose 中 CompositionLocal 的全面解析与最佳实践
  • ARM介绍及其体系结构
  • 【Linux我做主】进度条小程序深度解析
  • 浅析AI大模型为何需要向量数据库?【入门基础】
  • 2021年第十二届蓝桥杯省赛B组Java题解
  • KaiwuDB X 遨博智能 | 构建智能产线监测管理新系统
  • Python推导式:简洁高效的数据处理利器
  • PCB实战篇
  • Java 基础语法篇
  • 编程学习思考
  • 基于多策略混合改进哈里斯鹰算法的混合神经网络多输入单输出回归预测模型HPHHO-CNN-LSTM-Attention
  • BUCK电路制作负电源原理
  • Linux网络:bond简介与配置
  • AVL树(2):
  • 0.1 数学错题---基础
  • 嵌入式按键原理、中断过程与中断程序设计(键盘扫描程序)
  • chrome 浏览器怎么不自动提示是否翻译网站
  • C++ STL简介:构建高效程序的基石
  • SwinTransformer 改进:与PSConv结合的创新设计
  • 管理配置信息和敏感信息
  • 前端开发,文件在镜像服务器上不存在问题:Downloading binary from...Cannot download...
  • 在JSP写入Text文件方法指南
  • 【IP101】边缘检测技术全解析:从Sobel到Canny的进阶之路
  • 2023年第十四届蓝桥杯省赛B组Java题解【 简洁易懂】
  • Spark,Idea中编写Spark程序 2