GS-SLAM论文阅读笔记--GEVO

前言

这篇文章看着就让人好奇。众所周知,高斯是一个很不错的建图方法,但是本文的题目居然是只用高斯进行单目VO,咱也不知道这是怎么个流程,看了一下作者来自于MIT,说不定是个不错的工作,那就具体看看吧!
在这里插入图片描述


文章目录

  • 前言
  • 1.背景介绍
  • 2.关键内容
    • 2.1 灾难性遗忘的两种情况
    • 2.2 Occupancy-Preserving初始化
    • 2.3 Consistency-Aware优化
  • 3.文章贡献
  • 4.个人思考


1.背景介绍

  1. 虽然高斯飞溅(GS)允许高保真重建3D场景,但目前基于高斯飞溅的SLAM记忆效率不高,因为大量过去的图像被存储以重新训练高斯函数以减少灾难性遗忘。这些图像通常需要比建图本身高两个数量级的内存,因此占据了总内存使用量。
  2. 为了减轻遗忘,基于神经辐射场和高斯飞溅(GS)的方法都在当前滑动窗口之外存储了大量的过去图像,以重复重新训练地图。不幸的是,用于存储这些图像的开销内存占总内存的大部分,并且比当前滑动窗口和地图本身都要高几个数量级。
  3. 基于gs slam的框架中的灾难性遗忘在以下情况下发生:
    i)已存在的高斯被当前滑动窗口中构造的新高斯遮挡(见图1b中的红色矩形),
    ii)已存在的高斯改变为与当前滑动窗口中的图像过拟合(见图1b中的绿色矩形)。

在这里插入图片描述

2.关键内容

2.1 灾难性遗忘的两种情况

上面作者分析了灾难性遗忘出现的两种可能,接下来,作者对这两种可能出现的情况做出了具体的分析,并且提出了解决方案。

对于第一种情况,由于目前的在线slam是在图像滑动窗口上操作的,用于定位和建图。当从当前窗口产生的高斯函数阻塞了从过去窗口产生的高斯函数时,灾难性遗忘就会发生。如图2a所示,不一致是由来自当前视图(橙色)的高斯位于先前视图的无障碍区域(蓝色)内的回顾性闭塞(RO)引起的。

对于第二种情况,当先前从过去的滑动窗口观察到的区域与当前滑动窗口的图像过拟合时,也会发生灾难性的遗忘。如图2b所示,过拟合是由不完全射线遮挡(IRO)引起的,其中与当前视图(红色)相关联的高斯并不能完全覆盖传感器射线(蓝色)。因此,从先前视图(橙色)创建的高斯函数仍然部分可见,以便它们的参数更新以匹配当前视图中的外观。

在之前的工作中,RO和IRO都通过存储所有滑动窗口的图像来重新训练高斯分布。这些图像通常主导着总内存的使用量,并随着时间的推移而增长。

  1. 为了降低RO,我们的框架由精确的高斯初始化过程组成,该过程紧凑地编码无障碍区域。这些区域用于识别新高斯函数遮挡现有高斯函数的实例,这些高斯函数在优化结束时被修剪。
  2. 为了减少IRO,我们提出了一个两阶段的优化过程来更新一小部分既不一致又对当前滑动窗口足够可见的高斯函数,以便剩余的高斯函数不会过度拟合到当前窗口。
    在这里插入图片描述

2.2 Occupancy-Preserving初始化

在本节中,我们提出了一个有效的过程来初始化表示当前滑动窗口中障碍物和无障碍区域的高斯。为了在各种环境中实现计算效率和良好的泛化,我们的程序改编自多视图立体的有效实现,并且不依赖耗时的COLMAP或不太精确的随机抽样。

图3总结了初始化的过程。给定滑动窗口中的RGB关键帧序列,我们构建了一个成本量,用于捕获不同深度假设下最新图像中每个像素的光度一致性。从成本体积中,进行信念传播,提取与最新图像相关联的深度图像。然后,使用深度和RGB图像初始化一组高斯(Gt),用于表示障碍物(红色)和自由区域(蓝色),使用SPGF*算法。表示自由区域的高斯分布在多个关键帧之间融合,以识别一致性感知优化过程中的回顾性遮挡(RO)实例。

