专栏名称: 点云PCL
公众号将会推送基于PCL库的点云处理,SLAM,三维视觉,高精地图相关的文章。公众号致力于理解三维世界相关内容的干货分享。不仅组织技术交流群,而且组建github组群,有兴趣的小伙伴们可以自由的分享。欢迎关注参与交流或分享。
目录
相关文章推荐
高校人才网V  ·  招聘日报丨高校人才网2025年1月24日招聘 ... ·  2 天前  
高校人才网V  ·  上海立达学院2025年人才招聘公告 ·  2 天前  
青塔  ·  湖南工商大学2025年诚聘海内外英才 ·  昨天  
NXTV都市阳光  ·  【阳光•关注】@大学生,这条消息跟你有关! ·  昨天  
51好读  ›  专栏  ›  点云PCL

GEVO: 基于高斯的内存高效单目视觉里程计

点云PCL  · 公众号  ·  · 2024-11-08 08:49

正文

文章:GEVO: Memory-Efficient Monocular Visual Odometry Using Gaussians

作者:Dasong Gao, Peter Zhi Xuan Li, Vivienne Sze, Sertac Karaman

编辑:点云PCL


欢迎各位加入知识星球,获取PDF论文,欢迎转发朋友圈。 文章仅做学术分享,如有侵权联系删文。

公众号致力于点云处理,SLAM,三维视觉,高精地图等领域相关内容的干货分享,欢迎各位加入,有兴趣的可联系[email protected] 文章未申请原创 侵权或转载 联系微信cloudpoint9527。

摘要


构建使用单目相机的高保真3D场景表示可以在移动设备(如微型机器人、智能手机和AR/VR头戴设备)上实现广泛的应用。然而,这些设备的内存通常有限,且内存访问往往主导计算能耗。虽然高斯点云(Gaussian Splatting,GS)可以实现高保真的3D场景重建,但当前基于GS的SLAM并不具备内存效率,因为为了减少“灾难性遗忘”,需要存储大量的过去图像以重新训练高斯分布。这些图像的内存需求通常是地图本身的数百倍,从而占用了大部分的总内存。在本研究中,我们提出了GEVO,一种基于GS的单目SLAM框架。GEVO通过从现有地图中渲染图像(而不是存储图像)来实现与以往方法相当的保真度。我们还提出了新的高斯初始化和优化技术,来消除地图中的伪影并延迟渲染图像随时间退化的现象。在各种环境下,GEVO在保持相当的地图保真度的同时,将内存开销降低到约58MB,相比以往方法最多降低了94倍。

图1:在在线SLAM过程中,地图通过图像的滑动窗口缓冲区进行优化。a) 当前滑动窗口可见的区域在初始优化后能够达到高保真度。b) 然而,如果不存储和重新训练大量过去的图像,该区域的保真度会随着时间的推移因为遗忘效应而下降(矩形中的伪影)。c) 为了缓解遗忘问题,我们的GEVO框架避免了存储过去的图像,从而减少内存开销。d) 为了实现类似的地图保真度,MonoGS [3] 会存储所有过去的关键帧,导致其内存开销至少是地图大小的50倍。

主要贡献



本文提出了一种内存高效的SLAM框架,称为GEVO,通过从现有地图中渲染过去的图像,而不是将其存储在内存中,从而显著减少了内存开销。然而,渲染的图像保真度低于原始图像,并且由于地图中的伪影和遗忘效应,它们的质量可能会随着时间逐渐下降。因此,仅依赖这些图像来指导GS(高斯点云)优化不足以构建高保真的地图。为了确保渲染的图像能够保持高保真度,我们提出了新的GS初始化和优化程序,以减少由灾难性遗忘引起的遮挡和过拟合问题,具体如下:

  • 占用保持初始化:为减少错误的遮挡,位于无障碍区域内的高斯分布(例如图2a中蓝色区域内的橙色高斯)会被修剪。因此,除了表示障碍物外,代表空闲区域的高斯也会被初始化,以识别错误的遮挡。

  • 一致性感知优化:为减少地图对当前窗口的过拟合,我们只优化那些不一致且对相机可见的高斯分布子集(见图2b中的橙色高斯)。为了确保渲染的图像保持高保真度,我们首先局部优化由当前滑动窗口产生的噪声高斯分布,然后将它们合并到地图中进行全局优化。

内容概述


