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

GS-SLAM论文阅读笔记-CaRtGS

前言

这篇文章看起来有点像Photo-slam的续作,行文格式和图片类型很接近,而且貌似是出自同一所学校的,所以推测可能是Photo-slam的优化与改进方法,接下来具体看看改进了哪些地方。

在这里插入图片描述


文章目录

  • 前言
  • 1.背景介绍
    • GS-SLAM方法总结
  • 2.关键内容
    • 2.1 计算偏差
    • 2.2 自适应计算对齐
    • 2.3总体流程
  • 3.文章贡献
  • 4.个人思考


1.背景介绍

  1. Nerf虽然有前景,但将NeRF集成到SLAM系统中遇到了几个障碍,包括高计算需求,长时间的训练,有限的泛化性,过度依赖视觉线索,以及对灾难性遗忘的敏感性。
  2. 现有的高斯飞溅SLAM (GS-SLAM)方法在处理有限数量的高斯原语时,难以在实时约束下实现卓越的渲染性能。这些问题源于算法的计算需求与可用处理资源之间的不一致,这可能导致训练和优化过程不足。

GS-SLAM方法总结

MonoGSSplaTAM是对耦合GS-SLAM算法的开创性贡献,它们开创了一种通过梯度反向传播同时优化高斯原语和相机姿态估计的方法。Gaussian-SLAM引入了子地图的概念来解决灾难性遗忘的问题。此外,LoopSplat扩展了Gaussian- slam的工作,采用基于高斯飞溅的环闭合配准来提高姿态估计精度。然而,依赖于3DGS的密集计算来估计每帧的相机姿态,这对这些方法实现实时性能提出了挑战。

为了克服这一问题,人们提出了解耦的GS-SLAM方法。splat - slamIG-SLAM利用预训练的密集束调整进行相机姿态跟踪,利用代理深度图进行地图优化。RTG-SLAM采用帧到模型的ICP进行跟踪,并通过关注最突出的不透明高斯函数来呈现深度。GS-ICP-SLAM通过利用G-ICP和3DGS之间的共享协方差,利用高斯原语的尺度对齐,实现了非常高的速度(高达107 FPS)。Photo-SLAM采用ORB-SLAM3进行跟踪,并引入了从粗到精的地图优化,实现了鲁棒性能。

2.关键内容

作者首先提出问题:GS-SLAM固有的计算偏差现象,接着分析了他的不利影响:T这种不对齐会严重影响计算效率,阻碍真实感渲染的快速收敛,对实时GS-SLAM的性能产生不利影响。最后提出了解决方案:为了克服这些障碍,我们提出了一种新的自适应计算对齐策略,该策略旨在加速3DGS过程,优化计算资源分配,有效控制模型复杂性,从而提高3DGS在实时SLAM应用中的整体有效性和实用性。

2.1 计算偏差

SLAM环境下真实感渲染中出现的计算偏差主要有三个方面:训练不足、长尾优化和弱约束致密化。这些因素降低了渲染质量,增加了地图尺寸。这些因素严重阻碍了GS-SLAM的实时应用,限制了其在资源受限设备中的适用性。

1)训练不足:与不受实时性限制的典型3DGS不同,SLAM领域内的在线渲染需要同时执行定位、建图和渲染,且速度与输入传感器数据的频率同步。为了实现这一点,目前大多数实时GS-SLAM方法都依赖于关键帧进行映射和渲染。然而,这些方法通常在渲染优化中总共只能实现几千次迭代,明显落后于3DGS的数万次迭代。由于训练不足,优化过程没有完全收敛,对在线渲染质量产生不利影响。

最近几位研究人员的观察表明,在3DGS中逐像素反向传播存在重大的计算挑战。由于多个GPU线程争夺访问共享高斯原语,这需要序列化原子操作,从而限制了并行化效率,因此该过程成为瓶颈。不幸的是,这个缺点被集成到以前的GS-SLAM实现中。在本文中,我们利用快速的飞溅式反向传播来减少线程争用。这种方法不仅实现了与基线相比迭代次数增加3倍,而且还保持了相同的运行时。这一进步显著缓解了训练不足的问题,大大提高了实时GS-SLAM的绘制质量。

