GS-SLAM论文阅读笔记-MGSO

前言

MGSO首字母缩略词是直接稀疏里程计(DSO),我们建立的光度SLAM系统和高斯飞溅(GS)的混合。这应该是第一个前端用DSO的高斯SLAM,不知道这个系统的组合能不能打得过ORB-SLAM3,以及对DSO会做出怎么样的改进以适应高斯地图,接下来就看一下吧!
在这里插入图片描述

G i s h e l l o G^s_ihello Gishello
我是红色


文章目录

  • 前言
  • 1.背景介绍
  • 2.关键内容
    • 2.1SLAM module
    • 2.2 Dense Reconstruction
  • 3.文章贡献
  • 4.个人思考


1.背景介绍

  1. 然而,现有的基于3dgs的SLAM系统难以平衡硬件简洁性、速度和地图质量。大多数系统在上述的一个或两个方面表现出色,但很少能做到全部。一个关键问题是在同时进行SLAM时初始化高斯的困难。
  2. 传统上,SLAM系统提供语义差的地图表示,对定位和基本导航有效,但缺乏复杂任务所需的细节。解耦的稠密地图SLAM一个关键挑战是SLAM和密集重建组件之间缺乏协同作用。SLAM算法往往不能为高质量的密集重建提供最优数据,从而影响系统的整体性能。
  3. 3DGS通常需要一个初始点云来开始重建,更密集、结构良好的初始点云可以改善和更快地得到结果。然而,传统的基于特征的SLAM方法产生的稀疏点云对于3DGS初始化不是最优的。虽然RGB-D数据可以提供密集和精确的点云,但使用单目相机适用范围更广。
  4. 紧耦合方法在继续跟踪之前引入了对建图细化的依赖,从而导致性能降低。此外,目前大多数3DGS系统严重依赖深度数据来执行3D重建,这使得它们依赖于RGB-D传感器。虽然MGSO与Photo-slam最相似,,但我们解决了photoslam倾向于创建大型,内存效率低下的地图的问题。
    在这里插入图片描述

2.关键内容

MGSO集成了两个并发操作的核心组件:负责精确姿态估计的SLAM模块和用于绘图的3D稠密重建模块。

2.1SLAM module

我们系统的跟踪主干是建立在直接稀疏里程计(Direct Sparse Odometry, DSO)的一系列视觉SLAM方法之上的。<>DSO的关键创新在于,与使用图像中的所有像素相比,用于光度跟踪的选择性像素采样提高了定位精度。我们之所以选择基于DSO,是因为我们发现它的像素选择策略也与初始化3DGS非常一致。DSO在连续帧 i 和 j 上跟踪一组像素,通过最小化跟踪的每个像素的光度损失方程来优化相机姿势p。
在这里插入图片描述
其中I查询像素强度,a和b是考虑光照变化的变量,s是相机曝光。该损失方程的基本原理是识别最匹配连续帧i和j之间像素强度变化的姿态变化。该方程适用于跟踪和建图级别。

在每一帧,我们的系统的跟踪过程计算相对于最新关键帧的姿态变化,假设一个固定的地图。只有在插入关键帧时才调整跟踪像素的建图。一个新的关键帧是一个参考帧,它捕获了相对于现有关键帧的场景的独特视图。当建图完成后,所有当前关键帧姿态和由跟踪像素点组成的地图都会被调整。然后,我们的系统将跟踪像素的地图转换为点云地图,并将其与关键帧姿势一起添加到稠密重建模块中。

我们采用DSO的窗口关键帧管理策略,当检测到视场、旋转或光照发生重大变化时,生成关键帧。如果关键帧的数量超过窗口大小(默认为8个),旧的关键帧将被删除,使用基于距离的评分来确保关键帧在3D空间中分布良好。

我们方法的灵感来自于对原始3DGS的最终3DGS高斯位置的分析(图3)。我们意识到最终地图的最终位置、颜色和高斯分布与DSO输出的点云相似。根据这一观察,我们推测用光度SLAM初始化3DGS会增强3DGS优化,因为它会减少所需的优化。

在这里插入图片描述