我们的方法可以与许多定位和关键帧选择策略集成,例如在MonoGS中以地图为中心的直接方法和在ORBSLAM中基于特征的方法(Photo-slam)。
在这里插入图片描述

Cost Volume Generation: 给定N = 8或10个关键帧的序列( I 0 I_0 I0,…, I N − 1 I_{N−1} IN1),当深度假设为d时, I N − 1 I_{N−1} IN1中像素u的光度成本 V ( u , d ) V (u, d) V(u,d)的值定义为:在这里插入图片描述

其中 I ( ⋅ ) I(·) I()是图像 I I I中特定像素的强度, T N − 1 i T^i_{N−1} TN1i∈SE(3)是图像 i n − 1 i_{n−1} in1 I i I_i Ii的变换矩阵,π(·)包裹了图像 i n − 1 i_{n−1} in1 I i I_i Ii的坐标u,给定深度假设d。

在我们的实验中,我们选择64深度假设(即,{ d 0 d_0 d0,…, d 63 d_{63} d63}),间距为0.25−25 m。为了减少内存开销,我们在创建成本卷之前将图像的每个维度的采样降低4倍,以利用图像中的空间冗余。假设每个图像的高度为H = 480,宽度为W = 640,则得到的成本体积V只需要4.7 MBs。空间细节的潜在损失将在之后通过上采样恢复。

Gaussian Generation: 回想一下,公式(1)中生成的成本体积包含64个深度假设,每个像素的光度成本不同。为了在假设每个障碍物都具有光滑表面的情况下确定每个像素的最可能深度,我们使用信念传播(BP)来提取滑动窗口缓冲区中最近关键帧的深度图像。在假设关键帧中具有相同颜色的相邻像素可能描述相同表面的情况下,我们使用一种高效算法将深度图像从BP上采样到关键帧的全分辨率。

考虑到最新的关键帧及其深度图像,我们增强了一种称为SPGF的内存高效算法,以生成一组表示障碍物(红色)和自由(蓝色)区域的高斯分布(见图3)。不同于之前在多个通道中处理深度图像,SPGF利用深度图像中编码的连通性,以不错的精度在单通道中有效地生成高斯分布。由于SPGF*主要是为了精确的深度重建而设计的,因此每个代表一个障碍物的高斯分布都可以包围一个包含多种颜色的表面。为了提高颜色表示的保真度,我们修改了SPGF星,以确保每个高斯只能表示一个具有相似颜色的表面。

2.3 Consistency-Aware优化

在上一节中初始化高斯后,它们被融合到如下图所示的全局图中。回想一下,我们的初始化过程构建了一组高斯
(Gt),表示从当前关键帧可见的障碍物和自由区域。当使用当前滑动窗口将新的高斯集成到现有地图中时,会出现两个挑战:

1. 由于这些高斯函数可能是有噪声的,它们插入到地图中可能会导致RO
2. 在优化过程中,由于缺乏过去观点的约束,IRO和RO都容易发生。

在之前的工作中,两者都是通过对过去滑动窗口采样的关键帧进行高斯训练来解决的。在我们的工作中,我们依赖于从现有地图中渲染的过去的关键帧来减少内存开销。然而,随着时间的推移,这些渲染图像的保真度会下降,从而导致地图本身的严重退化。为了保持这些图像的保真度,我们采用了两阶段优化,首先在局部阶段增强初始化高斯的保真度,然后在全局阶段使用其他现有高斯函数对它们进行优化。由于现有的高斯函数在局部阶段不受干扰,我们可以通过渲染高保真地恢复过去关键帧的颜色。

为了减少IRO,我们优化了一小部分既不一致又从当前滑动窗口可见的高斯。此外,可以通过查询表示自由区域的高斯函数来检索过去关键帧编码的自由空间信息,从而允许我们通过基于占用的剪枝进一步降低RO。

在这里插入图片描述

1)局部阶段:在局部阶段,初始化的高斯函数 G t Gt Gt与当前滑动窗口中可见的其他高斯 M ~ t − 1 \tilde{M}_{t-1} M~t1相加,形成更新的局部建图 M ~ t \tilde{M}_{t} M~t。由于局部建图包含最近初始化的高斯,因此可能存在噪声。为了提高保真性,它通过以下成本函数仅使用当前滑动窗口中的图像进行优化:
在这里插入图片描述

