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.mzph.cn/news/904267.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用VSCode编写C、C++和Python程序

一、首先准备好前期工作。如下载安装Python、VSCode、一些插件等。写代码之前需要先创建文件夹和文件。 二、将不同语言写的代码放在不同的文件夹中&#xff0c;注意命名时不要使用中文。 三、打开VSCode&#xff0c;点击“文件”->“打开文件夹”->“daimalainxi”->…

基于不确定性感知学习的单图像自监督3D人体网格重建 (论文笔记与思考)

文章目录 论文解决的问题提出的算法以及启发点 论文解决的问题 首先这是 Self-Supervised 3D Human mesh recovery from a single image with uncertainty-aware learning &#xff08;AAAI 2024&#xff09;的论文笔记。该文中主要提出了一个自监督的framework用于人体的姿态…

Leetcode刷题记录33——二叉树的最小深度

题源&#xff1a;https://leetcode.cn/problems/minimum-depth-of-binary-tree/description/ 题目描述&#xff1a; 思路一&#xff1a; 使用 DFS 递归遍历的解法&#xff0c;每当遍历到一条树枝的叶子节点&#xff0c;就会更新最小深度&#xff0c;当遍历完整棵树后&#x…

有效的括号(20)

20. 有效的括号 - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a; class Solution { public:bool isValid(string s) {unordered_map<char, char> m {{), (}, {],[}, {}, {}};stack<char> stk;for (int i 0; i < s.size(); i) {if (s[i] ( || s[i…

电子邮件相关协议介绍

0 Preface/Foreword 1 协议介绍 电子邮件包含的主要协议&#xff1a; SMTPPOPIMAP 1.1 SMPT SMPT: Simple Mail Transfer Protocol&#xff0c;电子邮件传输的标准协议&#xff0c;负责将邮件从发送方传输到接收方邮件服务器。 1.2 POP POP&#xff1a; Post Office Protoc…

Linux压缩和解压类

一、gzip/gunzip 压缩 1、基本语法 gzip 文件 &#xff08;功能描述&#xff1a;压缩文件&#xff0c;只能将文件压缩为*.gz文件&#xff09; gunzip 文件.gz &#xff08;功能描述&#xff1a;解压缩文件命令&#xff09; 2、经验技巧 &#xff08;1&#…

力扣hot100 (除自身以外数组的乘积)

238. 除自身以外数组的乘积 中等 给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除…

什么是“系统调用”

一、什么是“系统调用”&#xff1f;用生活中的比喻理解 可以把“系统调用”比作你&#xff08;用户&#xff09;向“管理员”请求帮助完成某件事情的过程。 举个例子&#xff1a; 你想借书&#xff0c;去图书馆&#xff08;操作系统&#xff09;找管理员&#xff08;内核&a…

三维重建(二十一)——第二步和第三步

文章目录 一、上一篇5.3.1 train-185.3.2 test-193二、第二步:自己重新写一个代码,利用RTK的参数,成功的和gshell的渲染图片一样2.1 只能单独一个图片,并且需要调整输入pose\内参问题描述可能原因2.2 批量输出问题描述可能原因解决方案重新检查代码发现错误2.3 成功三、第三…

n8n 中 No Operation 节点说明

n8n 中 No Operation 节点说明 当"什么都不做"也是一种设计:n8n No Operation 节点深度解析一、No Operation节点是什么?二、为什么需要"空节点"?1. 流程可视化注释2. 调试占位符3. 流程拓扑优化三、实战应用场景场景1:审批流程占位四、设计哲学思考五…

使用 JavaScript 实现数据导出为 Excel 和 CSV 文件

在 Web 开发中&#xff0c;经常会遇到需要将数据导出为文件的需求&#xff0c;例如将数据导出为 Excel 或 CSV 文件。今天&#xff0c;我们就来探讨如何使用 JavaScript 实现这一功能。 一、实现思路 我们通过 HTML 创建一个按钮&#xff0c;点击按钮时&#xff0c;触发 Java…

青听音乐 1.0.6| 全网音乐免费听,无损下载,4条音源,界面简洁无广告

一款强大的音乐播放器&#xff0c;内部集成了相当丰富的功能&#xff0c;可以一键搜索任何想要的歌曲或歌手专辑&#xff0c;同时还支持下载和收藏&#xff0c;拥有非常流畅的速度&#xff0c;使用起来没有任何限制&#xff01;软件自带有大厂的解析音源&#xff0c;运行非常稳…

动态规划之子序列问题1

以leetcode300题为例 此题最为经典&#xff0c;所有的算法书在讲子序列问题时都以这个为模板题&#xff0c;后面的题可以按照此题的分析方法进行分析 区分子序列和子数组 例如a&#xff0c;b&#xff0c;c&#xff0c;d&#xff0c;e这个数组 子数组是必须连续的&#xff0c;…

android-ndk开发(4): linux开发机有线连接android设备

android-ndk开发(4): linux开发机有线连接android设备 2025/05/05 1. 概要 linux 系统&#xff0c; 例如最常见的 ubuntu&#xff0c; 在通过 USB 线把 android 设备连接到开发机上时&#xff0c; 仅仅是 ”物理上的连接”。 这时候 adb 是无法识别到 android 设备的。 需要…

NOI 2025 大纲更新:算法竞赛的新风向标

《NOI 2025 大纲更新&#xff1a;算法竞赛的新风向标》 在信息学奥林匹克竞赛&#xff08;NOI&#xff09;的赛场上&#xff0c;每一次大纲的更新都如同一场风暴的前奏&#xff0c;它预示着竞赛知识体系的变革&#xff0c;也引领着选手们备战的方向。2025 年的 NOI 大纲已经正…

Spring Boot 集成 Solr 的详细步骤及示例

环境准备 安装 Solr &#xff1a;从 Solr 官网&#xff08;Welcome to Apache Solr - Apache Solr&#xff09;下载并安装最新版本&#xff0c;然后通过命令 bin/solr start 启动 Solr 服务&#xff0c;使用 bin/solr create -c mycore 创建一个新的 Solr 核心。 安装 JDK &am…

【自然语言处理与大模型】LlamaIndex的数据连接器和对话引擎

LlamaIndex 是领先的开发框架&#xff0c;专为结合大型语言模型&#xff08;LLM&#xff09;与个性化工作流打造高效的数据驱动型智能代理而设计。一般我们用它来做RAG检索增强生成。 &#xff08;1&#xff09;RAG的介绍 大型语言模型&#xff08;LLM&#xff09;虽然在海量数…

【实战教程】React Native项目集成Google ML Kit实现离线水表OCR识别

前言 在移动应用开发中&#xff0c;OCR&#xff08;光学字符识别&#xff09;技术广泛应用于各类场景。本文将详细介绍如何在React Native项目中集成Google ML Kit&#xff0c;实现离线水表数字识别功能。全程使用TypeScript&#xff0c;并针对React Native 0.74版本进行适配&a…

全球化电商平台AWS云架构设计

业务需求&#xff1a; 支撑全球三大区域&#xff08;北美/欧洲/亚洲&#xff09;用户访问&#xff0c;延迟<100ms处理每秒50,000订单的峰值流量混合云架构整合本地ERP系统全年可用性99.99%满足GDPR和PCI DSS合规要求 以下是一个体现AWS专家能力的全球化电商平台架构设计方…

jupyter notebook运行简单程序

一. 使用 cmd 创建虚拟环境 1.创建虚拟环境 &#xff08;1&#xff09;创建新的虚拟环境&#xff08;本项目名设置为zhineng&#xff09;&#xff0c;并设置python版本 conda create -n zhineng python3.6 &#xff08;2&#xff09;查看python版本 python --version &am…