DSO结构良好的密集点云的一个主要方面是它的像素选择策略。DSO通过将图像分成块并在每个块中选择梯度阈值以上的最高梯度像素来进行像素选择。然后用更低的阈值和更大的块重复这个过程。该方法不仅可以在复杂区域跟踪更多的像素,而且可以保证在简单区域的像素选择。它与传统方法不同,传统方法通常只跟踪容易识别的特征,如角落和边缘。在图4中可以观察到这两种方法之间的差异。这很重要,因为我们观察到,虽然完成的3DGS地图在复杂区域有更多的高斯分布,但它们在非复杂区域仍然保持一些高斯分布。
在这里插入图片描述
此外,DSO跟踪具有高梯度的像素,这比可跟踪的特征点更常见。因此,DSO的输出点云更接近于完成3DGS地图的密度。我们的实验表明,虽然edso的像素选择密度是跟踪的最佳选择,但增加像素选择密度可以增强3DGS的性能,特别是在低梯度区域,这对跟踪具有挑战性。为了解决这个问题,我们修改了DSO,增加了不用于姿态估计的额外跟踪像素,以增加输出点云密度(图5)。这种修改允许系统具有跟踪和3DGS的最佳像素密度。尽管有这些增强功能,但具有最小或没有梯度的平坦区域仍然稀疏地填充有跟踪像素。这是因为DSO的像素跟踪系统至少需要一些梯度进行跟踪,因此,没有梯度的区域中的像素永远不会被跟踪。
在这里插入图片描述
我们观察到,在平面区域中初始化点稍微错位的情况下,3DGS的性能要优于没有初始化点的情况。因此,我们实现了一种插值方法,该方法基于附近的跟踪像素估计低梯度区域中的点位置。我们的方法采用Delaunay三角剖分算法,以跟踪像素为顶点将图像划分为一系列三角形。每个插值点的深度计算为三角形顶点的平均深度,这通常为平面上的像素提供准确的结果。虽然像Photo-SLAM这样的基于特征的系统也可以插值非活动的2D特征点,但我们的方法优于他们的方法,因为初始点计数更高,并且通过将插值集中在最准确的平坦区域。

2.2 Dense Reconstruction

MGSO采用3DGS作为密集重建方法。

在原始3DGS之后,我们使用一组各向异性高斯g来创建场景,每个高斯g都使用不透明度、旋转、位置、比例和颜色进行建模。我们遵循Mono-GS的技术,使用RGB而不是球面谐波来表示颜色,因为Mono-GS显示这种速度的提高对重建质量的影响最小。我们使用3DGS中引入的原始可微分瓷砖光栅化来渲染地图的RGB图像。利用梯度下降法优化每个高斯函数的参数,使光度损失L最小:
在这里插入图片描述
为了提高系统的速度,我们采用Photo-SLAM中引入的基于高斯金字塔的学习来逐步训练高斯映射。金字塔有助于加速现场视频场景的训练。通过对相机捕获的真地图像进行多次平滑和下采样,建立了一个多尺度高斯金字塔。光度损失计算从初始迭代中使用最高金字塔水平到随着训练的进展使用更低的金字塔水平。此外,我们使用了一个优化版本的3DGS CUDA后端,比原来的更快。

我们的自适应控制策略每1000次训练迭代就会周期性地对高斯分布进行密度化和剪枝处理,以提高地图质量。我们围绕SLAM模块返回的点云设计策略,类似于Photo-SLAM为ORBSLAM3量身定制策略。我们的SLAM系统生成的点云具有密度大、覆盖均匀的特点。

它们适应场景的复杂性,集中在复杂的区域,同时保持简单区域的代表性。当一个新的关键帧被处理时,我们用SLAM系统创建的点云中获取的位置和颜色初始化新的高斯函数。

然而,我们注意到在使用3DGS的致密化和修剪策略时出现了漂浮物。为了减轻飞蚊的存在,我们在AbsGS中采用了自适应控制策略。因此,作为自适应控制策略的一部分,我们通过分裂或克隆具有高同向视图空间位置梯度的高斯函数来周期性地致密化它们。大的、高方差的高斯分布被分割,而小的高斯分布在重建不足的区域被克隆。此外,我们定期修剪低不透明度的高斯分布,以去除透明的漂浮物。我们使用与原始3DGS相同的分裂和克隆参数。