其中 E p h o E_{pho} Epho为绘制图像与地面真实图像之间的光度损失, E i s o E_{iso} Eiso为各向同性损失,防止形成细长或细高斯分布, T k Tk Tk∈SE(3)为其估计位姿。

2)全局阶段:局部地图 M ~ t \tilde{M}_{t} M~t中的高斯经过优化后,可以更准确地代表环境。为了解决与先前测量的剩余一致性并增强地图的紧凑性,我们将高斯 M ~ t \tilde{M}_{t} M~t合并到全局地图 M t − 1 M_{t−1} Mt1中。在合并过程中,我们通过使用从这些视点渲染的关键帧来识别和更新在过去视点上暂时不一致的一小部分高斯来减少灾难性遗忘。由于全局地图 M t − 1 M_{t - 1} Mt1在局部阶段没有受到干扰,这些从 M t − 1 M_{t - 1} Mt1渲染的关键帧保持高质量,足以解决剩余的不一致性。全局阶段包括以下三个连续步骤:插入、选择性优化和修剪。详细描述如下。

插入和激活:我们插入局部建图 M ~ t \tilde{M}_{t} M~t和之前的全局建图 M t − 1 {M}_{t-1} Mt1,以创建预优化的全局地图: M t ′ ← M ~ t ∪ M t − 1 M'_t←\tilde M_t∪M_{t−1} MtM~tMt1。为了防止局部地图 M ~ t \tilde{M}_{t} M~t引起的回顾性闭塞(RO),我们在插入前将其不透明度降低到0.2。

选择性优化:我们采用类似于式(2)的优化程序,但进行了两处修改:
1)为防止预优化地图 M ′ t M't Mt中的高斯与当前滑动窗口缓冲区 W t Wt Wt中的图像过拟合,我们选择并仅优化一个活动子集 A t ⊆ M t ′ A_t ⊆ M'_t AtMt
2)我们额外引入光度一致性损失 E p c E_{pc} Epc,以进一步确保与先验全局地图 M t − 1 M_{t−1} Mt1的一致性。
在这里插入图片描述
具体来说,我们选择 A t = M ~ t ∪ E t A_t = \tilde M_t∪E_t At=M~tEt,其中包含新插入的高斯和一个子集 E t E_t Et,该子集在当前窗口中会导致高渲染错误:
在这里插入图片描述
其中,每高斯渲染误差 E k ( g ) E_k(g) Ek(g):
在这里插入图片描述
其中,u为像素坐标,w(g, u)为像素u处g的alpha-blending系数。由于相机更容易看到的高斯值对 E k ( g ) E_k(g) Ek(g)的贡献更大,因此活动集倾向于排除当前窗口未很好观察到的现有高斯值,从而降低IRO。

为了进一步确保全球地图的保真度不会随着时间的推移而降低,公式(3)中在滑动窗口外四个过去的摄像机视图的关键帧上上评估的光度一致性损失 E p c E_{pc} Epc:
在这里插入图片描述
其中,R(·)为渲染函数,帧索 k l k_l kl从过去的时间步长1…t−W中均匀采样。∇(·)为停止梯度算子,避免了梯度通过R( M t − 1 , T k l M_{t−1},T_kl Mt1,Tkl)的反向传播。(这个部分似乎主要参考了Revising densification in gaussian splatting这篇文章)

剪枝:经过选择性优化后,我们对更新后的高斯进行剪枝,仍然会产生RO问题。通过a)不透明度小于0.7或b)占用概率小于0.9来识别这些高斯。使用高斯混合回归对第一节中表示自由区域的初始化高斯函数计算占用概率。

3.文章贡献

  1. 使用占用初始化: 为了减少不正确的遮挡,位于无障碍区域内的高斯被修剪。因此,除了表示障碍物之外,表示自由区域的高斯函数也被初始化以识别不正确的遮挡。
  2. 一致性感知优化: 为了减少地图对当前窗口的过拟合,我们只优化了一小部分既不一致又对相机足够可见的高斯分布。为了确保渲染图像保持高保真度,我们在将当前滑动窗口创建的噪声高斯合并到地图进行全局优化之前,对其进行局部优化。

