专栏名称: 自动驾驶之心
自动驾驶开发者社区,关注计算机视觉、多维感知融合、部署落地、定位规控、领域方案等,坚持为领域输出最前沿的技术方向!
目录
相关文章推荐
游戏茶馆  ·  Unity又一次大规模裁员,员工凌晨5点收到通知 ·  9 小时前  
传媒招聘那些事儿  ·  网易:高级/资深游戏运营 ·  2 天前  
51好读  ›  专栏  ›  自动驾驶之心

5000万个高斯球?VINGS-Mono:首个支持室外&公里级的单目SLAM

自动驾驶之心  · 公众号  ·  · 2025-01-17 07:30

正文

点击下方 卡片 ,关注“ 3D视觉之心 ”公众号

第一时间获取 3D视觉干货

>> 点击进入→ 3D视觉之心技术交流群

单目GS-SLAM的重大挑战

现有的 3DGS SLAM 系统主要集中于有限数量的显示物体或小型室内空间,使用深度摄像头作为输入,并依赖传统的 SLAM 前端或深度点云的 ICP(迭代最近点)算法进行定位和高斯更新。而室外 GS-SLAM 方法相对稀缺,且仅限于重建几百米范围内的场景,严重依赖高功率的激光雷达传感器。然而,深度摄像头在室外环境中的表现较差,而激光雷达传感器的高成本限制了其在消费级应用中的普及。鉴于尺寸、重量和功耗的限制,低成本摄像头与 IMU 的组合成为实现 SLAM 的最低配置。因此,开发一个能够处理大规模环境的鲁棒单目(惯性)GS-SLAM 系统既重要又紧迫。

目前,支持单目输入的 3DGS SLAM 系统通过随机或稀疏特征点初始化高斯,但由于易受位姿漂移和几何噪声影响,无法应对大规模、快速移动的场景。此外,在大规模环境中,普遍存在显著的累积误差,这些误差通常需要通过闭环(Loop Closure)加以缓解。传统的闭环方法依赖于描述符或网络特征向量,需要额外的编码和词袋模型存储,效率较低,且随着场景规模的增加性能会下降。GO-SLAM通过维护帧之间的共视矩阵来识别闭环,但这导致了二次存储需求和计算开销的增加。

开发一个高效且高保真的单目 GS-SLAM 系统以应对大规模场景面临着几个 重大挑战

  1. 首先,表示大规模街景需要管理数千万个高斯,这既对存储又对计算资源提出了极高的要求。
  2. 其次,单目系统存在严重的尺度漂移问题,这会削弱重建场景的准确性和可靠性。
  3. 此外,在大规模环境中,累积误差显著。虽然传统的闭环技术在优化基于地标的地图方面效果显著,但检测闭环后修正稠密高斯地图极具挑战性,通常需要对所有历史帧重新训练。
  4. 最后,大城市环境中动态物体的存在带来了显著的伪影和噪声,进一步增加了优化的复杂性。

VINGS-Mono [1]是一个支持大规模城市场景的单目(惯性)高斯散点 SLAM 框架。该框架包含四个主要模块: VIO 前端、2D 高斯地图、新视角合成(NVS)闭环模块和动态物体擦除模块 。为了解决高斯地图存储与优化效率的问题,开发了一个评分管理器,用于通过整合局部和全局地图表示来管理 2D 高斯地图。此外,设计了一个基于采样的光栅化器,以加速高斯散点的反向传播算法,从而显著提高计算效率。为了增强跟踪精度并减轻大规模场景中不可避免的漂移,提出了一个从单帧到多帧的位姿优化模块,该模块通过将单帧的渲染误差反向传播到视锥范围内的所有帧位姿,从而提高整体位姿一致性。对于累积误差,利用高斯散点的新视角合成能力进行闭环检测,并进一步提出了一种高效的闭环修正方法,该方法能够在检测到闭环后同时调整数百万个高斯属性,确保地图的全局一致性。最后,为了应对动态物体对建图的影响,设计了一种基于重渲染损失的启发式语义分割蒙版生成方法,确保动态物体被有效处理,从而提高了建图过程的鲁棒性。

项目链接 :https://vings-mono.vercel.app/

主要贡献

  • 首次提出了一个能够在室外运行并支持公里级城市场景的单目(惯性)GS-SLAM 系统。
  • 提出了一个包含采样光栅化器、评分管理器和从单帧到多帧位姿优化的 2D 高斯地图模块,确保我们的方法可以实时实现高精度定位和高质量高斯地图构建。
  • 引入了一种基于 GS 的闭环检测方法,以及一种高效的闭环修正方法,该方法能够在检测到闭环后,通过单次操作修正数千万个高斯属性,从而有效消除累积误差并确保地图的全局一致性。
  • 在不同场景(包括室内环境、无人机视角和驾驶场景)上进行了全面的实验,结果表明 VINGS-Mono 在渲染和定位性能方面均优于现有方法。此外开发了一款移动应用程序,并进行了真实场景实验,证明了方法的实际可靠性。

