论文简记:Gaussian Splatting 在 SLAM 上的应用
论文附录
论文地址:
Gaussian-SLAM: Photo-realistic Dense SLAM with Gaussian Splatting
Gaussian Splatting SLAM
应用于单目SLAM,RGB-D相机的3D渲染。
针对传统的NeRF SLAM一个是定位精度低,一个是渲染慢,这篇文章主要解决的就是后者。
参考链接:(100倍加速!GS-SLAM:最新开源的超快NeRF SLAM!)[https://zhuanlan.zhihu.com/p/672940770]
Related works
3D GS
老朋友回顾:
与老的渲染方式的对比
对比 Nerf 和传统的 Mesh:一个是纯连续的、隐式表达在可微空间内;一个是纯离散的(虽然可以插值)、显式表达在三维空间内,3DGS 是在离散和连续间的一个平衡:在高斯球内部是连续的、可微的;在整个空间中,每个高斯球又是离散的。所谓中庸之道也。
此外对比Nerf类而言,Nerf需要的额外的计算开销很大,从而影响实时性。
传统的Mesh也需要极大的内存开销。需要处理大量的几何边缘。
ps: Nerf是隐式神经网络做渲染,特点是不需要显式存储物体表面或体积,只需依赖神经网络通过连续函数的方式表示场景。它能够在任意分辨率下采样场景中的点,理论上可以生成任意精度的渲染效果。
方法论
首先是高斯球:
“高斯球”或“高斯斑点”是3D-GS中核心的数据表示单位,它是一个三维空间中的概率分布模型。每个高斯球用来表示一个体积较小的区域,在该区域内,颜色和几何信息通过一个高斯分布进行描述。具体来说,每个高斯球有以下几个属性:
位置:高斯球的中心位置是三维空间中的一个点,通常以 𝑝=(𝑥,𝑦,𝑧)表示。
方差(scale):描述高斯球的大小或扩散程度,方差决定了高斯球的覆盖范围(即在三维空间中分布的宽度)。方差较大的高斯球表示的区域范围较广,方差较小的高斯球则表示更精细的区域。
颜色:每个高斯球都有与之关联的颜色 𝑐=(𝑅,𝐺,𝐵)用于对该区域的颜色进行着色。
不透明度(opacity):高斯球的密度决定了该区域的不透明度或遮挡效果。高密度的高斯球代表物体的不透明区域,低密度则表示半透明或完全透明区域。
PS:这个和名字自身反而不是很接近。因为高斯是一个分布,而实际上这个高斯球是一个椭球(高斯分布的公式进行一个常数变形之后变成了空间内椭球的一个描述公式。)其中的协方差矩阵可以控制这个椭球的形状。
渲染的流程:
场景表示(Scene Representation) 首先,3D-GS将场景中的几何信息用一系列稀疏的高斯球来表示。每个高斯球是场景的一部分局部表面的一个近似,多个高斯球结合起来可以表示整个三维场景。这与NeRF的隐式表示不同,3D-GS使用显式的稀疏高斯斑点来表示场景的形状、颜色和材质。
视角选择与射线投射(View Selection and Ray Tracing) 与NeRF类似,3D-GS的渲染也是通过投射光线来完成的。在给定的视角下,每个像素发射一条光线穿过场景。光线与场景中的高斯球相交,光线沿途会与多个高斯球发生交互。
光线与高斯球的融合(Ray-Gaussian Interaction) 当光线穿过一个高斯球时,该高斯球对光线产生的影响需要计算。这个过程是通过以下步骤实现的:
光线-高斯相交检测:对于每条光线,计算它与哪些高斯球相交。由于高斯球是基于概率的分布模型,所以与光线的相交检测并不像传统几何物体那样简单。需要计算光线在每个高斯球范围内的贡献度。
颜色和密度融合:光线经过每个高斯球时,会从高斯球的颜色和不透明度中提取信息。高斯球的密度(即其不透明度)决定了它对光线的遮挡作用,而颜色则决定了光线穿过该高斯球时的颜色变化。这类似于体积渲染中的累积过程,即光线从场景中不同位置累积颜色和密度,形成最终的图像。
加权累积:为了获得最终的颜色,系统需要对光线沿途经过的所有高斯球进行累积。每个高斯球的贡献根据其密度(不透明度)和颜色进行加权计算,光线穿过不同高斯球后,其颜色会逐步叠加,直到完全穿过场景或被完全遮挡。
渲染输出(Rendering Output) 经过上述步骤后,每条光线的颜色和亮度都经过累积计算,形成最终的图像。在整个过程中,3D-GS的高斯球通过其分布形状、大小、颜色和密度,模拟场景中的光照、反射和材质效果,从而生成逼真的三维渲染图像。
当然以上都是简要的概述,实际的3D-GS渲染流程推荐看相应的视频(b站上可以说到处都有):
【【较真系列】讲人话-3d gaussian splatting全解(原理+代码+公式)【1】 捏雪球】
具体流程以及部分问题:
首先除了前面说的3D高斯椭球的建立之外,还有一个问题是何时添加这些椭球。
原论文给了一整套的运行流程:
具体而言:
在跟踪时,仅优化当前相机姿势,而不更新地图表示。光栅化操作基本和3D-GS一致
测量当前帧 i 和最后一个关键帧 j 之间观察到的高斯函数的并集的交集来测量共可见性
如果共可见性下降到阈值以下,或者如果相对平移 tij 相对于中值深度较大,则帧 i 被注册为关键帧。其中参考DSO的关键帧管理方式。在当前窗口 Wk 中仅维护少量关键帧。主要区别在于,如果与最新关键帧的重叠系数低于阈值,则从当前窗口中删除关键帧。
在映射(Mapping)过程中,Wk 中的关键帧用于重建当前可见区域。此外,每次迭代都会选择两个随机的过去关键帧 Wr 以避免忘记全局地图。 3DGS 的光栅化不会对沿视线方向的高斯施加任何限制,即使进行深度观察也是如此。
在连续SLAM中,这种无约束( 三维高斯球体的栅格化不会限制观察射线方向上的高斯分布,即使有深度观测)会导致许多伪影,使得跟踪变得具有挑战性。因此,引入各向同性正则化来惩罚高斯分布的缩放参数,鼓励其保持球形,避免因沿观察方向过度拉长而产生伪影。
文章还设计了消融实验来评估第5步引入的各向同性正则化的工作对整体SLAM渲染过程的总体影响。
Gaussian-SLAM: Photo-realistic Dense SLAM with Gaussian Splatting
摘自摘要:
近期,基于Gaussian Splatting的一种新型场景表征已被证明能够在渲染性能上与NeRFs持平,同时在渲染和优化方面的速度快了一个数量级。此外,这种场景表征可以直接解释并直接操作,这对许多下游任务来说是可取的。凭借这些优势,高斯喷溅表征适合应用于在线SLAM系统,满足实时需求,并为照片级真实感密集SLAM开辟了大门。
尽管最新的神经方法在合成数据上展现出了令人印象深刻的渲染能力,但在应用于实际数据时却遭遇挑战。此外,这些方法由于计算需求大、速度慢、以及无法有效地融合姿态更新,目前还不适合实际应用,因为神经表征依赖于位置编码。
该论文在各个数据集的表现目前优于我目前调研到的已经发布的一些相关3D-GS的论文,故单独开一篇对比上一篇的方法。
Contrast
对比而言:
虽然大多数基于喷溅的方法使用类似于基于梯度的地图增密方法,本文采用了一种更受控的方法,通过精确阈值设置,利用快速最近邻搜索和 alpha 蒙版。此外,与所有同时进行的工作不同,本文的建图流程不需要在GPU内存中持有所有3D高斯,允许本文的方法扩展而不会随着覆盖区域的增加而放慢速度。此外,尽管在当前的工作中3D高斯被密集地播种,本文的颜色梯度和基于遮罩的播种策略允许在保持SOTA渲染质量的同时进行更稀疏的播种。最后,本文的动态重建不依赖于显式计算导数,并且在PyTorch中实现。
方法特点
Gaussian-SLAM: Photo-realistic Dense SLAM with Gaussian Splatting
高斯球在渲染中的作用:该论文更加专注于如何利用高斯球的特性进行高质量的渲染。高斯球提供了连续、平滑的表面表示,可以避免传统SLAM中稠密点云在视觉效果上较为粗糙的问题。因此,该方法在高质量图像重建和渲染方面表现更好。
光照处理与真实感:该方法可能在光照模型、反射率处理等方面有所优化,使得3D场景在视觉上更加接近真实世界。与一般SLAM不同,这篇论文更关注如何使得重建的场景具备真实的视觉感官效果,甚至在光照、材质表现上也更为逼真。
Gaussian Splatting SLAM:
高斯球在稠密建图中的作用:在这篇论文中,3D Gaussian Splatting技术主要用于稠密地图构建。相比于点云,使用高斯球能更紧凑地表示场景中的点,并且在稠密重建时减少计算开销。该方法的重点在于构建一个高效、紧凑且平滑的场景表示,减少SLAM中稠密建图的开销和时间。
实时性与效率的提升:论文更偏向于通过高斯球表示来提升整个SLAM系统的实时性,使得它能够在大规模场景下进行稠密地图重建,而不是追求极致的视觉效果。因此,在这篇论文中,算法的计算效率,特别是如何在高效的同时维持合理的场景质量,是核心关注点。