本文介绍了GEVO,一个基于高斯分布(GS)的内存高效单目SLAM框架,通过依赖从地图渲染的图像来指导GS优化过程,以减少灾难性遗忘。回顾一下,在线SLAM通过图像的滑动窗口进行定位和建图。当从当前窗口创建的高斯覆盖了过去窗口中的高斯时,灾难性遗忘可能会发生。正如图2a所示,不一致性是由回溯遮挡(RO)引起的,此时当前视图中的高斯(橙色)位于先前视图的无障碍区域(蓝色)内。

完全遗忘还可能发生在先前滑动窗口观察到的区域过度拟合当前滑动窗口的图像时。正如图2b所示,过拟合是由不完全射线遮挡(IRO)引起的,此时与当前视图相关的高斯(红色)未完全遮挡传感器射线(蓝色),因此先前视图创建的高斯(橙色)仍然部分可见,其参数会更新以匹配当前视图的外观。在先前的工作中,通过存储所有滑动窗口中的图像来重新训练高斯,从而减少RO和IRO。这些图像通常占据了总内存的主要部分,且内存需求会随着时间增长。

图2:在高斯分布中导致灾难性遗忘的两种情况:a) 回溯遮挡 (RO) 和 b) 不完全射线遮挡 (IRO)。RO 导致新的高斯遮挡过去视图中的高斯(图1b中的红色矩形)。IRO 导致现有的高斯过度拟合当前视图(图1b中的绿色矩形)。

仅仅用从现有地图渲染的图像替换过去滑动窗口中的图像不足以减少灾难性遗忘。特别是,这些渲染图像的保真度会随着时间推移因地图中的伪影而逐渐下降。因此,我们的框架部署了贯穿整个高斯初始化和优化过程的技术,以减少遗忘。为了减少RO,我们的框架包含一种准确的高斯初始化过程,该过程紧凑地编码了无障碍区域。利用这些区域来识别新高斯遮挡现有高斯的情况,并在优化结束时进行修剪。为了减少IRO,我们提出了一个两阶段优化过程,用于更新当前滑动窗口中既不一致又足够可见的小部分高斯,以避免其余高斯过度拟合当前窗口。

保持占用初始化

这里介绍了一种高效的过程,用于初始化当前滑动窗口中代表障碍物和无障碍区域的高斯参数。无障碍区域用于剪除导致回溯遮挡 (RO) 的高斯(如图 2a 所示)。为了在不同环境中实现计算效率和良好的泛化性,我们的过程借鉴了一种高效的多视图立体实现,而不依赖耗时的 COLMAP 或较不准确的随机采样方法。图 3 总结了流程。

图 3:保持占用初始化。给定滑动窗口缓冲区中最近获取的一组关键帧和位姿,通过在四分之一分辨率的光度代价体积上进行信念传播,计算出最新关键帧的深度图。随后,使用深度图和 RGB 图像,通过 SPGF* 算法 [25] 初始化一组高斯 (Gt),用于表示障碍物(红色)和无障碍区域(蓝色)。无障碍区域的高斯通过多个关键帧进行融合,以在一致性优化过程中识别回溯遮挡 (RO) 的实例。

给定滑动窗口中的一系列 RGB 关键帧,我们构建了一个代价体积,用于捕捉最近图像中每个像素在不同深度假设下的光度一致性。通过代价体积,利用信念传播 (BP) 提取与最近图像相关的深度图像。最终,障碍物(红色)和无障碍区域(蓝色)的高斯参数通过高效的 SPGF* 算法计算得出。 该过程可以与多种定位和关键帧选择策略结合,例如 MonoGS 中的地图中心直接方法和 ORB-SLAM 中的基于特征的方法。以下是详细描述:

1. 代价体积生成:给定滑动窗口缓冲区中的 N=8 或 10 帧关键帧 (I0, . . . , IN-1),代价体积 V(u, d) 表示像素 u 在最近帧 IN-1 中,当深度假设为 d 时的光度代价。代价体积通过计算最近帧与其余帧之间的像素差异来确定,假设深度 d。在实验中,我们选择了 64 个均匀分布的深度假设,从 0.25 米到 25 米。为了减少内存开销,我们将图像的每个维度缩小 4 倍,利用图像中的空间冗余。假设每幅图像的高度 H=480,宽度 W=640,生成的代价体积只需要 4.7MB 内存。任何潜在的空间细节损失将在接下来的步骤中通过上采样恢复。

2. 高斯生成:从代价体积中提取最近关键帧的深度图像后,我们使用 SPGF* 算法生成一组代表障碍物(红色)和无障碍区域(蓝色)的高斯(如图 3 所示)。与以前的多次处理深度图像的方法不同,SPGF* 利用深度图像中的连通性,一次性生成高斯,且精度相当。为了提高颜色表示的精度,我们修改了 SPGF*,确保每个高斯只代表具有相似颜色的表面。