系统概述

提出的框架管道如图 2 所示。给定一系列 RGB 图像和 IMU 数据,我们首先利用视觉惯性前端(Visual-Inertial Front End,详见第 IV 节)选择关键帧,并通过密集束调整(Dense Bundle Adjustment,DBA)计算关键帧的初始深度和位姿信息。此外,我们基于深度估计过程中得出的协方差计算深度图的不确定性,过滤掉几何上不准确的区域和天空区域。接着,2D 高斯地图模块(详见第 V 节)利用视觉前端的输出,逐步添加并维护高斯椭球。我们设计了一种基于贡献分数和误差分数的管理机制,用于高效修剪高斯。同时,为了确保系统在大规模城市场景中的可扩展性,我们实现了 CPU-GPU 内存转移机制。

在新视角合成(Novel View Synthesis, NVS)闭环模块(详见第 VI 节)中,我们利用高斯散点的视图合成能力,设计了一种创新的闭环检测方法,并通过高斯-位姿对(Gaussian-Pose Pair)匹配修正高斯地图。此外,我们集成了动态物体擦除模块(Dynamic Object Eraser,详见第 VII 节),该模块通过蒙版屏蔽车辆和行人等动态物体,确保在静态场景假设下实现一致和准确的建图。

视觉惯性前端

密集束调整与视觉因子

视觉约束建模为反深度和位姿上的密集束调整(Dense Bundle Adjustment, DBA)优化问题,其中反深度 通过位姿 投影到帧 上以估计光流

对于相邻的 RGB 帧,我们基于编码后的特征图构建相关体积,并通过查找操作获得相关特征图。利用基于 GRU 的结构,我们将当前图像编码、相关特征图和 GRU 的隐藏状态作为输入,输出光流残差 和权重 ,用于后续上采样。为确保实时处理,我们下采样至原始 RGB 图像分辨率的八分之一。

GRU 输出修正后的光流场 ,我们将修正后的光流定义为 。随后,我们将 DBA 问题定义如下,通过迭代优化

其中 表示权重 的对角矩阵。

对于以帧 为锚点的边束,结合到 个共视帧,其合并的 Hessian 矩阵表示为:

其中, 是矩阵的子块。

我们采用高斯-牛顿方法同时优化位姿和反深度。在消去深度状态后,通过构造关于位姿的约束来实现高效计算:

更新位姿后,可通过以下公式更新反深度:

最后,利用 RAFT 定义的凸上采样方法生成全分辨率深度。

视觉惯性因子图

我们构建的因子图包含视觉因子和 IMU 预积分因子,其优化通过 GTSAM实现。IMU 预积分因子的状态变量定义为:

其中, 是 IMU 在世界坐标系下的位姿, 是速度, 是加速度计和陀螺仪的偏差。

视觉因子通过舒尔消元法计算,其形式如下:

其中, 表示摄像头到 IMU 的外参。

IMU 预积分残差定义为:

其中, 是 IMU 的位置和旋转矩阵, 是 IMU 的预积分项, 是重力加速度, 是时间间隔。

深度不确定性估计

我们的概率深度不确定性来源于密集束调整(DBA)过程中信息矩阵的计算。其目的是抑制噪声并减小伪影。基于 Hessian 矩阵的稀疏形式,可以计算每个像素反深度值的边缘协方差:

其中, 是下三角 Cholesky 分解矩阵。

利用视觉惯性前端提供的位姿 、深度 、对应的不确定性 和输入的 RGB 图像 ,我们可以逐步构建和维护 2D 高斯地图。

2D 高斯地图

在线建图过程

在建图模块初始化时,当 VIO 前端处理完第一批关键帧后,将初始化 2D 高斯地图。对于每一帧 ,深度或不确定性过大的像素将被屏蔽。随后,从这些像素中随机采样 点并投影到世界坐标系中以生成点云。高斯属性按照 2DGS中描述的方法初始化为:

我们遵循 2DGS 的渲染方法渲染颜色 、深度 、法向量 和累积 ,如下公式所示:

其中, 是高斯中心在相机坐标系中的深度值, 是高斯椭球的法向量,其正方向与射线方向一致。

建图模块和 VIO 前端作为两个独立线程并行运行。在后续的增量建图过程中,我们没有采用原始 3DGS 的克隆与分裂策略进行加密,因为在 GS-SLAM 环境下,重置透明度的操作表现不佳。相反,我们首先添加较多的高斯点,然后修剪多余的点,证明了这种策略的高效性。

