介绍
GS-SLAM是最近比较新的方向,由于传统SLAM的研究变得很少,拥抱与新的技术结合的方法也许是个好主意。之前总结了大部分GS-SLAM的文章。但是这个方向在不断发展,而发展初期的很多论文值得参考。所以用博客记录一下比较新的论文阅读笔记。GSFusion 这篇文章是TUM发表的,TUM在SLAM领域是非常牛的,所以需要仔细阅读一下这篇文章,肯定会有所收获!
文章目录
- 介绍
- 1.背景介绍
- 2.关键内容
- 2.1混合场景表达
- (1)基于八叉树的TSDF网格
- (2)3D Gaussian表达
- 2.2增量地图
- (1)TSDF融合
- (2)新高斯的初始化策略
- (3)关键帧维护策略
- 2.3整体流程
- 3.文章贡献
- 4.个人思考
1.背景介绍
-
传统的体积融合算法保留了三维场景的空间结构,这对计算机视觉和机器人技术中的许多任务都是有益的。然而,它们在可视化方面往往缺乏真实感。单纯的颜色融合通常会导致低照片真实感和不完整的地图,因为遮挡,深度图中的洞,以及忽视材料属性,如反射和透明度。
-
新兴的三维高斯飞溅弥补了这一差距,但现有的基于高斯的重建方法经常受到伪影和与底层3D结构不一致的影响,并且难以实时优化,无法为用户提供高质量的即时反馈。高斯虽然优于Nerf,但原始范式是为离线操作而设计的,这仍然需要大约10-30分钟来批量优化小规模数据集(300张图像)。
-
其中一个瓶颈来自于在优化过程中需要更新的大量高斯参数。 不通过使用3D高斯作为一个独立的地图表示,作者将其合并到一个体映射系统中,以利用几何信息,并建议在图像上使用四叉树数据结构,以大大减少初始化的splats数量。通过这种方式,可以同时生成一个紧凑的三维高斯地图,具有更少的伪影和一个动态的体积地图。
-
作者认为问题的关键在于 限制添加到场景中的3D高斯的数量对于在扫描过程中保持视觉质量和效率之间的平衡 。并且解释了原因:
1.可以充分利用体网格的空间结构来避免在邻域中重复三维高斯分布。
2.其次,与3DGS相比,体积地图更加成熟,使其适用于更广泛的下游机器人任务。
2.关键内容
2.1混合场景表达
(1)基于八叉树的TSDF网格
八叉树是一种空间数据结构,通常用于将三维空间划分为八个八叉,以提高计算效率。在supereight( 作者主要参考这篇文章的方法)中,每个叶子节点包含一个连续的8的三次方个体素块。这将体积图转换为无序的稀疏分布体素块的集合,八叉树作为基于整数坐标检索数据的空间索引。
这里使用Morton编码实现了高效的树遍历,其中来自3D坐标的交错位形成了每个节点的唯一标识符。这个编码方案隐式地定义了树结构,因为它递归地指示了父节点在较粗层次上的位置。注意,这个建图系统支持灵活的数据类型,比如TSDF和occupancy。为了简化实现,作者选择单分辨率TSDF。因此,每个体素存储到最近表面的截断带符号距离,负值表示表面里面的体素。
(2)3D Gaussian表达
选择了3D高斯作为场景原语的原因不仅在于高质量的渲染,还因为它们是可微的,可以很容易地投影到2D空间中,从而实现快速α-blending。 三维高斯函数可以看作一个椭球,其中3 × 3协方差矩阵Σ定义了椭球在三维空间中的形状和方向。
假设三维高斯函数以pg为中心,则其定义如下:
其中R∈R 3×3, S∈R 3×3分别表示三维高斯函数的旋转和缩放。给定时间步长k从摄像机坐标帧到世界坐标帧的刚变换TW Ck∈SE(3),则二维投影定义为:
其中π(·)依次进行去均质化和透视投影。W表示T−1 W Ck的旋转部分,J是将相机坐标转换为射线坐标的射影变换的仿射近似的雅可比矩阵。除了3D位置pg,旋转R和缩放S,每个3D高斯还包含一个不透明度值α∈[0,1],用于混合和球面谐波(SH)系数,以捕获与视图相关的颜色c。
2.2增量地图
本文的实时增量建图过程包括三个主要阶段。
(1)首先,它使用输入深度帧进行TSDF融合以更新必要的体素。
(2)然后,利用视觉和几何信息在三维空间中分配新的高斯分布,以避免高斯原语的爆炸。
(3)最后,设计了一个有效的关键帧维护策略进行高斯参数的优化,实现渲染质量和计算效率之间的平衡
接下来具体介绍这三个步骤。
(1)TSDF融合
TSDF融合过程包括将新的传感器数据集成到体素图中。因此,在给定当前深度帧的情况下,确定哪些体素块应该更新是很重要的。 由于TSDF场只编码截断带宽 ±ϵ 内的表面信息,射线沿着每个像素的视线行进,体素块只有在在深度测量周围指定的 ϵ 带时才会被分配。supereight 采用从上到下的宽度优先分配,利用Morton编码以最小的开销进行快速体素块分配。
值得注意的是,在初始阶段之后,随后的帧中需要分配的体素块更少,因为新的块将主要出现在帧边界或以前未见过的区域。当分配完成后,参考与KinectFusion相同的方式进行测量值的整合。
通过将体素位置pv投影到图像坐标中,计算深度图像的测量距离与相机中心到体素的度量距离之差,得到新的SDF值。新值进一步归一化为TSDF,并使用简单的运行加权平均与前一个值融合(假设权重的上限为wmax)。数学上来讲,如下公式:
上式中Dk为时间步长k处的输入深度图,zcv表示pv在相机帧内的z轴坐标。最后,更新后的wk和tsdfk都存储在相应的体素中。
(2)新高斯的初始化策略
为了显式地控制要添加到建图中的高斯基元的数量,作者建议对每个输入RGB图像使用四叉树方案。四叉树类似于八叉树,但在2D空间中操作,树中的每个节点要么正好有四个子节点,要么根本没有(即叶节点)。作者基于对比度对图像进行划分,以便每个叶节点包含一个特定的子区域,其对比度低于预定义的阈值。
在上图中,作者演示了不同的四叉树阈值如何影响分区结果。总的来说,使用更严格的四叉树阈值可以帮助捕获更精细的细节,特别是由对比度引起的薄边缘。
假设象限的中心是uq∈r2,我们可以使用深度图将其反向投影到世界坐标系中:
在pq处放置一个新的三维高斯函数之前,首先需要检查它的周围环境。这是为了防止在一个邻域中复制多个高度相似的原语。否则,即使在扫描过程中没有发现新的区域,地图也会继续扩展。因此,简单地查询离pq最近的体素。具体方法是:
如果体素权重等于1,则表示这是一个新分配的体素,我们可以安全地在pq处初始化一个新的3D高斯函数,如下所示:
其中Rq是3×3单位矩阵,Sq是3×3对角矩阵,每个元素d等于从象限中心到它的角的反向投影长度。注意,前三个SH系数是使用图像Ik中的像素颜色初始化的。一旦体素权重超过1,我们就知道这个位置之前已经被访问过了,并且不应该在这里分配新的高斯分布。
作者的初始化策略有很多好处。它不仅大大减少了地图大小,从而提高了计算效率,而且最大限度地利用了每个原语,从而减少了场景中的浮动伪影。此外,作者的结果地图的紧凑性消除了原始3DGS方法中需要进一步致密化或修剪过程的需要,这是在线优化的另一个计算瓶颈。
(3)关键帧维护策略
由于可微渲染,我们可以使用梯度下降法直接优化高斯参数。由于gausian splatting采用基于tile的栅格化,将屏幕划分为多个tiles。当前视锥体中的3D高斯分布是基于每个tile的深度进行排序的。因此,可以通过混合N个在像素处重叠的排序和高斯原语来获得渲染的RGB图像 Ik:
为了尽量减少输入RGB图像和渲染图像之间的光度损失,将优化目标函数定义为:
在每个时间步骤中,需要多次迭代。运行的迭代次数越多,从当前视点获得的渲染图像质量就越好。然而,在线过程无法承受大量的一阶优化迭代。此外,它还会导致严重的过拟合问题,最终降低3D高斯图的整体质量。为了平衡渲染质量和优化时间,作者采用了一个简单而有效的在线优化策略:利用关键帧列表。
在初始化阶段,新的高斯函数只被分配到以前未观察到的区域。因此,每帧初始化的新原语的数量自然可以作为每个输入帧的信息增益的指标。简单地说,我们选择一个关键帧,并在新原语的数量大于某个阈值时将其添加到列表中。关键帧和非关键帧将分别进行m和n次迭代优化。然而,作者在优化非关键帧上花费的时间较少,保留了一些资源给从维护列表中随机选择的关键帧(即洗牌后的第一个(m−n)关键帧)。这种随机关键帧优化有助于减轻遗忘问题,而不会显著增加计算负担。
2.3整体流程
GSFusion整体的pipeline如下图所示。在每个时间步长中,它采用一对RGB-D图像作为输入。深度数据融合到基于八叉树的TSDF网格中捕获几何结构,同时基于对比度使用四叉树对RGB图像进行分割。如果没有相邻的高斯,则通过检查其最近的体素,在一个象限的反投影中心初始化一个新的3D高斯。最后,作者通过最小化渲染图像和输入RGB之间的光度损失来优化高斯参数。并且维护一个关键帧集来处理遗忘问题。扫描后,系统为后续任务提供体素地图和三维高斯地图。
3.文章贡献
- 提出了一种混合映射系统GSFusion,它结合了高斯飞溅和TSDF融合,可以同时实时生成两种类型的地图。
- 利用四叉树分割方案以及体积网格结构来明确控制添加到场景中的新高斯,从而优化模型大小和计算效率。