4.个人思考

  1. 本篇文章目的很明确,就是要解决灾难性遗忘的问题,在目前的大部分GS-SLAM方法中,解决灾难性的方法是存储所有关键帧,在每次迭代的时候随机挑选进行优化。但是本文指明这种方法太消耗内存。然后具体分析了两种灾难性遗忘的情况,逐个进行解决和分析。
  2. 回到本文的题目上面,我个人感觉他更侧重于后端建图的优化,解决灾难性遗忘的同时大大减少内存。作者的实验部分也提到本文是一种即插即用的方法,可以兼容各种跟踪方法。并且给出了GEVO的两种变体的结果: 分别是(Direct)的光度跟踪,和ORB-SLAM进行跟踪。这说明本文是一种后端建图方法,可以兼容一些跟踪的前端方法。但是标题可能会让人误解。
  3. 总的来说,我觉得这篇文章是我最近阅读的创新程度最高的论文了,深度分析了现在共性的痛点问题,提出了新颖的解决方案,绝对是一篇好论文,值得参考和借鉴。

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

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

相关文章

算法-汉诺塔问题(Hanoi tower)

介绍 汉诺塔是源于印度的一个古老传说的小游戏,简单来说就是有三根柱子,开始的时候,第一根柱子上圆盘由大到小,自下往上排列。这个小游戏要实现的目的呢,就是要把第一根柱子上的圆盘移到第三根的柱子上去;…

部标主动安全(ADAS+DMS)对接说明

1.前言 上一篇介绍了部标(JT/T1078)流媒体对接说明,这里说一下如何对接主动安全附件服务器。 流媒体的对接主要牵扯到4个方面: (1)平台端:业务端系统,包含前端呈现界面。 &#x…

企业数字化转型的深层次问题与战略解读——基于TOGAF框架的深入分析与解决方案

数字化转型的必然性与复杂性 随着全球化和技术进步的推动,数字化转型成为企业保持竞争力、提升效率、满足客户需求的重要战略选择。然而,数字化转型并不仅仅是技术的简单引入,它涉及到业务模式、运营流程、组织架构以及企业文化的深刻变革。…

对比学习训练是如何进行的

对比学习(Contrastive Learning)是一种自监督学习的方法,旨在通过拉近相似样本的表示、拉远不相似样本的表示来学习特征表示。在训练过程中,模型并不依赖标签,而是通过样本之间的相似性进行学习。以下是对比学习的基本…

Another redis desktop manager使用说明

Another redis desktop manager使用说明 概述界面介绍图示说明连接界面设置界面查看操作日志主界面信息进入redis-cli控制台更多 概述 Another Redis Desktop Manager是一个开源的跨平台 Redis 客户端,提供了简洁易用的图形用户界面(GUI)&am…

C++ 数据结构算法细节相关

细节 队列 这段代码实现的是二叉树的层序遍历&#xff0c;也就是按照树的层次&#xff0c;一层一层地遍历节点。下面我会为你详细解释这段代码。 queue <TreeNode*> q; 这是一个队列&#xff0c;队列中存放的是指向TreeNode的指针。队列&#xff08;queue&#xff09;是…

云原生数据库 PolarDB

简介&#xff1a;云原生数据库 PolarDB 是阿里云自研产品&#xff0c;在存储计算分离架构下&#xff0c;利用了软硬件结合的优势&#xff0c;为用户提供秒级弹性、高性能、海量存储、安全可靠的数据库服务。100%兼容MySQL和PostgreSQL生态&#xff0c;支持分布式扩展&#xff0…

Mybatis总结

Mybatis 概述及搭建 原是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation 迁移到了 Google Code&#xff0c;随着开发团队转投GoogleCode 旗下&#xff0c; iBatis3.x正式更名为MyBatis。 MyBatis 是一款优秀的持久层框架。 MyBatis 避免了几乎所有…

系列二、案例实操

一、创建表空间 1.1、概述 在Oracle数据库中&#xff0c;表空间是一个逻辑存储单位&#xff0c;它是Oracle数据库中存储数据的地方。 1.2、超级管理员登录 sqlplus / as sysdba 1.3、创建表空间 create tablespace water_boss datafile C:\Programs\oracle11g\oradata\orcl\…

