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

前言

这是一篇不是最新的工作,我之前没有阅读,但是我前几天阅读GLC-SLAM的时候,发现它的一部分内容参考了CG-SLAM,并且CG-SLAM最近被ECCV2024接收,说明这是一片值得参考的好文章,接下来就阅读一下吧!


文章目录


1.背景介绍

  1. 现有的基于nerf的方法遵循差分体渲染管道,这是计算密集型和耗时的。因此,他们只能通过采样有限数量的相机光线来进行跟踪和建图,而忽略了图像中的自然结构信息。
  2. 在SLAM设置中合理地加入三维高斯场并非易事。作为一种真实感视图合成技术,三维高斯场由于具有较强的各向异性和缺乏明确的多视图约束,容易对输入图像进行过拟合。
  3. 一方面,三维高斯溅射不能保证三维曲面的精确建模;另一方面,由于高斯可能与环境表面不对齐,这将导致较差的外推能力,进一步降低相机跟踪。此外,建图过程中高斯基元的增加将不可避免地降低跟踪效率。

2.关键内容

2.1快速栅格化渲染

快速高斯飞溅光栅化实现了高效的逐像素并行渲染,并且是完全可微的,这提供了一个有用的gpu加速框架。对于输入帧,光栅化器可以按照从近到远的深度顺序对所有可见的高斯原语进行预排序。在显色性方面,高斯溅射光栅器采用α-blending解决方案,通过遍历上述深度队列,在给定像素上累积亮度c和不透明度值σ,如下所示:

其中,I是渲染颜色, T i T_i Ti是累积透过率, α i α_i αi是贡献给像素的不透明度, c i c_i ci是根据其SH系数计算的高斯原语的颜色。N是一个像素泼溅过程中涉及的高斯基元的数目。

在深度渲染方面,考虑到为几何一致性而设计的损失项,我们的光栅化器不仅提供α-混合深度 D a l p h a D_{alpha} Dalpha,还提供中位数深度 D m e d i a n D_{median} Dmedian:
其中 d i d_i di是高斯原语的深度。对于像素,在其溅射过程中,我们将累积透过率T首次低于0.5的高斯作为"中值高斯"。其深度记为中位数。 T m e d i a n T_{median} Tmedian是中值高斯处的累积透过率。

代码定义如下:

cpp 复制代码
			if (T > 0.5f && test_T < 0.5)
			{
			    float dep_median = depths[collected_id[j]];
				D_median = dep_median;
			}

此外,同样需要累积的不透明度值O来区分未观察到的区域,以产生高斯:

2.2 不确定性模型

不确定性在三维高斯场中对增加信息高斯原语的比例有积极的作用,这对SLAM系统的鲁棒性和简明性至关重要。因此,我们从渲染图像和高斯原语两个角度提出了适合RGB-D观测的数学不确定性模型。

不确定性的地图:α-blending渲染深度本质上是高斯椭球沿像素射线采样计算的期望值。在合理的正态分布假设下,我们认为不确定性地图与其方差 高度相关。我们可以像Eq.(10)那样从三维高斯场渲染一个不确定性值。

在代码中是这样写的:

cpp 复制代码
atomicAdd(&(gau_uncertainty[collected_id[j]]), ((depths[collected_id[j]]-gt_px_depth)) * (depths[collected_id[j]]-gt_px_depth) * alpha * T);

其中D表示相机传感器的深度观测值,也就是深度先验。为了减轻优化过程中高斯基元位置的剧烈变化,我们提出了基于H × W不确定性地图的几何方差损失项(Eq.(11)),以迫使它们接近地面真值深度。

高斯原语的不确定性:从几何一致性的角度出发,我们设计了一个损失项 L a l i g n L_{align} Lalign,如Eq.(12)所示,用于对齐α-混合深度和中值深度。

像素的α-混合深度由权值最大的高斯基元决定。我们称这个像素为最大权值高斯基元的"支配像素"。我们的对齐损失迫使 D a l p h a D_{alpha} Dalpha和 D m e d i a n D_{median} Dmedian中值相似,这使得这个最大权值高斯原语总是出现在中值处。

因此,如Eq.(13)所示,第i个高斯原语的不确定性 v i v_i vi由来自于关键帧窗口内的所有支配像素F = { f 1 , f 2 , ... f k f_1, f_2,...f_k f1,f2,...fk}的深度与深度观测值之差决定。下图进一步可视化了高斯原语在多个视点中从其主导像素接收深度差值。

在一个关键帧 f k 中, α i k , p f_k中, α^{k, p}_i fk中,αik,p和 T i k , p T^{k,p}_i Tik,p表示像素p上第i个高斯基元的不透明度和透射率。 D p k D^k_p Dpk表示 f k f_k fk中像素p上的深度观测值。 d i k d^k_i dik是第i个高斯基元在 f k f_k fk处的深度值。

{1,..., Mk}是第i个高斯在不同关键帧中的支配像素数。利用不确定性建模,我们可以定期检测和去除不确定度超过阈值τ=0.025的不可靠高斯原语。具体而言,在建图优化过程中, v i > τ v_i > τ vi>τ的原语将被人工降低到低不透明度水平。这些低不透明度的高斯原语可以再次优化,去除真正不可逆的原语,这是一种适应性更强、更合理的策略。

2.3 建图

