RTG-SLAM:使用高斯Splatting进行大规模实时 3D 重建

SIGRAPH 24年4月来自浙大等的论文 “RTG-SLAM: Real-time 3D Reconstruction at Scale Using Gaussian Splatting”。

实时高斯-SLAM (RTG-SLAM),是一种使用高斯splatting的 RGBD 摄像机大规模环境实时 3D 重建系统。该系统具有紧凑的高斯表示和高效的动态高斯优化方案。强制每个高斯都是模糊的或几乎透明的,模糊的高斯适合表面和主颜色,透明的高斯适合残差色。以不同于颜色渲染的方式渲染深度,让单个模糊高斯很好地适合局部表面区域,而无需多个重叠的高斯,从而大大降低内存和计算成本。对于动态高斯优化,明确为每帧的三种类型像素添加高斯:新观察的、有大颜色误差的和有大深度误差的。还将所有高斯分为稳定和不稳定两类,其中稳定高斯预计可以很好地拟合先前观察的 RGBD 图像,拟合不了的就算不稳定。只优化不稳定高斯,只渲染不稳定高斯占据的像素。这样,需要优化的高斯数量和需要渲染的像素数量都大大减少,并且可以实时进行优化。

大规模实时 3D 重建是计算机图形学和视觉领域长期研究的问题,在 VR/AR、自主机器人和具有即时反馈的交互式扫描等众多应用中都至关重要。随着 RGBD 相机(如 Microsoft Kinect)的普及,人们提出了不同的 RGBD SLAM方法进行实时 3D 重建,使用各种表面表示,如点云 [Du et al. 2011]、面元 [Keller et al. 2013; Whelan et al. 2015] 和符号距离函数 [Newcombe et al. 2011]。这些方法能够实时重建具有高质量 3D 表面的大规模场景 [Dai et al. 2017; Nießner et al. 2013; Steinbrücker et al. 2013]。但它们主要关注 3D 重建的几何精度,很少考虑重建结果的渲染真实感。

一些工作尝试使用NeRF作为密集 RGBD SLAM 的隐式场景表示 [Mildenhall et al. 2020],希望实现高质量的几何和外观重建。这些方法通常将场景表示为 MLP 网络 [Sucar et al. 2021a] 或隐式网格 [Yang et al. 2022; Zhu et al. 2022a],通过可微分体渲染,优化场景参数并估计相机姿势。然而,由于体渲染成本昂贵,这些方法难以达到实时性能。此外,高内存成本使得它们很难处理大规模场景。

最近,3D 高斯 [Kerbl et al. 2023] 作为辐射场的替代表示出现,它可以实现与以前 NeRF 相同或更好的渲染质量,同时渲染和训练速度更快。然而,到目前为止,三维高斯表示主要用于离线重建场景 [Chung et al. 2024; Yang et al. 2023],不适用于具有序贯 RGBD 输入的在线重建任务。要将其用于大规模实时三维重建,核心问题在于如何以低内存和计算成本表示场景,以及如何实时执行在线高斯优化。有几项并发的工作 [Huang et al. 2023b; Keetha et al. 2023; Matsuki et al. 2023; Yan et al. 2023; Yugay et al. 2023] 尝试将高斯函数融入 RGBD SLAM 系统,该系统使用高斯函数的不同场景表示以及不同的在线优化策略。虽然已经展示了有希望的结果,但要实现大规模场景的实时重建还有很长的路要走。

目前有一些同时进行的工作旨在将 3D 高斯集成到密集 RGBD SLAM 中。3D 高斯 [Kerbl et al. 2023] 可以实时渲染高质量图像,但优化是离线进行的,通常需要几分钟。为了将高斯扩展到在线重建,[Yan et al. 2023] 提出了一种自适应扩展策略添加新的或删除嘈杂的 3D 高斯,以及一种从粗到细的技术来选择可靠的高斯进行跟踪。[Yugay et al. 2023] 提出撒种子和优化高斯 splats 的新策略,以将其用途扩展到序贯 RGBD 输入。SplaTAM [Keetha et al. 2023] 定制了一个在线重建流水线,使用底层高斯表示和可微分渲染进行轮廓引导优化。 [Matsuki et al. 2023] 统一高斯表示,实现准确、高效的跟踪、映射和高质量渲染。[Huang et al. 2023b] 引入一种基于高斯金字塔的训练方法,逐步学习多级特征并提高映射性能。虽然结果很有希望,但实现大规模实时重建仍然很困难。据报道,在合成的 Replica 数据集 [Straub et al. 2019] 上,NVIDIA RTX 4090 GPU [Matsuki et al. 2023] 的最快重建速度为 8.34 fps。也没有在真实的大场景上展示完整的重建结果。