3.文章贡献

  1. 一个实时密集SLAM系统,利用了光度SLAM和3DGS之间的协同作用。
  2. 我们的系统只需要一个单目摄像机。
  3. 实验表明,我们的系统具有其他稠密SLAM系统无法比拟的速度、地图质量和内存效率。

4.个人思考

  1. 对于文章说的,DSO生成的初始化点云比ORB-SLAM更好,我比较赞同。因为DSO是通过光度跟踪像素,会生成更结构化的点云。ORB-SLAM在弱纹理的情况下提取特征很少。
  2. 总的来说,作者使用了解耦的方法保证了SLAM的速度,又使用DSO获得一个更好的初始化点云,保证了建图的质量,最终得到了一个较好的结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/890082.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android一个APP里面最少有几个线程

Android一个APP里面最少有几个线程 参考 https://www.jianshu.com/p/92bff8d6282f https://www.jianshu.com/p/8a820d93c6aa 线程查看 Android一个进程里面最少包含5个线程&#xff0c;分别为&#xff1a; main线程(主线程&#xff09;FinalizerDaemon线程 终结者守护线程…

Golang | Leetcode Golang题解之第462题最小操作次数使数组元素相等II

题目&#xff1a; 题解&#xff1a; func partition(a []int, l, r int) int {x : a[r]i : l - 1for j : l; j < r; j {if a[j] < x {ia[i], a[j] a[j], a[i]}}a[i1], a[r] a[r], a[i1]return i 1 }func randomPartition(a []int, l, r int) int {i : rand.Intn(r-l1…

Android车载——VehicleHal运行流程(Android 11)

1 概述 本篇主要讲解VehicleHal的主要运行流程&#xff0c;包括设置属性、获取属性、订阅属性、取消订阅、持续上报属性订阅等。 2 获取属性流程 2.1 获取属性流程源码分析 作为服务注册到hwServiceManager中的类是VehicleHalManager&#xff0c;所以&#xff0c;CarServic…

【Qt】控件概述(2)—— 按钮类控件

控件概述&#xff08;2&#xff09; 1. PushButton2. RadioButton——单选按钮2.1 使用2.2 区分信号 clicked&#xff0c;clicked(bool)&#xff0c;pressed&#xff0c;released&#xff0c;toggled(bool)2.3 QButtonGroup分组 3. CheckBox——复选按钮 1. PushButton QPushB…

简单粗暴理解GNN、GCN、GAT

GNN 思想&#xff1a;近朱者赤近墨者黑 GNN的流程&#xff1a; 聚合&#xff08;把邻居的信息贴到自己身上来&#xff0c;作为它自己特征的补足&#xff09;更新循环&#xff08;为什么要多次&#xff1f;看以下例子&#xff09; GNN能干嘛&#xff1f; 1.结点分类&#xf…

动态规划lc

先找到规律&#xff0c;然后找边界情况&#xff1b;部分特殊情况分类讨论 *递归 70.爬楼梯 简单 提示 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff1a…

基于yolov8、yolov5的PCB板缺陷检测系统(含UI界面、数据集、训练好的模型、Python代码)

blog.csdnimg.cn/direct/6f53422ed9fd44dc8daad6dc5481c4c9.png) 项目介绍 项目中所用到的算法模型和数据集等信息如下&#xff1a; 算法模型&#xff1a;     yolov8、yolov8 SE注意力机制 或 yolov5、yolov5 SE注意力机制 &#xff0c; 直接提供最少两个训练好的模型…

第十八届 图像像素类型转化于归一

知识点&#xff1a;像素归一化 opencv中提供四种归一的方法 -NORM_MINMAX -NORM_INF -NORM_L1 -NORM_L2 最常用的就是NORM_MINMAX归一的方法 相关的API normalize&#xff1a;void normalize(InputArray src, OutputArray dst, double alpha 1, double beta 0, int n…

关于C语⾔内存函数 memcpy memmove memset memcmp

memcpy使⽤和模拟实现 void * memcpy ( void * destination, const void * source, size_t num ); 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。 这个函数在遇到 \0 的时候并不会停下来。 如果source和destination有任何的重叠&am…

树莓派3b安装ubuntu18.04服务器系统server配置网线连接