一致性优化


在初始化高斯后,它们被融合到全局地图中,如图 4 所示。回想一下,我们的初始化过程构建了一组高斯 (Gt),表示从当前关键帧可见的障碍物和无障碍区域。在将新高斯整合到现有地图中时,出现了两个挑战:i) 由于这些高斯可能是嘈杂的,它们插入地图可能导致回溯遮挡 (RO);ii) 在优化过程中,由于缺乏来自过去视图的约束,可能会同时出现不完整光线遮蔽 (IRO) 和 RO。在以往的工作中,通过在从过去滑动窗口中采样的关键帧上训练高斯来解决这两个问题。而在我们的工作中,我们依赖于从现有地图渲染的过去关键帧,以减少内存开销。

图 4:一致性优化。给定新初始化的高斯 (Gt),我们在两个阶段执行基于高斯的优化:i) 局部阶段执行高斯优化以优化一个代表从滑动窗口可见的所有几何体的局部地图 Mft;ii) 全局阶段选择性地优化一个由局部地图 Mft 和具有高渲染误差的现有高斯 Et 组成的小型活动集 At(绿色)。这种活动集的选择倾向于排除在训练中被相机视图遮挡的高斯,从而减少 IRO。由于来自局部地图的高斯足够准确,随机选择的过去视图中的图像从全局地图中渲染,以指导全局优化阶段。最后,在初始化期间创建的无障碍区域(蓝色)帮助剪除导致 RO 的高斯。注意,除了剪枝步骤外,全局阶段中省略了代表无障碍区域的高斯,以便于可视化。

然而,这些渲染图像的保真度会随着时间的推移而下降,这会导致地图本身的显著降解。为了保持这些图像的保真度,我们采用了两阶段优化,首先在局部阶段提高初始化高斯的保真度,然后在全局阶段与其他现有高斯进行优化。由于在局部阶段现有高斯没有被扰动,我们可以通过渲染高保真度地恢复过去关键帧的颜色。为了减少 IRO,我们优化一小部分在当前滑动窗口中不一致且可见的高斯。此外,通过查询代表无障碍区域的高斯,可以检索由过去关键帧编码的无障碍信息,从而进一步通过基于占用率的剪枝减少 RO。

1. 局部阶段:在局部阶段,初始化的高斯 Gt 与从当前滑动窗口也可见的其他高斯 Mft−1 结合,以形成更新的局部地图 Mft。由于局部地图包含最近初始化的高斯,因此可能存在噪声。为了增强其保真度,通过仅使用当前滑动窗口中的图像进行优化,采用以下代价函数。

2. 全局阶段:在局部地图 Mft 中的高斯优化后,它们可以更准确地表示环境。为了解决与先前测量的剩余不一致性并增强地图的紧凑性,我们将高斯 Mft 合并到全局地图 Mt−1 中。在合并过程中,我们通过使用从这些视点渲染的关键帧来识别和更新在过去视点中时间上不一致的一小部分高斯,从而减少灾难性遗忘。由于全局地图 Mt−1 在局部阶段没有被扰动,因此来自 Mt−1 的渲染关键帧保持高质量,足以解决剩余的不一致性。全局阶段由以下三个连续步骤组成:插入、选择性优化和剪枝。我们将详细描述它们。

插入和激活:将局部地图 Mft 和先前的全局地图 Mt−1 插入,以创建预优化全局地图:M′t ← Mft ∪ Mt−1。为了防止局部地图 Mft 导致的回溯遮挡 (RO),我们在插入前将其不透明度降低到 0.2。

选择性优化:我们采用类似于上述代价函数的优化过程,但进行了两项修改:1) 为了防止预优化地图 M′t 中的高斯对当前滑动窗口缓冲区 Wt 中的图像过拟合,我们选择并仅优化一个活动子集 At ⊆ M′t,2) 此外,我们还引入了一种光度一致性损失 Epc,以进一步确保与先前全局地图 Mt−1 的一致性。因此,总体目标为:

剪枝:在选择性优化之后,我们剪除仍然导致 RO 的更新高斯。这些高斯的识别标准是 a) 不透明度小于 0.7 或 b) 占用概率小于 0.9。占用概率是通过对来自第三节的无障碍区域初始化高斯进行高斯混合回归计算的。

实验