得益于紧凑的高斯表示和高效的高斯优化策略,本文方法可以以较低的内存成本实时重建真实的大场景。

如图是方法概述。左图:强制每个高斯函数模糊或几乎透明,并且使用模糊高斯函数以不同于颜色的方式渲染深度,这样单个模糊高斯函数就可以很好地拟合表面的局部区域,从而产生一个紧凑的高斯表示,以更少量的高斯函数拟合 3D 表面。右图:计算颜色误差图、深度误差图和光透射图,以确定在何处添加模糊高斯函数或透明高斯函数。仅优化不稳定的高斯函数,并且仅渲染它们占用的像素以进行优化。

请添加图片描述

用一组 3D 高斯函数 {𝐺𝑖 } 来表示场景 S。与 [Kerbl et al. 2023] 类似,每个高斯函数都与位置 p𝑖、协方差矩阵 𝚺𝑖、模糊度 𝛼𝑖 和球谐函数 (SH) 系数 SH𝑖 相关联。协方差矩阵 𝚺𝑖 分解为尺度向量 s 和四元数 q。每个高斯函数在添加后确定一次,使其模糊的(𝛼 = 0.99)拟合 3D 表面和主色,或使其几乎透明的(𝛼 = 0.1)拟合残差色。

将每个高斯视为一个椭球面(或面元素),面元素参数包括法线 n𝑖 、置信度计数 𝜂𝑖 和初始化时间戳 𝑡𝑖 。法向量定义为最小特征向量的方向。面元素的形状定义为高斯主平面上高斯密度大于 𝛿𝛼 = 𝑒^-0.5 的区域,对应于高斯分布标准差内的密度范围。𝜂 记录高斯优化的频率,𝑡 记录高斯创建的时间。还根据置信度计数阈值 𝛿𝜂 将高斯分布分成稳定分布 S𝑠𝑡𝑎𝑏𝑙𝑒 和不稳定分布 S𝑢𝑛𝑠𝑡𝑎𝑏𝑙𝑒。所有参数都存储在高斯索引 𝑖 记录的平面数组中。

优化高斯的核心在于通过可微分splatting渲染颜色和深度图,计算输入 RGBD 图像的误差,以及更新高斯参数。

给定相机姿态 T𝑔 和相机本征矩阵 K,通过图像中每个像素 u 中心的光线定义为:

请添加图片描述

颜色图像的渲染通过alpha混合:

请添加图片描述

𝑓𝑖 (𝑥 ) 由像素空间中 2D splatted 高斯的中心 𝝁𝑖 和协方差矩阵 𝚺2𝐷,𝑖 计算得出:

请添加图片描述

一个决定能见度的光线投射图像如下渲染:

请添加图片描述

深度渲染是紧凑高斯表示的关键,其中每个高斯都可以很好地拟合表面的局部区域,而无需多个高斯。注:所有并发高斯 SLAM 工作都利用 alpha 混合方法将深度渲染为颜色。但是,如图所示,在 alpha 混合设置中,单个高斯将建成从高斯中心降低的不同深度值,只是近似为平面是不准确的。

请添加图片描述

为此,渲染深度的方式与渲染颜色的方式不同。也就是说,对于每个像素,计算视线与最前方模糊椭圆盘(ellipse disc)的交点以获得像素的深度。幸运的是,不需要明确将高斯转换为椭圆盘并计算每条光线的交点。在颜色渲染过程中,所有与光线 r(u) 相交的高斯函数 {𝐺rj} 都已从前到后排序,并计算沿光线的相应模糊度 {𝛼r𝑗 }。相交的高斯函数 𝐺r𝑗 是第一个满足 𝛼r𝑗 > 𝛿𝛼 的高斯函数。交点可以通过光线平面相交公式计算:

请添加图片描述

