0. 简介
一些集成了 3D 高斯的 SLAM 方法显示出了良好的效果。例如,SplaTAM、MonoGS、GS-SLAM和 Photo-SLAM使用序列的 RGB-D 或 RGB 数据来构建完整的 SLAM 系统。然而,这些技术在具有挑战性的光照条件、复杂背景和快速运动的非受控户外大规模环境中遇到了困难。尽管 LiDAR 为 3D 高斯提供了高质量的几何初始化,在户外环境中通常比摄像头更为稳健,但将其集成到 SLAM 系统中带来了独特的挑战。LIV-Gaussianmap和 LetsGo使用 LiDAR 初始化 3D 高斯,而 Gaussian-LIC结合了 LiDAR-惯性-摄像头的设置来实现综合的 3D 高斯构建。然而,LIV-Gaussianmap和 LetsGo等系统仅限于离线处理,而 Gaussian-LIC则需要复杂的前端里程计和大量的关键帧维护。为了实现高保真度的地图构建,我们引入了一种基于金字塔的训练方法,以有效学习多层次特征,并结合来自激光雷达测量的深度损失,以提升几何特征的感知能力。通过精心设计的高斯图扩展、关键帧选择、线程管理和自定义CUDA加速策略,我们的框架实现了实时的照片级真实感地图构建。我们进行了数值实验,以评估我们的方法相较于最先进的三维重建系统的卓越性能。评估视频可在网站上找到。
1. 主要贡献
-
开发并实现了一个复杂的实时 LVI-GS 系统,能够维护一个动态的超原语模块。该系统利用 3D 高斯分布在三维空间中执行高质量、实时的渲染,从而确保了复杂环境的高效准确表示。
-
为了进一步提升系统的性能和可扩展性,采用了粗到细的地图构建方法。此方法利用 RGB 图像和深度图像的金字塔结构,在不同细节层次上逐步优化地图。此外,实施了一种先进的线程管理技术,以优化计算效率,从而确保在处理大型数据集时的实时操作顺畅。
-
为了改善地图表示和渲染质量,设计了一个稳健的关键帧管理策略,能够有效地选择和处理关键帧。此外,通过将深度损失纳入系统,增强了 3D 高斯地图的准确性,实现了更精确的重建和视觉上更优的渲染效果。
2. 方法
我们的框架通过两个并行线程实现完整的系统功能。一个线程负责里程计,而另一个线程则进行三维高斯的实时优化。这两个线程协同维护一个共享的超原语模块。在这两个线程之间,交换数据包括三维点云、相机位姿、相机图像和深度信息。

图1:我们提出的LVI-GS系统概述。
3. 超原语(这里的表示方式其实是为了避免大量的关键点)
我们维护一个超原语模块,包含三维点云、体素和三维高斯。为了高效访问三维点云以进行三维高斯初始化,地图点被组织成固定大小的体素(例如,0.1 m x 0.1 m x 0.1 m)。体素的激活由最近添加的点的存在决定(例如,在过去的一秒内)。一个激活的体素表示最近有活动,而一个去激活的体素则表示没有最近的更新。此外,在视觉惯性里程计(VIO)模块中,如果点的投影或光度误差超过指定阈值,则会将其移除[32]。对于点云中的每个点,我们识别其在网格中的位置;如果该位置已经存在一个点,则将其丢弃。我们还调节每个体素内的点数,以保持受控的密度。通过这一初步过滤过程,随着里程计的进行,获得的点云避免了冗余的三维高斯的添加。
4. 三维高斯溅射(基础内容)
我们的场景表示为3DGS,使用一组各向异性高斯 G G G 进行映射。每个高斯包括不透明度 o ∈ [ 0 , 1 ] o \in [0,1] o∈[0,1]、中心位置 μ ∈ R 3 \mu \in \mathbb{R}^3 μ∈R3、RGB颜色 c c c、半径 r r r 和三维协方差矩阵 Σ ∈ R 3 × 3 \Sigma \in \mathbb{R}^{3 \times 3} Σ∈R3×3。给定中心位置 μ \mu μ 和三维协方差矩阵 Σ \Sigma Σ,高斯分布定义为:
D ( x ) = exp ( − 1 2 ( x − μ ) Σ − 1 ( x − μ ) T ) (1) D(x) = \exp\left(-\frac{1}{2} (x - \mu) \Sigma^{-1} (x - \mu)^T\right) \tag{1} D(x)=exp(−21(x−μ)Σ−1(x−μ)T)(1)
由于每个高斯形状都是一个椭球体,我们将三维高斯的协方差参数化为:
Σ = R S S T R T (2) \Sigma = R S S^T R^T \tag{2} Σ=RSSTRT(2)
其中 S ∈ R 3 S \in \mathbb{R}^3 S∈R3 是描述三维尺度的向量, R ∈ R 3 × 3 R \in \mathbb{R}^{3 \times 3} R∈R3×3 表示旋转矩阵。3DGS 通过迭代三维高斯进行光栅化,而不是沿着相机光线遍历,从而在渲染过程中忽略空白空间。鉴于3DGS利用体积渲染,因此不需要直接推导表面。相反,通过对 N N N 个三维高斯进行溅射和混合,确定一个像素的颜色 C p C_p Cp:
C p = ∑ i ∈ N c i α i ∏ j = 1 i − 1 ( 1 − α j ) (3) C_p = \sum_{i \in N} c_i \alpha_i \prod_{j=1}^{i-1} (1 - \alpha_j) \tag{3} Cp=i∈N∑ciαij=1∏i−1(1−αj)(3)
同样,使用相同的方法,我们也可以通过以下公式获得深度 D p D_p Dp:
D p = ∑ i ∈ N d i α i ∏ j = 1 i − 1 ( 1 − α j ) (4) D_p = \sum_{i \in N} d_i \alpha_i \prod_{j=1}^{i-1} (1 - \alpha_j) \tag{4} Dp=i∈N∑diαij=1∏i−1(1−αj)(4)
我们还渲染一个可见性图像,用于确定当前像素的可见性:
V p = ∑ i ∈ N α i ∏ j = 1 i − 1 ( 1 − α j ) (5) V_p = \sum_{i \in N} \alpha_i \prod_{j=1}^{i-1} (1 - \alpha_j) \tag{5} Vp=i∈N∑αij=1∏i−1(1−αj)(5)
其中最终的不透明度 α i \alpha_i αi 是学习到的不透明度 o i o_i oi 和高斯的乘积结果:
α i = o i exp ( − 1 2 ( x ′ − μ ′ ) Σ ′ − 1 ( x ′ − μ ′ ) T ) (6) \alpha_i = o_i \exp\left(-\frac{1}{2} (x' - \mu') \Sigma'^{-1} (x' - \mu')^T\right) \tag{6} αi=oiexp(−21(x′−μ′)Σ′−1(x′−μ′)T)(6)
LVI-GS:实时3D高斯SLAM框架
1万+

被折叠的 条评论
为什么被折叠?



