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

点击下方卡片,关注“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. 最后,大城市环境中动态物体的存在带来了显著的伪影和噪声,进一步增加了优化的复杂性。

ca0e08fa2c9f40a681db13b2b1e9a155.jpeg

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

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

主要贡献

  • 首次提出了一个能够在室外运行并支持公里级城市场景的单目(惯性)GS-SLAM 系统。

  • 提出了一个包含采样光栅化器、评分管理器和从单帧到多帧位姿优化的 2D 高斯地图模块,确保我们的方法可以实时实现高精度定位和高质量高斯地图构建。

  • 引入了一种基于 GS 的闭环检测方法,以及一种高效的闭环修正方法,该方法能够在检测到闭环后,通过单次操作修正数千万个高斯属性,从而有效消除累积误差并确保地图的全局一致性。

  • 在不同场景(包括室内环境、无人机视角和驾驶场景)上进行了全面的实验,结果表明 VINGS-Mono 在渲染和定位性能方面均优于现有方法。此外开发了一款移动应用程序,并进行了真实场景实验,证明了方法的实际可靠性。

系统概述

0ba53b40bd9d3b6b5a2dc68c389ac3cb.jpeg

提出的框架管道如图 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% 的加速效果。

dc383c259927ae72874006cea126a439.png
单帧到多帧位姿优化

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

新视角合成(NVS)闭环

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

闭环检测
b8bc6f6af5d4f7d71c43e42c1959d7cd.png

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

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

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

  3. 新视角合成
    闭环检测的核心问题是判断两幅图像是否拍摄了同一场景。利用 3DGS 的视角合成能力,该问题可以转化为验证新捕获的图像是否能够作为高斯地图的一个新视角。通过计算新合成视角 与原始图像 的 L1 损失来直接评估闭环。如果颜色损失低于特定阈值或小于集合 中其他帧颜色损失中位数的十分之一,则视为检测到闭环。

闭环修正

在检测到闭环后以及建立相应的闭环约束后,我们需要修正历史关键帧的位姿和高斯地图。直接基于闭环约束优化高斯地图在大规模环境中并不可行,因为闭环误差通常较大。直接使用修正后的位姿重新训练高斯地图可能无法有效收敛。因此,我们采取以下两步进行修正:

  1. 高斯与位姿的配对
    对于所有历史关键帧,我们前向传播并顺序记录每个高斯点在每帧中的贡献分数。每个高斯点选择其最高贡献分数对应的关键帧位姿作为匹配位姿。由于渲染速度极快,该过程对 1000 帧的处理仅需约两秒。

  2. 修正位姿与高斯
    我们为所有历史帧 构建位姿图,并添加闭环约束以优化得到更新的全局位姿 。对于每个历史关键帧,根据修正前后位姿的平移向量模长比率计算其尺度。根据公式:

    更新每个高斯点的中心位置 和旋转 ,保持其他属性不变。随后,在所有历史关键帧上进行 100 次迭代的全局训练,并记录贡献分数 。最后,我们基于贡献分数进一步修剪高斯点,以优化存储开销。

动态物体擦除器

高斯散点的基本假设是场景是静态的。然而,在实际应用中,尤其是在大规模环境中,动态干扰物(如车辆或行人)是普遍存在的。以往的动态高斯散点方法通常用于离线训练环境,这些方法通过建模 4D 空间并训练高斯属性与时间之间的关系,以离线方式处理整个数据集。然而,这些方法并不适用于需要增量加载数据的 SLAM 系统。

考虑到 SLAM 的建图是一个在线过程,并且高斯散点具备新视角合成的能力,我们设计了一种基于启发式的分割方法,以识别动态物体的蒙版。

方法
  1. 语义分割生成初始蒙版
    首先,我们在整幅图像上应用一个加速的开集语义分割模型,生成一组语义蒙版 。

  2. 重渲染损失计算
    当一个新的关键帧 到达时,我们在添加新的高斯点之前,利用当前帧的位姿 渲染当前帧的颜色图 。接着,我们分别计算重渲染图与新关键帧之间的结构相似性(SSIM)损失和 L1 损失。SSIM 对纹理变化敏感,而 L1 损失对颜色值差异敏感。将两者相乘即可得出每个像素的重渲染损失:

    初始计算是逐像素进行的,随后取像素级损失的 90% 分位数,记为 。

  3. 动态区域蒙版生成
    对于纹理相对平滑的动态物体,重渲染损失主要集中在边缘区域。为更有效地识别动态物体,我们引入深度不确定性(详见 IV.C)来调整重渲染损失:

    通过以下条件筛选动态蒙版:

    其中, 表示蒙版内像素数, 设置为 20%。当语义蒙版的重渲染损失超过阈值 且损失高于蒙版中 20% 像素的 90% 分位数时,该区域被识别为动态物体蒙版。

  4. 动态物体的屏蔽
    对于识别出的动态物体区域 ,在新高斯点的添加及后续渲染过程中予以屏蔽,从而避免动态物体对高斯地图造成干扰。

实验效果
b05cabd7aa8962b87258982ff95a5bed.png

如图 5 所示,我们的动态物体擦除器能够有效过滤室内移动的人体和室外快速移动的车辆,防止动态伪影影响高斯地图。此外,与其他方法相比,动态物体擦除器提高了 SLAM 系统在动态场景下的稳定性和鲁棒性。

实验效果

159af1c808a7d008476e07e53fd24039.png 8e7d6b002ae1a7ab4b3e40660a778eae.jpeg c56f809ff5c79a45e9a13bd7ae575ff8.png df936ed78e995d77d6d48e044af833b9.png fe33c47a3d0bb2c14b178dca16f53788.jpeg

总结一下

VINGS-Mono是一种单目(惯性)高斯散点SLAM框架,该框架通过四个主要模块(VIO前端、2D高斯地图、NVS闭环检测和动态擦除器)解决了大规模场景中SLAM系统面临的挑战。实验表明,该方法不仅在定位精度上达到或超越现有方法,还在建图和渲染质量方面显著优于其他方法。此外,该方法还支持通过智能手机进行实时高质量高斯地图生成。

未来工作

  • 进一步优化动态擦除器以适应更复杂的动态场景

  • 扩展框架以支持更多传感器配置。

参考

[1] VINGS-Mono: Visual-Inertial Gaussian Splatting Monocular SLAM in Large Scenes

本文仅做学术分享,论文汇总于『3D视觉之心知识星球』,欢迎加入交流!

【3D视觉之心】技术交流群

3D视觉之心是面向3D视觉感知方向相关的交流社区,由业内顶尖的3D视觉团队创办!聚焦维重建、Nerf、点云处理、视觉SLAM、激光SLAM、多传感器标定、多传感器融合、深度估计、摄影几何、求职交流等方向。扫码添加小助理微信邀请入群,备注:学校/公司+方向+昵称(快速入群方式)

43d48a4c951e5f2dc8910b818df47503.jpeg

扫码添加小助理进群

【3D视觉之心】知识星球

3D视觉之心知识星球主打3D感知全技术栈学习,星球内部形成了视觉/激光/多传感器融合SLAM、传感器标定、点云处理与重建、视觉三维重建、NeRF与Gaussian Splatting、结构光、工业视觉、高精地图等近15个全栈学习路线,每天分享干货、代码与论文,星球内嘉宾日常答疑解惑,交流工作与职场问题。

b55a2017e62c6bc1f8756a899d4d7038.jpeg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值