Spring Cloud Alibaba-(6)Spring Cloud Gateway【网关】

Spring Cloud Alibaba-&#xff08;1&#xff09;搭建项目环境 Spring Cloud Alibaba-&#xff08;2&#xff09;Nacos【服务注册与发现、配置管理】 Spring Cloud Alibaba-&#xff08;3&#xff09;OpenFeign【服务调用】 Spring Cloud Alibaba-&#xff08;4&#xff09;Sen…

华为-IPv6与IPv4网络互通的6to4自动隧道配置实验

IPv4向IPv6的过渡不是一次性的,而是逐步地分层次地。在过渡时期,为了保证IPv4和IPv6能够共存、互通,人们发明了一些IPv4/IPv6的互通技术。 本实验以6to4技术为例,阐述如何配置IPv6过渡技术。 配置参考 R1 # sysname R1 # ipv6# interface GigabitEthernet0/0/1ip address 200…

【C语言指南】数据类型详解(下)——自定义类型

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《C语言指南》 期待您的关注 目录 引言 1. 结构体&#xff08;Struct&#xff09; 2. 联合体&#xff08;Union&#xff09; 3…

【网络安全 | 渗透工具】自动化 .env/.git文件检测

原创文章,禁止转载。 文章目录 1. 安装 DotGit2. 配置 DotGit3. 使用 DotGit 检测 .env / .git 文件1. 安装 DotGit 在谷歌应用商店中搜索 DotGit 并进行安装: 2. 配置 DotGit 安装完成后,可以在设置中开启或关闭相关功能: 3. 使用 DotGit 检测 .env / .git 文件 接下来…

centos7安装Redis单机版

一、检查是否有GCC环境 gcc --version # 提示-bash: gcc: 未找到命令 说明没有gcc环境# 安装gcc环境 yum install gcc# 如果yum源报错 # 1.检查网络是否正常 ping www.baidu.com # 2.备份当前的yum源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo…

Redis篇(Java操作Redis)

目录 讲解一&#xff1a;简介 讲解二&#xff1a;Jedis Github 一、创建项目、 二、添加依赖 三、配置文件 四、Java连接Redis 五、通过Redis连接池获取连接对象并操作服务器 六、封装JedisUtil对外提供连接对象获取方法 七、Java操作Redis五种数据类型 1. 连接与释放…

避免glibc版本而报错,CentOS等Linux安装node.js完美方法

概述 对于Node.js v18.x或更高&#xff0c;Node.js官方默认是在Ubuntu 20.04, Debian 10, RHEL 8,CentOS 8等高版操作系统上编译得到的&#xff0c;高版本操作系统的glibc版本≥2.28。所以&#xff0c;下载Node.js后&#xff0c;也需要glibc版本≥2.28才能使用。 而CentOS 7.x等…

《安富莱嵌入式周报》第343期:雷电USB4开源示波器正式发布,卓越的模拟前端低噪便携示波器,自带100W电源的便携智能烙铁,NASA航空航天锂电池设计

周报汇总地址&#xff1a;嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 更新一期视频教程 【授人以渔】CMSIS-RTOS V2封装层专题视频&#xff0c;一期视频将常用配置和用法梳理清楚&#xff0…

JMeter对jdbc request以及foreach和loop controller的使用

Jmeter中jdbc request和foreach控制器 1. 使用variable name实现对数据库查询结果的遍历 在foreach controller中&#xff0c;注意要做variable name的关联(correlation), 否则没法取回这里的jdbc request返回的结果。这里的input variable prefix一定要和jdbc request中的var…

【React】react项目中的redux使用

1. store目录结构设计 2. react组件中使用store中的数据——useSelector 3. react组件中修改store中的数据——useDispatch 4. 示例 react-basic\src\store\moduels\counterStore.js import { createSlice } from reduxjs/toolkitconst counterStore createSlice({name: cou…

新书推荐——《深度学习精粹与PyTorch实践》

深度学习绝非不可窥探的黑箱!深入理解其模型和算法的实际运作机制&#xff0c;是驾驭并优化结果的关键。你无需成为数学专家或资深数据科学家,同样能够掌握深度学习系统内部的工作原理。 本书旨在通过深入浅出的方式&#xff0c;为你揭示这些原理&#xff0c;让你在理解和解释…