这里评估 GEVO 框架在准确性和内存开销方面与最先进的单目密集 SLAM 方法的对比。为了进一步展示不同系统配置之间的权衡,我们选择了以下框架:GO-SLAM(基于学习的跟踪 + 基于神经网络的映射)、MonoGS(直接跟踪 + 基于高斯的映射)和 Photo-SLAM(基于特征的跟踪 + 基于高斯的映射)。与多个环境中的先前方法相比,GEVO 在保持可比准确性的同时,降低了 8-145 倍的内存开销(见图 5)。

图 5:GEVO 和其他单目方法在 Replica 和 TUM-RGBD 上的渲染结果示例。与之前的工作相比,GEVO 保持了兼容的地图保真度(请参见绿色矩形中高细节水平的区域)。

实验设置

GEVO 是用 C++ 和 CUDA 加速实现的,代码可在 https://github.com/mit-lean/gevo 找到。我们在 Intel Xeon Gold 6130 和 NVIDIA TITAN RTX GPU 上对 GEVO 和先前方法进行了基准测试。我们使用一个滑动窗口缓冲区,存储 8(TUM)或 10(Replica)个关键帧。对于先前的方法,我们使用开源代码发布时支持数据集的默认设置,或从默认设置进行微调。我们的方法与多种跟踪方法兼容。为了公平起见,我们展示 GEVO 的两个变体的结果:Ours (Direct) 使用 MonoGS 的光度跟踪,而 Ours (ORB-SLAM) 使用 ORB-SLAM 进行跟踪,类似于 Photo-SLAM。对于 Photo-SLAM 和 Ours (ORB-SLAM),我们禁用了环闭合,并将 ORB 词汇的下采样比例设置为原始的 1/100,以减少内存使用而不牺牲准确性。对于所有基于高斯的方法,我们禁用了球谐函数。

我们在 Replica(一个提供无噪声 RGB 图像以估计方法性能上限的高度详细合成数据集)和 TUM RGB-D(用于测试方法在 Kinect 相机产生的噪声图像下的表现的真实世界数据集)上对所有框架进行了基准测试。与之前的工作类似,我们从 Replica 中选择了八个序列:办公室 0-4 和房间 0-2,以及从 TUM RGB-D 中选择的三个序列:fr1 desk、fr2 xyz 和 fr3 office。

内存使用

这里展示 GEVO 和比较框架的内存使用结果和分析。总内存包括:1)地图,即生成的 NeRF 或高斯的大小;2)开销,即在执行过程中存储输入和临时变量以生成输出(地图)所需的额外内存。请注意,开销内存在很大程度上取决于算法及其实现。为了减少实现的影响,我们只跟踪对算法至关重要的变量,避免缓存仅用于加速的变量。

GEVO 和其他方法的开销内存汇总在表 I 中。总体而言,GEVO 在 Replica 上的平均开销内存为 83.5 MB,在 TUM 上为 31.4 MB,这主要由当前窗口中存储的关键帧占据。在 MonoGS 和 Photo-SLAM 中,存储了来自当前和过去窗口的许多关键帧,以定期训练高斯,减少灾难性遗忘。在这些框架中,关键帧占据了开销内存的 96% 到 99%。通过仅存储当前滑动窗口中的图像,GEVO 在 TUM 上平均减少了 114 MB 的开销内存,与 MonoGS 和 Photo-SLAM 相比。由于 Replica 上的图像分辨率高出 2.65 倍,GEVO 实现了更高的开销内存减少(平均 480 MB)。

在所有基准测试的方法中,GO-SLAM 的开销内存最高,因为除了所有关键帧图像外,还存储了大量临时变量。具体而言,GO-SLAM 计算多个特征图之间每对像素的 4D 相关体以获得光流,使用 DROID-SLAM 派生的跟踪器。4D 相关体的大小至少为 1 GB,贡献了 50% 到 60% 的开销内存。因此,与 GO-SLAM 相比,GEVO 在 Replica 上最多减少 53 倍,在 TUM 上最多减少 168 倍。

从表 I 可以看出,所有先前框架的地图内存仅占总内存的一小部分(0.5% 到 2.4%)。因此,每个框架的总内存主要由开销内存主导,这是我们的框架所解决的。请注意,基于高斯的框架(GEVO、MonoGS 和 Photo-SLAM)中的地图由高斯组成,其数量与环境的大小成比例。而 GO-SLAM 是一种基于神经网络的方法,其网络大小无法适应环境的大小。因此,GO-SLAM 在两个数据集上的地图大小恒定为 48 MB,这比基于高斯的框架在两个数据集上高出 4.7 到 124 倍。

