经典文献阅读之--NICER-SLAM (RGB神经隐式的稠密的SLAM)

0. 简介

神经隐式表示近年来在SLAM中,特别是在稠密视觉SLAM中,成为一种流行的表示方法。然而,此前在这一方向上的工作要么依赖于RGB-D传感器,要么需要单独的单目SLAM方法进行相机跟踪,并且不能产生高精度、高密度3D场景重建。在本文中,我们提出了NICER-SLAM,这是一个稠密的RGB SLAM系统,同时优化相机位姿和分层神经隐式地图表示,这也允许高质量的新视图合成。

为了促进地图的优化过程,我们集成了额外的监督信号,包括易于获取的单目几何线索和光流,并引入了一个简单的变形损失来进一步强制几何一致性。此外,为了在复杂的室内场景中进一步提高性能,我们还提出了从符号距离函数(SDF)到体积渲染方程中的密度的局部自适应转换。在合成和实际数据集上,我们展示了在密集映射、跟踪和新视角合成方面的强大性能,甚至与最近的RGB-D SLAM系统竞争。这部分代码目前还没开源,可以期待一波。

在这里插入图片描述

1. 文章贡献

本文贡献如下:

1、我们提出了NICER-SLAM,这是第一个稠密的RGB SLAM之一,它可以对跟踪和建图进行端到端优化,还可以实现高质量的新视图合成。

2、我们为SDF,不同的几何和运动正则化,以及局部自适应的SDF体积密度转换引入了层次神经隐式编码。

3、我们在合成数据集和真实数据集上展示了强大的建图、跟踪和新颖的视图合成性能,甚至可以与最近的RGBD SLAM方法竞争。

2. 系统概述

我们在图2中提供了NICER-SLAM流程的概述。给定RGB视频作为输入,我们通过端到端优化同时估计准确的三维场景几何形状和颜色,以及相机跟踪。图二显示了NICER-SLAM的系统概述。我们的方法仅采用RGB流作为输入,并输出相机姿态以及用于几何和颜色的学习分层场景表示。为了实现端到端的联合映射和跟踪,我们渲染预测的颜色、深度、法线,并根据输入RGB和单目线索进行优化。此外,我们进一步通过RGB变形损失和光流损失强化几何一致性。我们使用分层神经隐式表示来表示场景的几何形状和外观(第3节)。通过类似NeRF的可微体积渲染,我们可以呈现每个像素的颜色、深度和法向量值(第4节),这将用于相机姿态、场景几何形状和颜色的端到端联合优化(第5节)。最后,我们讨论了系统中的一些设计选择(第6节)

在这里插入图片描述

3. 分层神经隐式表示(和Nice slam类似)

我们首先介绍我们可优化的分层场景表示方法,它将多级网格特征与MLP解码器相结合,用于SDF和颜色预测。
粗层几何表示:粗层几何表示的目标是有效地建模粗略的场景几何(捕获几何细节的对象)和场景布局(例如墙壁,地板),即使只有部分观察数据也能做到。 为此,我们使用分辨率为 32 × 32 × 32 32×32×32 32×32×32的密集体素网格表示归一化场景,并在每个体素中保留32个特征。 对于空间中的任何点 x ∈ R 3 x∈\mathbb{R}^3 xR3,我们使用一个小的MLP f c o a r s e f ^{coarse} fcoarse,带有一个64维隐藏层,以获得其基本SDF值 s c o a r s e ∈ R scoarse∈\mathbb{R} scoarseR和几何特征 z c o a r s e ∈ R 32 z^{coarse}∈\mathbb{R}^{32} zcoarseR32,如下式所示:
在这里插入图片描述
其中 γ γ γ对应于一个固定的位置编码 [29, 54],将坐标映射到更高的维度。根据[71, 69, 68]的方法,我们将位置编码的级别设置为6。 Φ c o a r s e ( x ) Φ^{coarse}(x) Φcoarse(x)表示特征网格 Φ c o a r s e Φ^{coarse} Φcoarse在点 x x x处进行三线性插值。