如果所有 {𝛼r𝑗 } 都小于 𝛿𝛼 ,则像素深度设置为 -1。当圆盘法线和光线几乎垂直时,光线平面相交可能导致像差(aberrations),用 pr𝑗 来近似相交。最后,深度图 Dˆ 定义为:
请添加图片描述

显然,这个渲染的深度是通过高斯函数的位置和旋转做线性计算而来的,而该计算过程是完全可微分的,因此可以从深度图像损失来优化高斯函数。此外,基于光线与椭球相交的结果,还得到了法线图Nˆ(u)和索引图Iˆ(u),其中存储各个高斯函数的法线和索引。Nˆ(u)用于执行帧-到-模型的ICP以进行摄像机跟踪,而Iˆ(u)提供从像素到高斯函数的一一映射,用于后续的高斯添加和状态管理等过程。

在线重建系统包以下阶段:

1 图像预处理:计算局部顶点图和局部法线图。利用估计的相机姿态, 将其转换到全局坐标。

2 高斯添加:为了获得环境的完整表示,需要在线扫描时向场景添加新高斯函数以覆盖新观察的区域。[Kerbl et al. 2023] 中基于视图空间位置梯度的高斯自适应控制方法,对在线扫描效率低下。因此,这里采用基于几何和外观的更高效、更可靠的高斯添加策略。具体而言,给定估计的相机姿势 T𝑔,𝑘,使用场景中现有的高斯函数,渲染颜色图 Cˆ𝑘、深度图 Dˆ𝑘、光透射图 Tˆ𝑘 和索引图 Iˆ𝑘。然后创建一个掩码 𝑀 来确定应该为哪个像素添加高斯:

请添加图片描述

采用的策略是,在 𝑀𝑠 和 𝑀𝑐 上均匀采样 5% 的像素来执行高斯添加。对于从 𝑀𝑠 采样的像素,为它们添加高斯以适应新观察的表面,并将模糊度设置为 0.99。对于从 𝑀𝑐 采样的每个像素,它已经与场景中现有的模糊高斯相关联,用索引图 Iˆ𝑘 查询该高斯并检查其置信状态。如果不稳定,这意味着高斯可以进一步优化以适应颜色,不会为该像素添加新的高斯。否则,添加一个透明的(𝛼 = 0.1)高斯,与稳定的高斯一起纠正颜色错误。

使用透明高斯的好处在于,这种模糊度较低的高斯不会造成明显的光能衰减,对其他视图的颜色影响也小,并且在深度渲染时会被𝛿𝛼自动过滤掉,因此不会影响深度渲染。所有添加的高斯都以像素的颜色、位置和法线初始化为细的圆盘,置信度计数𝜂 = 0,时间戳𝑡 = 𝑘。对于模糊高斯,其大小初始化尽可能覆盖场景且重叠性较小,而透明高斯的半径限制在0.01m以下,消除对其他像素渲染结果的干扰。

3 高斯优化:在为时间窗口内的帧添加高斯后,根据输入和渲染的 RGBD 图像之间颜色损失和深度损失,启动高斯优化。

4 状态管理:另一个关键步骤是S𝑠𝑡𝑎𝑏𝑙𝑒和S𝑢𝑛𝑠𝑡𝑎𝑏𝑙𝑒之间的相互转换以及错误高斯分布的删除。

5 摄像头跟踪:利用帧-到-模型 ICP 作为相机跟踪的前端里程计。具体来说,用前一帧中优化的高斯分布来渲染深度图 Dˆ∗𝑘−1 和法线图 Nˆ∗𝑘−1,并将 Dˆ∗𝑘−1 转换到全局空间 V𝑔∗ˆ𝑘−1。然后给定当前帧 V𝑘,跟踪的目标是找到最小化 3D 反投影顶点之间的点-到-平面误差的相机姿势估计。

6 关键帧和全局优化:在全局优化中,进一步优化全局场景中的高斯函数。关键帧选择策略受到 [Cao et al. 2018] 的启发。关键帧列表是基于相机运动构建的。如果相对于最后一个关键帧的旋转角超过阈值 𝛿𝑎𝑛𝑔𝑙𝑒,或者相对平移超过 𝛿𝑚𝑜𝑣𝑒,会添加一个新的关键帧。在实验中使用 𝛿𝑎𝑛𝑔𝑙𝑒 = 30◦ 和 𝛿𝑚𝑜𝑣𝑒 = 0.3m。每当添加一个新关键帧时,会使用最新关键帧和三个随机选择的关键帧优化 S 中的所有高斯函数。