渲染和定位精度

将 GEVO 的准确性与先前的方法进行比较。与之前的方法类似,我们计算了每五个非关键帧的渲染图像与原始 RGB 图像之间的 PSNR、SSIM 和 LPIPS 指标,并报告了关键帧的平均平移误差(ATE)的 RMSE。如表 I 所示,我们的框架在使用 ORB-SLAM 进行定位时,在几乎所有序列中实现了第二好的渲染准确性和可比的定位准确性,比较对象是表现最好的 Photo-SLAM 方法。通过使用来自地图的渲染图像,以及我们的初始化和优化程序,GEVO 在 Replica 上的 PSNR 较 Photo-SLAM 下降了 3 dB,在 TUM 上下降了 2 dB。由于我们的框架与多种定位方法兼容,我们配置了与 MonoGS 相同的直接定位方法进行比较。由于基于传统多视图立体的更几何验证的高斯初始化程序,我们的框架较 MonoGS 更不容易产生较大的 ATE,后者使用来自全球地图的先验随机初始化高斯。得益于我们的一致性优化,比较 MonoGS 时,我们的框架在超过一半的序列中通常能提供更好的渲染准确性,而不需要在内存中存储最多 300 个关键帧进行训练。

图 5 显示了基准序列的示例渲染。GEVO 的渲染与 Photo-SLAM 相比几乎没有视觉差异,并且比 MonoGS 更少出现伪影。尽管具有强大的定位能力,GO-SLAM 显示出最明显的伪影,尤其是在 TUM 上,那里存在运动模糊和光照变化。

消融研究

展示了我们提出的技术在减轻灾难性遗忘方面的影响。为了测量遗忘,我们评估每个关键帧在从滑动窗口中撤出后的渲染 PSNR,以及在完整序列处理后标记为初始 PSNR 和最终 PSNR。表 II 显示了在 TUM 数据集的三个序列中,所有关键帧的初始和最终 PSNR 的平均值。为了避免定位对地图保真度的影响,我们使用了真实轨迹。

在没有使用当前滑动窗口之外的任何图像进行重新训练的情况下(表 II 的最左列),关键帧的渲染质量由于灾难性遗忘而显著下降(见图 1b)。仅仅用渲染的图像替换存储的图像(第 2 列)就显著提高了最终 PSNR。然而,由于渲染图像的保真度随时间下降,单独使用它们不足以有效减少遗忘(第 3-6 列)。所有技术结合后,最终的平均 PSNR 恢复到 19 dB(见图 1c),这仅比使用原始图像存储和训练的结果低 0.4 dB。尽管每个附加技术由于更强的正则化而逐渐降低初始 PSNR,但它们在优化过程中倾向于减轻遗忘。因此,结合我们的所有技术,能够恢复大部分由于不存储和重新训练原始历史图像而造成的保真度损失。

总结


本文介绍了 GEVO,这是一种基于高斯的单目 SLAM,具有内存高效性,能够避免因传感器遮挡不全(IRO)和回顾性遮挡(RO)导致的灾难性遗忘,而无需存储过去的图像。通过使用渲染图像来指导优化,并引入保持占用的初始化和一致性优化以保持图像的保真度,整个序列中的地图一致性得以维持。在 TUM 和 Replica 数据集上的实验表明,GEVO 在保持与最先进方法相当的渲染准确性的同时,将内存开销降低到 58 MB,比先前的方法低达 94 倍。因此GEVO 在将基于高斯的 SLAM 部署到移动设备上方面迈出了重要一步。

资源

自动驾驶及定位相关分享

【点云论文速读】基于激光雷达的里程计及3D点云地图中的定位方法

自动驾驶中基于光流的运动物体检测

基于语义分割的相机外参标定

综述:用于自动驾驶的全景鱼眼相机的理论模型和感知介绍

高速场景下自动驾驶车辆定位方法综述

Patchwork++:基于点云的快速、稳健的地面分割方法

PaGO-LOAM:基于地面优化的激光雷达里程计

多模态路沿检测与滤波方法

多个激光雷达同时校准、定位和建图的框架

动态的城市环境中杆状物的提取建图与长期定位

非重复型扫描激光雷达的运动畸变矫正

快速紧耦合的稀疏直接雷达-惯性-视觉里程计

基于相机和低分辨率激光雷达的三维车辆检测

用于三维点云语义分割的标注工具和城市数据集

ROS2入门之基本介绍

固态激光雷达和相机系统的自动标定







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