下载ubuntu镜像网址 img镜像&#xff0c;即树莓派官方烧录器使用的镜像网址 ubuntu18.04-server&#xff1a;ARM/RaspberryPi - Ubuntu Wiki 其他版本&#xff1a;Index of /ubuntu/releases 下载后解压即可。 发现使用官方烧录器烧录配置时配置wifi无论如何都不能使用&am…

linux入门——“权限”

linux中有权限的概念&#xff0c;最常见的就是安装一些命令的时候需要输入sudo来提权&#xff0c;那么为什么要有这个东西呢&#xff1f; linux是一个多用户操作系统&#xff0c;很多东西看起来是有很多分&#xff0c;但是实际的存储只有一份&#xff08;比如命令&#xff0c;不…

小程序知识付费的优势 知识付费服务 知识付费平台 知识付费方法

在信息爆炸的时代&#xff0c;知识如同繁星点点&#xff0c;璀璨而散落。如何在这片知识的海洋中精准捕捞&#xff0c;成为现代人追求自我提升的迫切需求。小程序知识付费&#xff0c;正是这样一座桥梁&#xff0c;它以独特的优势&#xff0c;让智慧触手可及&#xff0c;轻触未…

【C++差分数组】P1672何时运输的饲料

本文涉及知识点 C差分数组 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 P1672何时运输的饲料 原文比较啰嗦&#xff0c;我简述一下&#xff1a; 第x天运来F1(1<F1<1e6)千克的饲料&#xff0c;第D&#xff08;1<2e3)天还剩F2&…

数论与同余 - 离散数学系列(七)

目录 1. 整数的性质 整除与因数 最大公约数与最小公倍数 2. 欧几里得算法 算法步骤 3. 模运算与同余 模运算 同余关系 同余的性质 4. 数论在密码学中的应用 RSA 加密算法 5. 实际应用场景 1. 数字签名 2. 哈希函数与数据完整性 3. 密钥交换 6. 例题与练习 例题…

单链表速通后续!

目录 1>>闲话 2>>头删 3>>查找 4>>在指定位置之前插入 5>>删除指定结点 6>>指定位置之后插入 7>>删除指定位置之后的结点 特别思考&#xff1a; 8>>销毁单链表 Slist.h Slist.c test.c 9>>总结 1>>闲话…

干货|SQL注入思路总结(非常详细)零基础入门到精通,收藏这一篇就够 了

1.SQL注入的业务场景及危害 1.1 什么是SQL注入 SQL注入是服务器端未严格校验客户端发送的数据&#xff0c;而导致服务端SQL语句被恶意修改并成功执行的行为称为SQL注入。 1.2 为什么会有SQL注入 代码对带入SQL语句的参数过滤不严格 未启用框架的安全配置&#xff0c;例如&a…

[面试] java开发面经-1

前言 目录 1.看到你的简历里说使用Redis缓存高频数据&#xff0c;说一下Redis的操作 2.说一下Redis的缓存击穿、缓存穿透、缓存雪崩 3.你的项目中使用了ThreadLocal&#xff0c;那么当有两个请求同时发出时&#xff0c;会怎么处理&#xff0c;可以同时处理两个请求吗 4.使用…

【多线程】多线程(12):多线程环境下使用哈希表

【多线程环境下使用哈希表&#xff08;重点掌握&#xff09;】 可以使用类&#xff1a;“ConcurrentHashMap” ★ConcurrentHashMap对比HashMap和Hashtable的优化点 1.优化了锁的粒度【最核心】 //Hashtable的加锁&#xff0c;就是直接给put&#xff0c;get等方法加上synch…

时间序列预测(一)——线性回归(linear regression)

目录 一、原理与目的 1、线性回归基于两个的假设&#xff1a; 2、线性回归的优缺点: 3、线性回归的主要目的是&#xff1a; 二、损失函数&#xff08;loss function&#xff09; 1、平方误差损失函数&#xff08;忽略了噪声误差&#xff09; 2、均方误差损失函数 三、随…

微服务实战——登录(普通登录、社交登录、SSO单点登录)

登录 1.1. 用户密码 PostMapping("/login")public String login(UserLoginVo vo, RedirectAttributes redirectAttributes, HttpSession session){R r memberFeignService.login(vo);if(r.getCode() 0){MemberRespVo data r.getData("data", new Type…