2)长尾优化:为了减轻灾难性遗忘的问题,GS-SLAM中常见的方法是从关键帧池中随机选择一个关键帧进行周期性再训练。然而,这种方法可能导致次优的长尾优化,如图3所示。具体来说,最早的关键帧的再训练频率往往超过最近添加的关键帧。这种差异的产生是因为随着摄像机在环境中移动,关键帧池不断扩大,这可能导致再训练努力的分布不均匀,并且新传入关键帧的PSNR呈下降趋势。(所以才需要滑动窗口吧)
在这里插入图片描述

在本文中,我们提出了一种创新的自适应优化策略,即根据训练损失从池中选择再训练关键帧来抵消长尾效应。通过采用这种方法,我们的目标是提高具有较低PSNR值的关键帧的再训练频率。通过这样做,我们的自适应策略确保在关键帧池中更公平地分配再训练工作,优化每个关键帧对系统整体性能的贡献。

3)弱约束致密化:在GS-SLAM环境下,致密化是逼真渲染的关键组成部分,包括几何致密化和自适应致密化。几何致密化涉及将彩色点云转换为初始化的高斯基元,用于每个新识别的关键帧,为环境提供基本的几何结构。另一方面,自适应致密化使用分裂和克隆等操作来细化高斯原语,这些操作由梯度和原语本身的大小引导。这些致密化仅受简单修剪策略的限制,该策略消除了低不透明度的高斯原语。然而,新兴研究表明,这种方法不足以将模型的大小管理在最佳范围内。在本文中,我们引入了不透明度正则化损失来鼓励高斯原语学习低不透明度,从而不仅有利于修剪过程以消除不重要的原语,而且还保持了高保真渲染。

2.2 自适应计算对齐

为了解决实时GS-slam中真实感渲染的计算不对齐问题,我们提出了一种自适应计算对齐策略,称为CaRtGS。下面,我们将详细概述该策略的关键步骤。

1)快速飞溅反向传播:在传统的3DGS训练pipeline中,反向传播阶段的计算要求很高,因为它需要将梯度信息从像素传播到高斯基元。这个过程需要计算每个飞溅像素对 ( i , j ) (i, j) (i,j)的梯度,遵循聚合步骤。在每次迭代中,GPU线程 i + 1 i+1 i+1应用标准 α − b l e n d i n g α-blending αblending逻辑从接收状态 X i , j X_{i,j} Xi,j过渡到 X i + 1 , j X_{i+1,j} Xi+1,j,并将更新后的信息整合到梯度计算中。这个过程可以用数学表示为:
在这里插入图片描述

逐像素传播在GS-SLAM中广泛使用,将建图线程到像素并以相反的深度顺序处理splat。线程 j 按照拼合的顺序计算拼合的部分梯度,通过原子操作更新每个拼合的累积梯度。但是,这种方法可能导致线程之间争用共享内存访问,从而导致妨碍性能的序列化操作。

为了应对这一挑战,我们采用了一种新的并行化策略,将重点从基于像素的处理转移到基于飞溅的处理。这种策略允许每个线程独立地维护splat的状态,并有效地交换像素状态信息。线程 i 可以计算第 i 个splat的梯度贡献,需要在前 i 个splat混合后的像素 j 状态。

在向前传递期间,线程存储每N条像素的透光率T和累积颜色RGB,为后向传播做准备。这些存储状态包括初始条件 X + 0 , j , X N , j , ⋅ ⋅ ∀ j X+{0,j}, X{N,j},··∀j X+0,j,XN,j⋅⋅j。在向后传递开始时,tile中的每个线程生成像素状态 X i , j X_{i,j} Xi,j。然后,线程进行快速协作共享以交换像素状态。