Fine-level几何表征:虽然粗略的几何形状可以通过我们的粗略级别形状表示获得,但捕捉场景中的高频几何细节很重要。 为了实现这一目标,我们使用多分辨率特征网格和MLP解码器[5, 31, 76, 53]来将高频几何细节建模为残差SDF值。 具体而言,我们使用多分辨率稠密特征网格 Φ { f i n e l } 1 L {Φ^\{fine}_l \}^L_1 Φ{ finel}1L ,分辨率为 R l R_l Rl。 这些分辨率在几何空间中采样[31],以合并不同频率的特征:
在这里插入图片描述
其中, R m i n R_{min} Rmin R m a x R_{max} Rmax分别对应最低和最高分辨率。这里我们设置 R m i n = 32 R_{min}=32 Rmin=32 R m a x = 128 R_{max}=128 Rmax=128,总共有 L = 8 L=8 L=8个级别。每个级别的特征维度为4。
现在,为了对一个点 x x x建模残差SDF值,我们提取并串联每个级别的三线性插值特征,并将它们输入到一个3个隐藏层大小为64的MLP f f i n e f^{fine} ffine 中:
在这里插入图片描述
其中 z f i n e ∈ R 32 z^{fine} ∈ \mathbb{R}^{32} zfineR32 x x x在细级别上的几何特征。通过粗层基础SDF值 s c o a r s e s^{coarse} scoarse和细层残差SDF ∆ s ∆s s x x x的最终预测SDF值 s ^ \hat{s} s^简单地是两者之和:
在这里插入图片描述
颜色表示:除了3D几何信息之外,我们还预测颜色值,以便我们的映射和相机跟踪也可以通过颜色损失进行优化。此外,作为另一个应用,我们还可以即时从新视角渲染图像。受[31]的启发,我们使用另一个多分辨率特征网格 { Φ l c o l o r } 1 L \{Φ^{color}_l\}^L_1 { Φlcolor}1L和一个由大小为64的2层MLP参数化的解码器 f c o l o r f^{color} fcolor来编码颜色。特征网格的层数现在为 L = 16 L = 16 L=16,每个层的特征维数为2。最小和最大分辨率现在分别为 R m i n = 16 R_{min} = 16 Rmin=16 R m a x = 2048 R_{max} = 2048 Rmax=2048。我们预测每个点的颜色值为:
在这里插入图片描述
其中, n ^ \hat{n} n^ 对应于从方程(4)中的 s ^ \hat{s} s^计算出的点 x x x处的法线, γ ( v ) γ(v) γ(v)是观察方向,其具有4级的位置编码,遵循[68,71]。

4. 体积渲染(比较重要的论点)

