点击下方
卡片
,关注
「3D视觉工坊」
公众号
选择
星标
,干货第一时间送达
来源:计算机视觉life
添加小助理:cv3d008,备注:方向+学校/公司+昵称,拉你入群。文末附3D视觉行业细分群。
扫描下方二维码,加入「
3D视觉从入门到精通
」知识星球
,星球内凝聚了众多3D视觉实战问题,以及各个模块的学习资料:
近20门秘制视频课程
、
最新顶会论文
、计算机视觉书籍
、
优质3D视觉算法源码
等。想要入门3D视觉、做项目、搞科研,欢迎扫码加入!
论文信息
题目:GSFusion: Online RGB-D Mapping Where Gaussian Splatting Meets TSDF Fusion
作者:Jiaxin Wei and Stefan Leutenegger
机构:慕尼黑工业大学智能机器人实验室、伦敦帝国理工学院智能机器人实验室和慕尼黑机器人与机器智能研究所
原文链接:https://arxiv.org/abs/2408.12677
源码链接:https://github.com/goldoak/GSFusion
编译:zty@计算机视觉life
内容速览
-
作者提出了
GSFusion
,一个混合建图系统,
结合高斯泼溅和TSDF融合,以实时生成两种类型的地图
。
-
作者采用
四叉树分割方案
和
体积网格结构
,明确控制向场景中添加的新高斯的数量,
优化了模型大小和计算效率
。
-
作者在两个基准数据集上进行了全面的实验,展示了作者的方法在
建图
频率和渲染质量方面与以前的基于高斯的方法相比具有明显优势。
摘要
传统体积融合算法在维持3D场景的空间结构方面具有优势,这为计算机视觉和机器人学中的众多任务提供了便利。然而,这些算法在视觉表现的真实感方面常常不足。3D高斯泼溅技术的出现填补了这一空白,但现有基于高斯的重建方法在与底层3D结构的一致性、实时优化能力上存在缺陷,无法为用户提供高质量的即时反馈。这些问题中的一个主要瓶颈在于优化过程中需要更新大量的高斯参数。作者提出的方法不是将3D高斯作为独立的地图表示,而是将其整合进体积
建图
系统中,利用几何信息,并提出在图像上使用四叉树数据结构,大幅减少初始化的splats数量。通过这种方式,作者不仅生成了一个伪影更少、更为紧凑的3D高斯地图,同时也实时生成了体积地图。作者的方法GSFusion,在不牺牲渲染质量的前提下,显著提高了计算效率,这一点在合成数据集和真实数据集上的实验中都得到了验证。相关代码将在GitHub上提供。
I. 引言
在线体积
建图
技术通过将传感器采集的深度数据随时间累积至体积网格中,每个体素通常记录一个占用值或截断有符号距离场(TSDF),即到最近表面的最短距离的符号化表示。这种方法能够创建出精确的几何地图,帮助理解环境的三维结构,对于机器人导航、路径规划和空间推理等应用至关重要。通过将颜色数据融合到体积网格中,可以为地图添加纹理信息,进而支持需要空间和视觉信息相结合的应用,例如虚拟现实(VR)和增强现实(AR)体验。然而,简单的颜色融合常常导致地图的逼真度不足,且由于遮挡、深度图的空洞以及对材料属性(如反射和透明度)的忽视,导致地图不完整。
为了提升3D地图的视觉真实性,一些先前研究采用神经辐射场(NeRF),一种基于隐式表示的神经网络,通过简单的多层感知机(MLP)或多分辨率特征网格来模拟场景。这些方法在视觉质量上取得了显著改进,主要得益于可微分的体积渲染技术,该技术能够处理透明度和方向依赖性,但这也使得计算成本增加,导致基于NeRF的重建方法难以实现实时性能。
最近,一种新兴的辐射场渲染技术——3D高斯
泼溅
(3DGS)——展现出了希望。与NeRF不同,3DGS使用显式的3D高斯表示和基于瓦片的光栅化器,在保持高渲染速度的同时提供了最先进的视觉质量。此外,3DGS还加快了重建过程,使其能与最快的基于NeRF的方法相媲美。不过,原始的3DGS设计为离线操作,对小规模数据集(约300张图像)进行批量优化仍需10至30分钟。
尽管3DGS在视觉质量和渲染速度上与NeRF相当,但参考文献中几个并行研究工作在这种新颖表示的基础上构建了RGB-D SLAM系统,并提出了不同的策略以满足在线优化的需求。这些方法不是依赖于从运动结构(Structure-from-Motion, SfM)过程中生成的稀疏点云,而是采用增量高斯初始化来更好地处理顺序RGB-D输入。这种改进有助于减少一些浮动伪影,但现有方法在初始化新的3D高斯时通常依赖于密集的像素级采样,导致存储开销大,影响整体效率。因此,当前基于高斯的SLAM系统仍然难以实现真正的实时性能。例如,RTG-SLAM通过限制3D高斯的数量来减少需要优化的参数和需要渲染的像素,从而实现实时性能,但它对缺失的深度数据不够鲁棒,尤其在处理窗户和镜子等场景时会在地图中留下空洞。
在作者中,作者认为限制添加到场景中的3D高斯的数量对于在扫描期间保持视觉质量和效率之间的平衡至关重要。此外,作者不是将3D高斯作为唯一的地图表示,而是将其与传统的体积融合方法相结合。这种结合带来双重好处:首先,作者可以充分利用体积网格的空间结构来避免在邻域内重复3D高斯;其次,与传统的3DGS相比,体积地图更为成熟,更适合广泛的机器人下游任务。具体来说,作者在Supereight2的基础上开发了GSFusion,这是一个高性能的体积
建图
系统,能够同时实时生成3D高斯地图和TSDF地图。作者方法的效率关键在于输入图像的四叉树分解,这有助于确定添加新高斯的位置。每个输入的RGB图像根据对比度被细分为不同大小的单元格,然后在检查其周围环境并使用几何信息后,在单元格中心初始化3D高斯。作者提出的方法不仅显著减少了高斯原语的总数,生成了一个干净且紧凑的3D高斯地图,而且还简化了在线优化过程,大大减少了所需的计算量(见图1)。
图 1 在ScanNet++数据集中的一个真实场景(8b5caf3398)上比较了不同方法的结果。所有报告的数据均来源于单个Nvidia RTX 3060 GPU的处理结果。| ©【计算机视觉life】编译
在合成数据集和真实数据集上的广泛实验表明,作者的GSFusion方法有效地平衡了
建图
频率和渲染质量,优于以往的基于高斯的方法。作者还对几个设计选择进行了详细的消融研究,提供了如何根据不同目的最大化其优势的见解。作者的主要贡献总结如下:
-
作者提出了GSFusion,一个混合
建图
系统,结合高斯
泼溅
和TSDF融合,以实时生成两种类型的地图。
-
作者采用四叉树分割方案和体积网格结构,明确控制向场景中添加的新高斯的数量,优化了模型大小和计算效率。
-
作者在两个基准数据集上进行了全面的实验,展示了作者的方法在
建图
频率和渲染质量方面与以前的基于高斯的方法相比具有明显优势。
III. 方法
作者提出的
建图
系统如图2所示。在第III-A节中,作者首先简要回顾了本方法所涉及的两种场景表示形式。接着,第III-B节详细阐述了基于这些原语的增量
建图
流程,这包括TSDF融合、新高斯的初始化,以及高斯参数的在线优化。
图 2 提出了作者的GSFusion系统概览。系统在每个时间步接收一对RGB-D图像作为输入。深度数据融合到基于八叉树的TSDF网格中以捕获几何结构,而RGB图像根据对比度通过四叉树进行分割。如果检查到其最近的体素没有相邻的高斯,则在四分位数的反投影中心初始化一个新的3D高斯。作者通过最小化渲染图像与输入RGB图像之间的光度损失来即时优化高斯参数。此外,作者维护了一组关键帧以解决遗忘问题。扫描完成后,系统为后续任务提供了体积地图和3D高斯地图。| ©【计算机视觉life】编译
A. 混合场景表示
-
八叉树基础的TSDF网格
:八叉树作为空间数据结构,用于将3D空间划分成八个八分体,从而提高计算效率。在Supereight2系统中,每个叶节点含有一个8×8×8的体素块。这样的设计将体积
建图
转换为一系列无序但稀疏分布的体素块,八叉树则作为空间索引,便于根据整数坐标快速检索数据。Morton编码在此用于高效地遍历树结构,通过3D坐标的交错位来形成每个节点的唯一标识符。值得注意的是,该
建图
系统支持多种数据类型,例如TSDF和占用状态。作者为简化起见,选择使用单一分辨率的TSDF,其中每个体素存储的是一个到最近表面的截断有符号距离,负值表示体素位于表面之后。
-
3D高斯
:为了实现高质量的渲染效果,作者选择3D高斯作为场景的基本元素,因为它们不仅可微分,还能够方便地投影到二维空间中,实现快速的α混合。假设一个3D高斯的中心位于点
,则其数学表达式定义为:
其中,协方差矩阵
定义为
,
和
分别代表3D高斯的旋转矩阵和缩放矩阵。给定相机坐标系到世界坐标系的转换矩阵
,在时间步k,2D splat的投影定义为:
其中,
,
。
用于执行去齐次化和透视投影,
是
的旋转部分,而
是将相机坐标转换为射线坐标的投影变换的雅可比矩阵。每个3D高斯除了3D位置
、旋转
和缩放
之外,还包含一个不透明度值
用于混合,以及球谐系数来捕获视点依赖的颜色
。
B. 增量建图方法
作者的实时增量
建图
流程涵盖三个关键步骤:首先是对输入的深度图像进行TSDF融合以更新相关的体素;其次是利用视觉和几何信息来初始化新的3D高斯,以此来控制场景中原语的数量增长;最后,作者设计了一个高效的关键帧维护策略,以便于在线优化高斯参数。
-
TSDF融合
:TSDF融合的目的是将新的传感器数据集成到体积地图中。这一过程需要确定哪些体素块应当根据当前的深度图像进行更新。由于TSDF仅记录在截断距离±ϵ范围内的表面信息,因此对于图像中每个像素,作者沿着其视线方向投射光线,并仅当体素块位于深度测量值周围设定的ϵ带内时,才进行体素块的分配。Supereight2通过使用基于Morton编码的广度优先搜索策略,实现了快速的体素块分配,从而最小化了计算开销。值得注意的是,在经过初始的分配阶段后,随着时间的推移,需要新分配的体素块数量会减少,因为新的体素块主要出现在帧的边缘或之前未被观察到的区域。体素分配完成后,作者采用与KinectFusion相同的方法进行数据融合。具体来说,通过将体素位置
投影到图像坐标系中,作者可以得到一个新的符号距离值(SDF),它是深度图像中测量到的距离与从相机中心到体素的欧氏距离之差。然后,将这个新值归一化并作为一个TSDF值,与之前存储的TSDF值通过一个简单的加权平均方法进行融合:
其中
表示在时间步k处的输入深度图,
是相机坐标系中体素
的z坐标。最终,更新后的权重
和TSDF值
将被存储在相应的体素中。
图 3 不同四叉树阈值的效果对比。上图展示了输入RGB图像(左侧)和使用0.1四叉树阈值生成的地图渲染图像(右侧)。下图展示了使用不同四叉树阈值进行图像分割的结果。使用较严格的四叉树阈值可以帮助捕捉到由对比度引起的更细微的边缘等细节。| ©【计算机视觉life】编译
-
新高斯初始化
:为了有效控制添加到地图中的3D高斯的数量,作者采用了基于输入RGB图像的四叉树分解方案。四叉树是一种二维空间分割数据结构,每个节点最多有四个子节点。在本方法中,图像根据局部对比度被细分,每个叶节点代表一个对比度低于预设阈值的特定区域。通过设定一个较严格的阈值,作者可以更好地捕获由对比度引起的细节,例如边缘,而无需对每个像素进行详尽的采样。假设一个象限的中心坐标为
,则可以将其反投影至世界坐标系中:
其中
表示透视投影的逆运算。在将新的3D高斯初始化到点
之前,作者需要检查其邻近区域,以避免在邻近区域内不必要地创建多个相似的高斯原语。为此,作者简单地查询与
最近的体素。如果该体素的权重(如公式8所示)为1,则表明它是一个新分配的体素,作者可以安全地在该位置初始化一个新的3D高斯:
其中,
是一个3×3单位矩阵,表示旋转;
是一个对角矩阵,其对角线元素为
,表示缩放;
是初始不透明度,设为0.5;
是初始颜色,由图像
在
处的像素值决定。一旦体素的权重超过1,意味着该位置已经被考虑过,作者就不再在该位置初始化新的高斯。
-
在线优化
:得益于可微分渲染,作者能够直接使用梯度下降方法来优化高斯参数。作者采用了基于瓦片的光栅化器,它将视图平面划分为多个小瓦片,并根据深度对每个瓦片内当前视锥体中的3D高斯进行排序。通过这种方式,可以在每个像素上混合排序后的高斯,得到渲染的RGB图像
:
优化的目标是最小化输入RGB图像
和渲染图像
之间的光度损失:
在每个时间步,作者对上述目标函数执行多次迭代优化。迭代次数的增加可以提高从当前视点得到的渲染图像的质量。然而,在线优化过程不能承受过多的一阶优化迭代,因为这不仅会增加计算负担,还可能导致过拟合问题,影响3D高斯地图的整体质量。为了在渲染质量和计算效率之间找到平衡,作者开发了一个基于关键帧列表的优化策略。在初始化阶段,新的高斯仅添加到之前未观察到的区域,因此每帧添加的新原语数量自然成为该帧信息增益的指标。当新原语的数量超过某个设定的阈值时,作者将其添加到关键帧列表中。关键帧和非关键帧分别进行不同次数的优化迭代,关键帧进行
次迭代,非关键帧进行
次迭代。此外,作者还从维护的关键帧列表中随机选择一些关键帧进行额外的优化迭代,以缓解由于优化不足而导致的细节遗忘问题,而不显著增加计算负担。与RTG-SLAM类似,作者的系统在扫描结束后也支持对关键帧列表进行全局优化。
IV. 实验
作者对所提出的
建图
系统在合成和真实数据集上进行了全面的实验评估。本节首先介绍实验设置,然后分析
建图
性能,并通过消融研究来验证作者的设计选择。
A. 实验设置
-
数据集
:作者选择了ScanNet++和 Replica作为评估数据集。ScanNet++ 提供了高质量的室内RGB-D图像,并且每个场景都配备了用于训练和测试的独立轨迹,这有助于作者在新视图上评估渲染质量。作者根据中的使用情况,挑选了ScanNet++ 中的四个场景进行评估。然而,ScanNet++ 中训练轨迹的稀疏视点对在线优化提出了挑战。Replica 数据集则由合成的室内场景组成,提供了更一致的轨迹和精确的RGB-D图像,是ScanNet++ 的有效补充。考虑到GPU内存限制,作者将ScanNet++ 中的高分辨率图像按2倍缩小。
-
基线比较
:作者的方法与SplaTAM和 RTG-SLAM这两种先进的基于高斯的SLAM方法进行了比较,它们是目前唯一支持在ScanNet++ 数据集上进行评估的开源实现。
-
评估指标
:评估渲染质量时,作者采用了峰值信噪比(PSNR)、结构相似性(SSIM)和感知损失(LPIPS)三个常用指标。此外,作者还通过测量
建图
帧率(FPS)、GPU内存使用量和生成的高斯地图模型大小来评估计算效率和内存占用。
-
实现细节
:所有实验都在配备Intel i7-13700 CPU和Nvidia RTX 3060 GPU的桌面计算机上进行。作者的
建图
系统使用C++实现,基于LibTorch框架,并且可微分渲染部分通过自定义CUDA内核优化。对于两个数据集,作者设定体素大小为1cm,四叉树阈值为0.1,关键帧阈值为50,扫描后全局优化的迭代次数为10。对于Replica数据集,作者为关键帧设置5次迭代,非关键帧3次迭代,并额外进行2次随机关键帧优化迭代。由于ScanNet++ 场景帧数较少,作者将关键帧迭代次数设为10,非关键帧1次,并增加9次随机关键帧优化迭代。
B. 建图性能
作者在表I和表II中分别展示了ScanNet++ 和 Replica 数据集上的定量渲染结果。作者的方法和RTG-SLAM 都支持在扫描后对关键帧列表进行全局优化,因此作者直接比较了这两种方法的全设置性能,而与SplaTAM 的比较则没有使用全局优化。RTG-SLAM 在两个数据集上分别进行了10次和20次全局优化。作者在表III中还比较了
建图
效率和内存成本。