我们使用各种损失函数来更新高斯性质,目的是得到一个一致和稳定的高斯场。除了原始3D高斯泼溅中的颜色和SSIM损失外,NeRF-SLAM先前的工作经验表明几何损失是必要的一部分。为了克服各向异性干扰(箭头形高斯基元),我们在映射过程中添加了软尺度正则化损失。请注意,我们的系统以稍高的代价执行初始化,即更多的优化操作。

其中 I n I_n In和 D n D_n Dn表示颜色和深度,λ =1.0是控制各向异性水平的超参数,G表示当前视图下所有可见的高斯分布。

这些针对SLAM任务定制的损失函数可以加快建图的收敛速度,为后续跟踪奠定坚实的基础。

高斯的管理:在初始化中,我们基于第一帧的深度观测,将高斯基元密集投影到三维空间中。在随后的建图中,我们设置了一个经验阈值ψ = 0.5来提取未观察到的或未构建的像素,其中 O < ψ。然后,我们利用这些像素的颜色和深度信息来生成新的高斯基元。此外,我们还继承了高斯致密化的原始分裂、克隆和去除策略。

2.4 跟踪

在我们的系统中,我们首次提出了三维高斯溅射框架中导数位姿的综合数学理论,并通过经验发现李代数表示更有利于相机跟踪,特别是在高斯场中旋转。摄像机姿态优化,即旋转平移{so(3)|T},主要包括连续跟踪和滑动BA两部分。

连续跟踪:给定固定场景表示,相机姿态最初通过恒定速度假设猜测,其中最后一个姿态由最后一个相对变换变换,然后我们使用相似的光度和几何损失λ = {λ1, λ2}加权来改进这个粗略姿态。


滑动BA:累积误差是SLAM和基于高斯的SLAM系统的典型问题。为了解决这个问题,我们建立了一个包含k个共可见关键帧的滑动窗口F,并在该窗口中共同优化相机外观和场景表示。考虑到效率,我们使用预训练的NetVLAD模型将关键帧编码到描述符池中,通过余弦相似度分数来确定共可见性,而不是之前工作中的视锥重叠方法。除了来自NetVLAD[2]的关键帧外,考虑到时间关联,我们还在滑动窗口中添加了当前帧和最近的关键帧。我们仍然在滑动束调整中使用 L m a p p i n g L_{mapping} Lmapping,其中Ψ是所有可优化的高斯属性的集合。

2.5总体流程

在由RGB-D序列构建的3D高斯场中,我们可以通过gpu加速光栅器渲染 颜色,深度,不透明度和不确定性地图。此外,我们为每个高斯原语附加一个新的不确定性属性来过滤信息原语。在建图过程中,我们利用多个渲染结果来设计有效的损失函数,以获得一致且稳定的高斯场。随后,我们采用外观和几何线索来执行准确有效的跟踪。

3.文章贡献

  1. 首先对EWA(椭圆加权平均)溅射过程中相机姿态的导数进行了全面的数学分析,并为SLAM任务开发了一个专门的CUDA框架,该框架有效地解耦了跟踪和建图组件。
  2. 为了减少固有的过拟合问题,我们提出了一个尺度正则化项,适当地鼓励高斯椭球近似高斯球体,以减少各向异性,并在跟踪精度和渲染真实感之间实现良好的权衡。
  3. 提出了一种新的深度不确定性模型,帮助我们的系统在优化过程中选择更有价值的高斯原语,从而提高跟踪效率和精度。

4.个人思考

  1. 本文主要的工作量在于开发了一个适用于SLAM任务的CUDA框架,做的工作也是非常的完善。首先通过增加CUDA的输出,额外获取@深度,中值深度,不透明度权值等信息,之后利用这些信息进行损失函数的设计与约束,从而更好实现建图。
  2. 此外,本文提出的深度不确定性模型想法很新颖,从而对齐中值深度和@深度,从而更好优化高斯。
  3. 作者在文章末尾提到该工作的限制:相当大的内存使用是基于高斯的系统的一个限制。我们期望在SLAM任务中可以采用更紧凑的高斯场。此外,基于高斯的方法对未观测区域的预测能力较弱。此外,我们的系统不能处理环境中的动态对象。我们相信这是未来工作的一个非常有趣的方向。
相关推荐
明明真系叻3 小时前
第二十六周机器学习笔记:PINN求正反解求PDE文献阅读——正问题
人工智能·笔记·深度学习·机器学习·1024程序员节
mashagua6 小时前
RPA系列-uipath 学习笔记3
笔记·学习·rpa
nikoni236 小时前
828考研资料汇总
笔记·其他·硬件工程
青い月の魔女8 小时前
数据结构初阶---二叉树
c语言·数据结构·笔记·学习·算法
qq_589568108 小时前
node.js web框架koa的使用
笔记·信息可视化·echarts
stm 学习ing9 小时前
HDLBits训练6
经验分享·笔记·fpga开发·fpga·eda·verilog hdl·vhdl
stm 学习ing9 小时前
HDLBits训练4
经验分享·笔记·fpga开发·课程设计·fpga·eda·verilog hdl
炸毛的飞鼠9 小时前
汇编语言学习
笔记·学习
风无雨10 小时前
react杂乱笔记(一)
前端·笔记·react.js
胡西风_foxww10 小时前
【ES6复习笔记】Class类(15)
javascript·笔记·es6·继承··class·静态成员