我们引入了以飞溅为中心的并行性,每个线程一次处理一个高斯飞溅,显著减少了争用。梯度计算依赖于一组逐像素、逐像素值,有效地遍历splat⇔像素关系表。在向前传递期间,我们为每32次飞溅保存像素状态。对于向后传递,splats被分组为32个bucket,每个bucket由CUDA warp处理。warp利用warp内部洗牌来有效地构建他们的状态表段。
与逐像素传播的Photo-SLAM相比,这种改进有效地解决了训练不足的问题。

在这里插入图片描述
2)自适应优化:尽管 long-tail 传播总体上达到了足够的训练,但每个关键帧迭代的长尾分布是一个挑战。为了解决这个问题,我们建议使用基于训练损失L的自适应优化来增强飞溅的方法,以确保在关键帧池K上更公平地分配迭代。
给定一个关键帧池 K k K_k Kk,其中包含关键帧{ v 1 , v 2 , … , v k v1, v2,…, vk v1,v2vk},则维持两个集合: R k R_k Rk = {r1, r2,…, rk},它跟踪每个关键帧的剩余训练迭代, L k L_k Lk = { l 1 , l 2 , … , l k l1, l2,…, lk l1,l2lk}记录每个关键帧的最后一次训练损失值。当检测到新的关键帧 v k + 1 v_{k+1} vk+1时,我们更新我们的池如下:

在这里插入图片描述

其中 r k + 1 0 r^ 0_{ k+1} rk+10为分配给新关键帧的初始训练迭代次数, l k + 1 l_{k+1} lk+1为其初始训练损失值。然后,我们从剩余迭代的关键帧子集中随机选择一个关键帧 v ′ v' v,定义为 {vi |ri > 0,∀ri∈Rk},来训练3D高斯地图G。训练后,我们将所选关键帧的训练迭代次数减1,将r ’ 调整为 r ’ - 1,并更新相应的训练损失值l '。当{vi |ri > 0时,∀ri∈Rk}为空,我们根据Lk更新Rk如下:
在这里插入图片描述
其中dkQ(·)给出了前dk个最大的元素,dk = max(1, k /d), d是一个超参数。该方法优先考虑具有较高训练损失值的关键帧。

3)不透明度正则化(Opacity Regularization):在3DGS的典型应用中,利用渲染损失 l r e n d e r l_{render} lrender来细化三维高斯基元。为了有效地管理内存使用和模型大小,我们设计了一种策略,鼓励在对渲染过程没有贡献的区域消除高斯分布。由于高斯的存在主要是由它的不透明度o来表示的,我们在这个属性上强加了一个正则化项 L o L_o Lo。我们的训练损失L的完整公式如下:

在这里插入图片描述
其中λssim为权重因子,λo为正则化系数,N为高斯基元总数。

2.3总体流程

在Photo-SLAM的基础上,我们采用ORB- slam3作为前端跟踪器,该跟踪器不仅提供输入图像Vi的高效6自由度相机姿态估计,还提供彩色点云p。在定位模块中,前端跟踪器通过Levenberg-Marquardt (LM)算法最小化2D ORB关键点pi与匹配的3D点pi之间的重投影误差,交互式地改进相机方向R和位置t。在几何建图模块中,前端跟踪器对一组共可见的3D点PL和关键帧KL执行BA调整,以生成彩色点云Pi。给定一个彩色点云Pi,我们将其转换为一组初始化的高斯基元Gi。随后,我们通过几何致密化操作将Gi合并到三维高斯地图G中。利用3DGS,我们可以得到给定6自由度相机姿态的高保真渲染。

在这里插入图片描述

3.文章贡献

  1. 我们对GS-SLAM中存在的计算偏差现象进行了深入的分析。
  2. 我们引入了一种自适应计算对齐策略,有效地解决了训练不足、长尾优化和弱约束致密化问题,在实时约束下使用更少的高斯原语实现了高保真渲染。