当前端添加新的关键帧 时,在训练前会添加新的高斯椭球。首先,渲染 的颜色和深度。然后执行两项操作:删除冲突高斯点并添加必要的高斯点。视锥内深度或 RGB 损失较大的高斯点将被移除,同时投影半径过大的高斯点也将被删除。删除后重新渲染累积图,并根据深度信息在低累积区域添加新高斯点。新高斯点的数量与低累积像素区域的面积成比例。通过先冗余添加再选择性修剪,这种方法在性能上优于 GS-SLAM 的原始加密方法,尤其是在驾驶等前视场景中。

在添加新的高斯椭球后,我们从 VIO 前端的最新关键帧列表中随机采样帧进行训练。在训练过程中,损失函数 按照 2DGS中的公式计算:

每次训练迭代时,我们记录并更新当前关键帧列表中每个高斯点的局部贡献分数和误差分数。这些变量用于高斯点的管理,具体将在以下子章节中详细解释。

评分管理器

我们提出了一种评分机制来管理每个高斯椭球,包括状态控制(稳定/不稳定)、存储控制和 GPU-CPU 转移。详细的算法流程见算法 1。

对于给定的关键帧列表,我们为每个高斯点定义贡献分数和误差分数。目标是确保每个高斯点在对帧的贡献最大化的同时引入的误差最小化。贡献分数 表示高斯点 在所有关键帧中的总贡献,计算公式如下:

误差分数 代表高斯点在所有关键帧中引入的最大误差:

高斯点的状态由以上两个分数决定。例如,分数较低且状态为不稳定的高斯点会被移除,而分数较高的高斯点会被保留。通过这种机制,我们可以有效地管理高斯点的状态、存储和内存分配。

采样光栅化器

在原始高斯散点方法中,反向传播过程与前向传播对称。我们针对每个 GPU 块对一个瓦片(16×16 像素)进行操作,并对瓦片中的每个像素反向传播损失。然而,这种像素并行化策略在每个线程中需要多次迭代,导致效率较低。

我们引入了一种优化方案,在前向传播阶段对中间变量进行分块存储,并在反向传播阶段按块分配 GPU 计算资源,从而显著减少每个线程的迭代次数。此外,我们仅对每个瓦片中损失最高的像素进行反向传播计算(如设置为 50% 的像素),实现了 273% 的加速效果。

单帧到多帧位姿优化

现有基于 GS 的 SLAM 方法通常通过高斯点传递梯度来优化位姿。然而,这种方法效率较低。我们提出了一种改进方案,通过将单帧渲染误差反向传播到多个关键帧的位姿,从而实现全局优化。优化后的位姿替换视觉前端的位姿缓存,以便进一步优化。

新视角合成(NVS)闭环

在缺乏尺度信息的单目配置中,闭环对于消除累积误差至关重要,尤其是在大规模环境中。我们提出了一种基于高斯散点的新视角合成(NVS)闭环检测和修正方法。与传统的词袋(Bag-of-Words, BoW)方法不同,我们利用高斯散点的视角合成能力,从新视角判断是否存在闭环(详见 VI.A)。随后,我们通过图优化修正位姿,并利用高斯点的帧索引(frame index)修正 2D 高斯地图。

闭环检测

如图 4 所示,我们的闭环检测过程分为三个主要步骤:匹配特征点与历史帧、通过匹配的特征点和渲染深度计算相对位姿,以及利用新位姿生成新视角以确认闭环的存在。

  1. 特征点匹配
    我们在当前帧 的指定距离范围内,从历史帧 中提取特征点并进行匹配,同时保证这些历史帧与当前帧的帧索引差超过十帧。对于每个匹配成功的历史帧 ,我们记录成功匹配的特征点数量 。匹配点数超过阈值 的帧按匹配点数降序排列,记为集合

  2. 渲染深度与 PnP 求解
    我们按匹配点数的降序依次处理 。首先,利用当前帧 渲染深度图 。然后,通过匹配的特征点 使用透视-n-点(PnP)方法计算历史帧 与当前帧 之间的相对位姿 。随后,根据全局位姿公式 计算当前帧的全局位姿。注意,为避免 PnP 在深度值较大的特征点上产生不稳定性,仅选择深度值低于固定阈值的点参与计算。

  3. 新视角合成
    闭环检测的核心问题是判断两幅图像是否拍摄了同一场景。利用 3DGS 的视角合成能力,该问题可以转化为验证新捕获的图像是否能够作为高斯地图的一个新视角。通过计算新合成视角







请到「今天看啥」查看全文