跟随最近基于隐式方法的3D重建 [38,68,71,59] 和密集视觉SLAM [51,76] 的工作,我们使用可微分的体积渲染从第3.1节中优化的场景表示。具体而言,为了渲染一个像素,我们从相机中心 o o o沿着其规范化视线方向 v v v,将射线 r r r投射到像素上。然后沿着该射线采样N个点,表示为 x i = o + t i v x_i = o + t_iv xi=o+tiv,它们的预测SDF和颜色值分别为 s ^ i \hat{s}_i s^i c ^ i \hat{c}_i c^i。为了进行体积渲染,我们遵循[68],将SDF s ^ i \hat{s}_i s^i 转换为密度值 σ i σ_i σi
在这里插入图片描述
其中, β ∈ R β ∈ R βR 是控制从 SDF 到体密度的转换的参数。如同 [29],当前光线 r r r 的颜色 C ^ \hat{C} C^ 被计算为:
在这里插入图片描述
其中, T i T_i Ti α i α_i αi 分别对应沿着光线 r r r 的采样点 i i i 的透射率和 alpha 值, δ i \delta_i δi 是相邻采样点之间的距离。类似地,我们也可以计算与当前光线 r r r 相交的表面的深度 D ^ \hat{D} D^ 和法线 N ^ \hat{N} N^,如下所示:
在这里插入图片描述
本文提出了一种本地自适应转换的方法。公式(6)中的** β β β参数模拟了物体表面附近的平滑程度**。随着网络对物体表面更加确定, β β β的值逐渐减小。因此,这种优化方案能够实现更快、更锐利的重建。在VolSDF [68]中,他们将 β β β建模为单个全局参数。这种建模方式本质上假定在不同场景区域中优化的程度相同,对于小型场景是足够的。然而,在复杂的室内场景中,全局优化的 β β β值是次优的(请参见4.2节的消融研究)。因此,我们提出了一种本地自适应的方法,将 β β β值本地化,以使公式(6)中的SDF-density 转换也是本地自适应的。具体来说,我们在整个场景中维护一个体素计数器,并在映射过程中计算每个体素内的点样本数。我们经验性地选择了体素大小为643(请参见4.2节的消融研究)。接下来,我们启发式地设计了一种从局部点样本计数 T p T_p Tp β β β值的转换:
在这里插入图片描述
我们通过在全局输入设置下绘制 β β β随体素计数递减的曲线并对曲线进行拟合得到了该变换。我们经验性地发现指数曲线最适合。

5. 端到端的联合建图和跟踪(这部分也比较总要)

仅从 RGB 时序输入,很难同时优化 3D 场景几何和颜色以及相机姿态,由于高度的歧义,特别是对于具有许多无纹理和稀疏覆盖区域的大型复杂场景。因此,为了在我们的神经场景表示下实现端到端联合映射和跟踪,我们建议使用以下损失函数,包括几何和先验约束、单视角和多视角约束,以及全局和局部约束。

RGB渲染损失:式(7)将3D神经场景表示与2D观察结果相连,因此我们可以使用简单的RGB重建损失来优化场景表示:
在这里插入图片描述
其中, R R R 表示每次迭代中随机采样的像素/光线, C C C 是输入像素颜色值。

RGB变形损失:为了进一步从仅有的颜色输入中强制执行几何一致性,我们还添加了一个简单的每像素变形损失。对于第 m m m帧中的像素,表示为 r m r_m rm,我们首先使用公式(8)渲染其深度值并将其投影到3D空间中,然后使用第 n n n帧的内部和外部参数将其投影到另一个帧中。附近的关键帧 n n n中的投影像素 r m → n 表示为 r_{m→n}表示为 rmn表示为r_{m→n}$。然后定义变形损失为:

在这里插入图片描述
其中 K m K_m Km表示当前帧 m m m的关键帧列表,不包括帧 m m m本身。我们将在帧 n n n的图像边界外投影的像素屏蔽掉。需要注意的是,与[11]不同的是,我们观察到,对于随机采样的像素来说,简单地执行像素变形比使用路径变形更有效,并且没有性能下降。

光流损失:RGB渲染和变形损失都是基于点的项,易受局部最小值的影响。因此,我们添加了一种基于光流估计的损失,它遵循区域平滑性先验,并有助于解决歧义。假设帧 m m m中的采样像素为 r m r_m rm,相应的投影像素在帧 n n n中为 r n r_n rn,则可以添加光流损失如下:
在这里插入图片描述
其中 G M ( r m → n ) GM(r_{m→n}) GM(rmn)表示从GMFlow [66]中估计的光流。

单目深度损失:给定RGB输入,可以通过现成的单目深度估计器[12]获得几何线索(如深度或法线)。受[71]启发,我们还将此信息包含在优化中,以指导神经隐式表面重建。
更具体地说,为了在我们的渲染预期深度 D ^ \hat{D} D^和单目深度 D ˉ \bar{D} Dˉ之间强制执行深度一致性,我们使用以下损失[43, 71]:
在这里插入图片描述

…详情请参照古月居

猜你喜欢

转载自blog.csdn.net/lovely_yoshino/article/details/129225286