4.个人思考

  1. 本文针对Photo-slam中出现的一些痛点问题,有的放矢,对Photo-slam提出了进一步的优化。
  2. 总的来说解决了三个问题,我个人觉得,第一个解决方案的创新性很高,相当于对GS渲染的反向传播过程进行优化,并将他运用到Photo-slam上面。第二个解决的长尾问题是针对于Photo-slam的具体优化,之前我就觉得这个地方需要改进,他这个通过损失来判断迭代哪些关键帧的方法让我眼前一亮。虽然简单,但是之前没有人这样做。
  3. 这些方法切实地对已有方法进行优化,覆盖了大部分方面,让Photo-slam的效果更上了一层楼,总之这个工作还是非常不错的。

相关文章:

GS-SLAM论文阅读笔记-CaRtGS

前言 这篇文章看起来有点像Photo-slam的续作,行文格式和图片类型很接近,而且貌似是出自同一所学校的,所以推测可能是Photo-slam的优化与改进方法,接下来具体看看改进了哪些地方。 文章目录 前言1.背景介绍GS-SLAM方法总结 2.关键…...

15分钟学 Python 第36天 :Python 爬虫入门(二)

Python 爬虫入门:环境准备 在进行Python爬虫的学习和实践之前,首先需要准备好合适的开发环境。本节将详细介绍Python环境的安装、必要库的配置、以及常用工具的使用,为后续的爬虫编写奠定坚实的基础。 1. 环境准备概述 1.1 为什么环境准备…...

Spring:强制登陆与拦截器

