24年8月来自土耳其中东科技大学(MEU)的论文“IG-SLAM: Instant Gaussian SLAM”。
3D Gaussian Splatting 最近作为 SLAM 系统中神经隐式表示的替代场景表示,显示出良好的效果。然而,当前的方法要么缺乏密集的深度图来监督制图过程,要么缺乏考虑环境规模的详细训练设计。为了解决这些缺点,提出 IG-SLAM,这是一个密集的仅 RGB SLAM 系统,它采用强大的密集 SLAM 方法进行跟踪并将其与 Gaussian Splatting 相结合。使用跟踪提供的精确姿势和密集深度构建环境的 3D 地图。此外,利用地图优化中的深度不确定性来改进 3D 重建。其中在地图优化中的衰减策略增强收敛性,并允许系统在单个过程中以 10 fps 速度运行。
该领域早期研究 [16, 39, 43] 采用高斯 Splatting 作为唯一场景表示,同时实时跟踪和制图环境。然而,利用新视图合成方法作为跟踪和制图工具既引人注目又具有挑战性。困难的出现,是因为姿势和地图优化是联合进行的。为了将这两个艰巨的任务分离开来,[11, 27] 利用传统的 SLAM 方法,在重建方面表现出优于唯一场景表示方法的性能。然而,这些研究要么缺乏密集的深度监督,要么缺乏高帧率。
3D 高斯splatting将场景表示为一组具有不同颜色、形状和模糊度的高斯函数。提出了一些改进措施以提高一致性和重建质量。例如,还提出了 2D 副本(counterpart) [10] 来增强多视图一致性。此外,与原始 3D 高斯splatting一样,使用 alpha 混合渲染深度会导致含噪表面;因此,更严格的方法通过根据视点使用每个高斯的不同深度来解决此问题 [4, 44]。
由于其渲染速度快并且与 NeRF [17] 不同,是一种明确的场景表示,高斯splatting [14] 迅速引起关注。MonoGS [16]、GS-SLAM [39] 和 SplaTAM [13] 是开创性的高斯splatting表示 SLAM 算法,它们联合优化高斯和姿势。 Gaussian-SLAM [43] 引入了子地图来减轻神经遗忘。Photo-SLAM [11] 通过采用传统的视觉 SLAM 算法 [19] 作为其跟踪模块,将跟踪和建图分离,并引入了由粗到细的地图优化方法。RTG-SLAM [23] 仅考虑最前面的模糊高斯来渲染深度。最近的研究,Splat-SLAM [27] 使用代理(proxy)深度图来监督地图优化。
如图所示IG-SLAM概述:系统以 RGB 图像流作为输入,并以一组高斯函数的形式输出相机姿态和场景表示;将这个目标分解为两个部分:跟踪和建图;跟踪是基于平均光流创建关键帧并将其添加到帧图中,预训练的 GRU 可细化关键帧之间的光流;在帧图上执行密集集束调整 (DBA),在优化密集深度图和相机姿态的同时最小化重投影误差,并同时计算深度图协方差;经过几次迭代后,深度图和相机姿态预计会收敛;建图是从跟踪中获得的关键帧姿态、深度和协方差用于 3D 重建;利用相机姿态和深度图从低协方差区域初始化高斯函数;然后将 3D 高斯函数投影到图像平面上,并利用可微分光栅化器进行渲染。
损失函数是深度和颜色损失的组合。深度损失由协方差加权。最后,损失函数反向传播以优化高斯函数的方向、缩放、模糊度、位置和颜色(如图橙色箭头所示)。此外,高斯函数根据局部梯度进行分割、克隆和剪枝。
主要采用 DROID-SLAM [34] 作为跟踪模块。DROID-SLAM 维护两个状态变量:每个相机帧 t 的相机姿态 Gt 和逆深度 dt。DROID-SLAM 根据共见性构建关键帧的帧图 (V , E )。当某一帧的光流平均幅度高于某个阈值时,将从所有相机帧中选择关键帧。如果帧 i 和帧 j 之间存在视觉重叠,则在 V 中的第 i 个和第 j 个顶点之间创建一条边。该图在推理过程中更新。
给定帧 i 和 j 的初始姿态和深度估计 (Gi ,di ) 和 (Gj ,dj ),通过从帧 i 反投影像素、将它们投影到帧 j 中并取逐像素位置差来估计光流场。重投影像素位置 pij 如下计算:
其中 Gij = Gj^−1 ◦ Gi 。光流的初始估计是 pij - pj。估计值与一个相关向量一起输入到 GRU 中,该相关向量是帧特征之间的内积。GRU 产生流校正 rij 和置信度权重 wij 。改进的重投影像素位置的计算结合了来自 GRU 的流校正。然后,密集集束调整层最小化方程 (2) 中的成本函数如下:
对其线性化并在 Gauss-Newton 算法迭代求解姿态和深度。线性化方程变成:
集束调整层对初始光流估计进行操作并更新关键帧的姿势和深度图。然后通过改进的姿势和深度图,重新计算光流,随后将其反馈到集束调整层。在对关键帧图进行连续迭代改进之后,姿势和深度图有望收敛。
在密集集束调整步骤之后,计算深度估计的协方差。如 NeRF-SLAM [26] 所示,如上公式中相同 Hessian 结构可用于计算深度和姿势估计的协方差 Σd,ΣG ,如下所示(注:深度协方差既用作初始化高斯的掩码,也用作损失函数深度分量中的权重):
地图过程负责使用配备有跟踪过程中获得姿势、图像、深度和协方差的关键帧进行 3D 重建。
采用高斯 Splatting [14] 作为场景表示。高斯函数描述为
其中 μ 和 Σ 是定义此高斯位置和形状的均值和协方差。为了确保协方差在优化过程中保持半正定,协方差 Σ 分解为 RSSTRT,其中 R 是旋转矩阵,S 是缩放矩阵。除了位置、旋转和缩放之外,还优化了模糊度 α 和颜色 c。虽然原始实现将颜色参数化为球谐系数,但算法直接优化颜色。3D 协方差的投影公式为 Σ′ = JRΣRTJT,其中 R 是世界到相机变换 Tcw 的旋转分量,J 是投影变换 P [51] 的仿射近似雅可比矩阵。位置直接投影为 μ′ = PTcwμ。
首先将视点可见的一组高斯函数 N 投影到图像平面上。然后根据深度对 2D 高斯函数进行排序,并通过 α 混合进行光栅化,如下公式的颜色和深度所示:
由于关键帧的密集深度图可用,采用类似于 RGB-D MonoGS [16] 的训练策略,但利用受 Photo-SLAM [11] 和 Instant-NGP [18] 启发的由粗到细的训练策略。
按照 MonoGS [16]、GlORIE-SLAM [45] 和 Splat-SLAM [27] 中建立的惯例,通过多次迭代优化地图来优化制图结果。为此,随机选择单个帧并使用与建图相同的损失函数优化地图。
关于训练策略的一个微妙但关键的点是,密集的深度图可能会很不准确,噪声大;但是,它们不太可能破坏深度顺序。换句话说,在训练期间让高斯函数切换位置的位置学习率是冗余的,并且会阻碍优化收敛。这种影响如图所示。应该注意的是,标准高斯 Splating 训练从来都不是这种情况,其中该方法通常从稀疏的 SfM 点云开始。但是,由于高斯函数是从密集的深度图初始化的,因此它们彼此非常接近。
图中说明训练中会遇到的三种假设情况。虚线从相机中心穿过真值高斯位置。褪色的高斯代表其先前的位置。红线是沿梯度方向的位置更新步骤。在 A) 中,较大的位置更新会导致高斯的顺序发生变化,从而在训练中产生类似TV-静态噪声。在 B) 中,由于位置更新较小,因此需要多次迭代才能将高斯移动到正确位置。C) 表示理想情况,其中位置更新恰好是位置误差。由于为每次迭代设置完美的学习率既不可行也不切实际,选择在训练期间衰减的学习率,减少训练期间的 TV-静态噪声。初始化学习率以覆盖模型从粗到细所需的全部范围,同时允许逐渐衰减。
系统在配备 3.6GHz AMD Ryzen Threadripper PRO 5975WX 和 NVIDIA RTX 4090 GPU 的 PC 上运行。在所有的实验中,建图中的超参数 wesetl = 0.8、θ = 128、α = 0.5、lri = 1.6×10−4、lrf = 1.6 × 10−6、τ = 3000。为 EuRoC [3] 和 Replica [29] 数据集设置 β = 2000,为 TUM RGB-D [30] 和 ScanNet [6] 数据集设置 β = 26000。这些值与 MonoGS [43] 和 Splat-SLAM [27] 中使用的值一致。
对于跟踪,使用来自 DROID-SLAM [34] 的预训练 GRU 权重。将关键帧选择的平均光流阈值设置为 4.0 像素,将局部密集集束调整窗口设置为 16。跟踪模块中的优化在 LieTorch [35] 框架中执行。如果最新关键帧尚未在滑动窗口中,则地图过程仅接受完成优化步骤后创建的最新关键帧。