在配备英特尔 i9 13900KF CPU 和 Nvidia RTX 4090 GPU 的台式计算机上实现了 SLAM 系统。用 Pytorch 框架在 Python 中实现了制图和跟踪部分,并编码了自定义 CUDA 内核进行光栅化和反向传播。用 Azure Kinect 作为 RGBD 相机进行实时扫描。

对三个公共数据集进行了实验:Replica [Straub 2019]、TUM-RGBD [Sturm 2012]、ScanNet++ [Yeshwanth 2023] 和自家扫描的 Azure 数据集。Replica 是最简单的基准,因为它包含合成的、高度准确和完整的 RGBD 图像。TUM-RGBD 是 SLAM 领域中广泛使用的数据集,用于评估跟踪精度,因为它可以从外部运动捕捉系统提供准确的相机姿势。ScanNet++ 是一个大规模数据集,结合了室内场景高质量、商品级的几何和颜色信息。其深度图由激光扫描重建的模型渲染而成。与其他基准测试不同,ScanNet++ 中的每个相机姿势彼此相距很远。自己扫描现实世界的场景以构建 Azure 数据集,包括走廊、储藏室、酒店房间、家庭、办公室,面积从 43 平米 到 100 平米不等。

通过三个线程并行实现系统来加速系统:一个线程用于高斯优化,一个线程用于前端在线跟踪,另一个线程用于后端图优化。高斯优化和前端在线跟踪由 python 使用 pytorch 框架实现,为渲染过程和反向传播编写自定义 CUDA 内核。后端优化部分继承自 ORB SLAM2 [MurArtal & Tardós 2017] 并用 C++ 实现。还使用开源 SIBR [Bonopera 2020;Kerbl 2023] 构建一个交互式查看器,可视化 SLAM 过程和重建模型。为了实现场景中的自由移动和扫描,用配备英特尔 i7 10750-H CPU 和 nvidia 2070 GPU 的笔记本电脑连接到 Azure Kinect RGBD 摄像头进行数据采集。摄像头捕获的 RGBD 图像通过无线网络传输到台式计算机,台式计算机完成 SLAM 计算,然后将结果发送回笔记本电脑上的查看器进行可视化。

在所有的实验中,都对 5% 的像素进行采样用于高斯添加。对于小规模合成数据集 Replica [Straub et al. 2019],将优化时间窗口设置为 6 并优化 50 次迭代。对于大规模真实 Azure 数据集,将优化时间窗口设置为 8 并优化 50 次迭代。对于 TUM-RGBD [Sturm et al. 2012],将优化时间窗口设置为 4 并优化 50 次迭代。对于 ScanNet++ [Yeshwanth et al. 2023],将优化时间窗口设置为 3,并由于高分辨率(1752 × 1168)和稀疏视角而优化 75 次迭代。对于学习率,在 Replica 和 ScanNet++ 上设置 𝑙𝑟𝑝𝑜𝑠𝑖𝑡𝑖𝑜𝑛 = 0.001、𝑙𝑟𝑆𝐻0 = 0.0005、𝑙𝑟𝛼 = 0、𝑙𝑟𝑠𝑐𝑎𝑙𝑒 = 0.004、𝑙𝑟𝑟𝑜𝑡𝑎𝑡𝑖𝑜𝑛 = 0.001。并且在数据集和 TUM-RGBD 上设置 𝑙𝑟𝑝𝑜𝑠𝑖𝑡𝑖𝑜𝑛 = 0.001、𝑙𝑟𝑆𝐻0 = 0.001、𝑙𝑟𝛼 = 0、𝑙𝑟𝑠𝑐𝑎𝑙𝑒 = 0.002、𝑙𝑟𝑟𝑜𝑡𝑎𝑡𝑖𝑜𝑛 = 0.001。其他 SH 系数的学习率为 0.05 × 𝑙𝑟𝑆𝐻0。对于置信度计数阈值,对合成副本使用 𝛿𝜂 = 100,对 TUM-RGBD 使用 𝛿𝜂 = 200,对大规模 Azure 和 ScanNet++ 场景使用 𝛿𝜂 = 400。

  • 13
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值