1.只使用session验证 (1)第一步:用户登陆时存储session ApiOperation("用户登陆") PostMapping("/login") public AppResult login(HttpServletRequest request,RequestParam("username") ApiParam("用…...

MySQL-数据库约束

1.约束类型 类型说明NOT NULL非空约束 指定非空约束的列不能存储NULL值 DEFAULT默认约束当没有给列赋值时使用的默认值UNIQUE唯一约束指定唯一约束的列每行数据必须有唯一的值PRIMARY KEY主键约束NOT NULL和UNIQUE的结合,可以指定一个列霍多个列,有助于…...

线性表三——队列queue

#include<bits/stdc.h> using namespace std; int n,m; queue<int> q;int main(){cin>>n>>m;for(int i1;i<n;i) q.push(i);int k0;while(!q.empty()){k;if(k<m)//从队头出来&#xff0c;再次回到队尾{int idq.front();//记录出去的编号 q.pop();…...

算法笔记(十)——队列+宽搜

文章目录 N 叉数的层序遍历二叉树的锯齿形层序遍历二叉树最大宽度在每个树行中找最大值 BFS是图上最基础、最重要的搜索算法之一&#xff1b; 每次都尝试访问同一层的节点如果同一层都访问完了&#xff0c;再访问下一层 BFS基本框架 void bfs(起始点) {将起始点放入队列中;标记…...

webpack配置全面讲解【完整篇】

文章目录 前言webpack 核心包&#xff1a;配置文件导出三种方式&#xff1a;在线配置 webpack配置文件解析&#xff1a;入口&#xff08;Entry&#xff09;&#xff1a;输出&#xff08;Output&#xff09;&#xff1a;加载器&#xff08;Loaders&#xff09;&#xff1a;插件&…...

十、kotlin的协程

协程 基本概念定义组成挂起和恢复结构化并发协程构建器作用域构建器挂起函数阻塞与非阻塞runBlocking全局协程像守护线程 Job的生命周期 常用函数延时和等待启动和取消启动取消 暂停 协程启动调度器启动方式启动模式线程上下文继承的定义继承的公式 协程取消与超时取消挂起点取…...

vscode qt 最新开发环境配置, 基于最新插件 Qt All Extensions Pack

qt 之前发布了vscode qt offical ,但是最新更新中将其升级改为了几个不同的插件&#xff0c;功能更强大 1. 前置条件 qt 已安装 2. 插件安装 打开vscode 插件安装&#xff0c;搜索qt 会看到很多qt插件&#xff0c;直接选择Qt All Extensions Pack 安装 会安装qt环境所需的…...

【MySQL】Ubuntu环境下MySQL的安装与卸载

目录 1.MYSQL的安装 2.MySQL的登录 3.MYSQL的卸载 4.设置配置文件 1.MYSQL的安装 首先我们要看看我们环境里面有没有已经安装好的MySQL 我们发现是默认是没有的。 我们还可以通过下面这个命令来确认有没有mysql的安装包 首先我们得知道我们当前的系统版本是什么 lsb_…...

C# StringBuilder类:高效构建和修改字符串的利器

C# 中的 StringBuilder 类是一个可变的字符序列&#xff0c;用于高效地构建和修改字符串。与字符串&#xff08;string&#xff09;不同&#xff0c;字符串在 C# 中是不可变的&#xff0c;这意味着每次修改字符串&#xff08;如拼接、替换等操作&#xff09;时&#xff0c;都会…...

AVL平衡树(AVL Tree)

**场景&#xff1a;课堂讨论** --- **小明&#xff08;ESFP学生&#xff09;**&#xff1a;张老师&#xff0c;为什么AVL树&#xff08;AVL Tree&#xff09;中的旋转操作这么重要&#xff1f;感觉只是节点的移动&#xff0c;有没有什么实际意义&#xff1f; **张老师&#…...

【python实操】python小程序之两数取大值以及login登录

引言 python小程序之两数取大值以及login登录 文章目录 引言一、两数取大值1.1 题目1.2 代码1.3 代码解释 二、login登录2.1 题目2.2 代码2.3 代码解释 三、思考3.1 两数取大值3.2 login登录 一、两数取大值 1.1 题目 定义一个函数my_max&#xff0c;包含两个参数, 函数的作用…...

Pikachu-File Inclusion-远程文件包含

远程文件包含漏洞 是指能够包含远程服务器上的文件并执行。由于远程服务器的文件是我们可控的&#xff0c;因此漏洞一旦存在&#xff0c;危害性会很大。但远程文件包含漏洞的利用条件较为苛刻&#xff1b;因此&#xff0c;在web应用系统的功能设计上尽量不要让前端用户直接传变…...

TIM(Timer)定时器的原理

一、介绍 硬件定时器的工作原理基于时钟信号源提供稳定的时钟信号作为计时器的基准。计数器从预设值开始计数&#xff0c;每当时钟信号到达时计数器递增。当计数器达到预设值时&#xff0c;定时器会触发一个中断信号通知中断控制器处理相应的中断服务程序。在中断服务程序中&a…...

Microsoft Visual Studio有多油饼

#1 Microsoft Visual Studio C 2023&#xff1a; 必须安装在C盘 为啥&#xff1f; 安其他盘能亖啊&#xff1f; 真有病 #2 Microsoft Visual Studio C 2013&#xff1a; 每个硬盘必须都腾出至少8个G的空间 不是我安在这个盘不就是为了其他盘没空间吗&#xff1f; 合着…...

Golang | Leetcode Golang题解之第452题用最少数量的箭引爆气球

题目&#xff1a; 题解&#xff1a; func findMinArrowShots(points [][]int) int {if len(points) 0 {return 0}sort.Slice(points, func(i, j int) bool { return points[i][1] < points[j][1] })maxRight : points[0][1]ans : 1for _, p : range points {if p[0] > …...

Python 从入门到实战35(进程-multiprocessing模块)

我们的目标是&#xff1a;通过这一套资料学习下来&#xff0c;可以熟练掌握python基础&#xff0c;然后结合经典实例、实践相结合&#xff0c;使我们完全掌握python&#xff0c;并做到独立完成项目开发的能力。 上篇文章我们讨论了turtle库绘制图画操作的相关知识。今天学习一下…...

“米哈游悄然布局未来科技:入股星海图,共绘具身智能机器人新篇章“

米哈游悄然入股具身智能机器人公司:技术布局与未来展望 近日,米哈游阿尔戈科技有限公司宣布入股具身智能机器人公司星海图,这一消息在行业内引起了广泛关注。米哈游,这家以游戏开发而闻名的企业,近年来正逐步扩大其在人工智能和新兴科技领域的投资布局,此次入股星海图正是…...

基于spring boot的篮球论坛系统

作者&#xff1a;计算机搬砖家 开发技术&#xff1a;SpringBoot、php、Python、小程序、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;Java精选实战项…...

华夏ERP账号密码泄露漏洞

漏洞描述 华夏ERP账号密码泄露漏洞 漏洞复现 FOFA "jshERP-boot" POC IP/jshERP-boot/user/getAllList;.ico...

Android问题笔记五十:构建错误-AAPT2 aapt2-7.0.2-7396180-windows Daemon

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…...

CAD 3dsmax maya等autodesk系列专用卸载修复工具AutoRemove,一键完全彻底卸载删除软件的专用卸载工具

AutoRemove 是一款功能强大的软件卸载工具&#xff0c;专门设计用于彻底清除Autodesk系列软件&#xff0c;如AutoCAD、3ds Max、Revit、Maya、Inventor、Navisworks、civil 3d、sketchbook、Architecture、Electrical、Mechanical、、等&#xff0c;从您的系统中。它通过深度清…...

python中的函数介绍

文章目录 1.函数1.1 语法格式1.2 函数参数1.3 函数的返回值1.4 变量作用域1.5 函数的执行过程1.6 链式调用1.7 嵌套调用1.8 函数栈帧1.9 函数递归1.10 参数默认值1.11 关键词参数 1.函数 无论是编程中的函数还是数学中的函数&#xff0c;本质都是差不多的&#xff0c;丢给函数…...

LinuxO(1)调度算法

概念 在Linux中&#xff0c;O(1)调度算法是一种进程调度算法。O(1)表示算法的时间复杂度是常数级别的&#xff0c;与系统中的进程数量无关。 运行队列结构 他采用了两个运行队列&#xff0c;一个活动队列和一个过期队列。活动队列中的进程是有资格获取CPU时间片的进程&#x…...

安防监控/视频系统EasyCVR视频汇聚平台如何过滤134段的告警通道?

视频汇聚/集中存储EasyCVR安防监控视频系统采用先进的网络传输技术&#xff0c;支持高清视频的接入和传输&#xff0c;能够满足大规模、高并发的远程监控需求。平台支持国标GB/T 28181协议、部标JT808、GA/T 1400协议、RTMP、RTSP/Onvif协议、海康Ehome、海康SDK、大华SDK、华为…...

SDKMAN!安装Maven

一、通过SDKMAN!正常安装 查看maven版本 sdk list maven安装maven 3.6.3版本 sdk install maven 3.6.3查看maven 3.6.3安装目录 sdk home maven 3.6.3安装过程中可能会失败&#xff0c;出现tmp临时目录中存在临时文件 # 移除临时文件&#xff0c;不要手动删除&#xff0c;…...

[NeurIPS 2022] STaR: Bootstrapping Reasoning With Reasoning

Contents IntroductionMethodExperimentsReferences Introduction CoT 推理可以有效提升 LLM 推理能力&#xff0c;但 few-shot prompting 无法发挥 CoT 的全部潜力&#xff0c;训练能够生成中间推理步骤 (i.e., rationale) 的 LLM 又需要大量人工标注 rationale&#xff0c;为…...

C++中对象的构造与析构

目录 一、引言 二、构造函数详解 1.构造函数的作用 2.构造函数的调用时机 3.构造函数的分类 三、析构函数详解 1.析构函数的作用 2.析构函数的调用时机 四、实例分析 五、总结 本文将详细讲解C中对象的构造和析构过程&#xff0c;包括构造函数、析构函数的作用及其调用时机…...

算法笔记(九)——栈

文章目录 删除字符串中的所有相邻重复项比较含退格的字符串基本计算机II字符串解码验证栈序列 栈是一种先进后出的数据结构&#xff0c;其操作主要有 进栈、压栈&#xff08;Push&#xff09; 出栈&#xff08;Pop&#xff09; 常见的使用栈的算法题 中缀转后缀逆波兰表达式求…...