作者:李星云 | 公众号3DCV
在公众号「3DCV」,回复「原论文」可获取论文pdf
1、导读
SLAM是指在未知环境中,通过同时进行定位和地图构建来实现机器人自主导航的技术。传统的SLAM方法通常使用几何信息进行定位和地图构建,但在复杂场景中存在一些挑战,如遮挡、光照变化等。因此,本文提出了一种基于神经表示的SLAM方法,通过引入语义信息和图像特征,提高了定位和重建的准确性和鲁棒性。同时,该方法还能实现场景的语义分割,为后续的任务提供了更丰富的信息。
2、研究目标
我们提出了一种称为DNS SLAM的方法,用于稠密视觉SLAM任务。我们研究的主要目标是同时估计相机姿态和训练场景表示,以实现准确的场景重建和相机定位。具体来说,DNS SLAM的方法包括以下几个关键步骤:
- 场景表示
- 条件的2D图像特征输入
- 轻量级粗糙场景表示
- 占据概率近似
3、方法
DNS SLAM是一种使用神经表示进行同时定位、重建和分割的SLAM方法方法。它采用了一种语义分解的场景表示,结合条件的2D图像特征,强化了几何约束,从而实现更好的跟踪和更详细的外观预测,并且对噪声深度输入更加鲁棒。
3.1、场景表示
场景表示是指在SLAM系统中对场景进行建模和表示的方法。在DNS SLAM中,我们使用了多种几何表示来表示场景。具体来说,我们使用了哈希表格和One-blob编码来表示场景的几何信息。哈希表格用于存储场景中的特征点,而One-blob编码则用于表示每个特征点的位置信息。 在场景表示中,我们还使用了颜色和语义表示来表示场景的外观信息和语义信息。颜色表示用于预测场景中每个特征点的颜色值,而语义表示用于预测场景中每个特征点的语义标签。 通过将几何、颜色和语义表示结合起来,我们可以对场景进行渲染,得到深度、颜色和语义信息。这些信息可以用于后续的跟踪和建图过程。
3.2、多类一致性
在DNS SLAM中,我们引入了多类一致性,以同时考虑几何和语义信息。 具体而言,我们为每个像素分配一个类别标签,并使用2D语义地图来表示每个像素的类别。然后,我们使用类别标签来选择相应的场景表示函数。对于每个类别,我们使用不同的多层感知机(MLP)来表示场景。这样,我们可以根据类别的不同来学习和表示场景的几何和语义信息。通过引入多类一致性,我们可以更好地捕捉场景中不同类别之间的关系,并提高重建的准确性和一致性。
3.3、多视角一致性
在我们的方法中通过利用多个参考帧的图像特征来提高重建的一致性和质量。具体而言,对于每个目标帧 <math xmlns="http://www.w3.org/1998/Math/MathML"> I I </math>I,我们选择一个参考帧 <math xmlns="http://www.w3.org/1998/Math/MathML"> I r I_r </math>Ir,并使用现成的方法提取2D特征 <math xmlns="http://www.w3.org/1998/Math/MathML"> ε ( I r ) \varepsilon (I_r) </math>ε(Ir)。然后,我们为目标帧 <math xmlns="http://www.w3.org/1998/Math/MathML"> I I </math>I投射射线,得到一组3D点{ <math xmlns="http://www.w3.org/1998/Math/MathML"> X i \mathrm {X} _i </math>Xi},并将每个3D点 <math xmlns="http://www.w3.org/1998/Math/MathML"> x i = ξ t π − 1 ( u , d i ( u ) ) x_i= \xi _{t}\pi ^{-1}(\mathrm {\mathbf{u}},di(\mathrm {\mathbf{u}})) </math>xi=ξtπ−1(u,di(u))反投影到参考帧坐标系,以获取对应的图像特征向量
接下来,我们将这些特征向量传递给我们的场景表示,并使用对应的参考视图对每个特征进行编码,得到中间特征向量
在多个参考帧的情况下,我们使用平均池化操作符将每个帧的特征向量聚合为最终的图像特征向量
<math xmlns="http://www.w3.org/1998/Math/MathML"> W i = ( ∑ r = 1 N W ‾ i r ) / N \mathrm {\mathbf{W} }{i} =\left ( {\textstyle \sum{r=1}^{N}} {\overline{\mathbf{W}}_{i}^{r}}\right)/N </math>Wi=(∑r=1NWir)/N
通过将图像特征作为条件输入,我们可以重新定义颜色和语义表示为:
其中, <math xmlns="http://www.w3.org/1998/Math/MathML"> c ^ ( u ; ξ ^ t , θ ) \mathrm {\hat{c}}(u;\hat{\xi}t,\theta) </math>c^(u;ξ^t,θ)和 <math xmlns="http://www.w3.org/1998/Math/MathML"> s ^ ( u ; ξ ^ t , θ ) \mathrm {\hat{s}}(u;\hat{\xi}t,\theta) </math>s^(u;ξ^t,θ)分别表示颜色和语义的预测值。我们使用这些预测值来渲染颜色和语义,并定义光度损失 <math xmlns="http://www.w3.org/1998/Math/MathML"> L p \mathcal{L}_p </math>Lp和语义损失 <math xmlns="http://www.w3.org/1998/Math/MathML"> L s \mathcal{L}_s </math>Ls来衡量预测值与真实值之间的差异。
其中, <math xmlns="http://www.w3.org/1998/Math/MathML"> L p \mathcal{L}_p </math>Lp使用 <math xmlns="http://www.w3.org/1998/Math/MathML"> L 2 \mathcal{L}_2 </math>L2范数作为损失函数,Ls使用多类交叉熵损失函数。通过引入多视角一致性,我们可以提高重建的质量和一致性,从而得到更好的SLAM性能。
3.4、轻量级粗糙场景表示
自我监督的粗糙场景表示是指在SLAM中引入一个轻量级的粗糙场景表示,以提高实时性能。我们利用了一个事实,即单个MLP无法完美地表示整个场景,因为它容易发生灾难性遗忘。然而,它可以以轻量级的方式表示场景的一个小邻域,并且是跟踪的理想选择。因此,我们引入了一个轻量级的粗糙场景表示。
粗糙场景表示的输入是来自于多类别场景表示的潜在向量,输出是粗糙场景的隐藏向量和估计的占据概率。为了训练这个粗糙场景表示,我们使用多类别场景表示的潜在向量作为监督信号。具体而言,我们定义了一个自我监督的潜在损失函数,用于监督粗糙场景表示的训练。
该损失函数计算多类别场景表示的潜在向量与粗糙场景表示的隐藏向量之间的 <math xmlns="http://www.w3.org/1998/Math/MathML"> L 2 \mathcal{L}_2 </math>L2距离。通过最小化这个损失函数,我们可以训练出一个能够在轻量级场景表示中保留一定准确性的模型。
3.5、占据概率近似损失
在DNS SLAM中,为了实现准确且平滑的重建,我们提出了一种占据概率近似损失,灵感来自于近似SDF和特征平滑损失。具体而言,对于截断区域内的样本,即满足 <math xmlns="http://www.w3.org/1998/Math/MathML"> ∣ d i − d ( u ) ∣ ≤ t r |d_i-d(\mathbf{u})| ≤tr </math>∣di−d(u)∣≤tr的点,我们假设占据概率遵循以观测距离为均值的高斯分布:
我们使用这个近似的占据概率作为监督信号进行训练。对于接近表面的点,我们使用这个近似的占据概率作为地面真值进行监督,损失函数如下:
其中 <math xmlns="http://www.w3.org/1998/Math/MathML"> ∣ I ∣ |\mathit{I}| </math>∣I∣表示从图像 <math xmlns="http://www.w3.org/1998/Math/MathML"> I I </math>I中采样的像素集合。对于远离表面的点,我们使用自由空间损失来强制占据概率为零:
通过最小化这些损失函数,我们可以实现准确且平滑的占据概率估计。
3.6、映射阶段
在SLAM的映射阶段,我们的模型通过最小化损失函数来优化可学习参数 <math xmlns="http://www.w3.org/1998/Math/MathML"> θ \theta </math>θ和相机姿态 <math xmlns="http://www.w3.org/1998/Math/MathML"> ξ \xi </math>ξ
首先,我们选择关键帧和用于捆绑调整(BA)的帧。
然后,我们进行射线采样,根据射线在图像中的采样点来采样3D点。如果遇到之前未见过的类别,我们会创建一个新的场景表示并进行初始化。
最后,我们通过最小化多个损失函数来进行映射,包括几何损失、光度损失、语义损失、自监督损失和占据概率近似损失。
损失函数的权重因子可以根据需要进行调整,以平衡不同损失的重要性。在映射过程中,我们使用局部BA和全局BA来优化场景表示和相机姿态。局部BA选择与当前帧有重叠的关键帧,而全局BA从所有关键帧中随机选择。
3.7、跟踪阶段
在跟踪阶段,我们固定了基于哈希的特征网格和场景表示,只更新相机姿态。我们选择最新优化的帧作为参考帧,从整个图像中随机采样Rt个像素。我们使用与建图阶段相同的射线采样策略。跟踪损失:在跟踪中使用了我们几何损失函数的修改版本,其中几何项由深度预测的标准差 <math xmlns="http://www.w3.org/1998/Math/MathML"> d ^ v a r \hat{d} _{var} </math>d^var加权:
给定当前相机姿态的初始猜测,并在恒定速度假设下,通过最小化以下损失函数 <math xmlns="http://www.w3.org/1998/Math/MathML"> L T \mathcal{L} _{T} </math>LT来迭代更新相机姿态 <math xmlns="http://www.w3.org/1998/Math/MathML"> ξ \xi </math>ξ:
4、实验结果
我们研究采用了三个数据集进行实验评估,分别是Replica、ScanNet和自建的数据集。
- Replica数据集
在Replica数据集上,实验中使用了30次迭代进行跟踪和100次迭代进行建图。每隔30帧选择一个关键帧。对于可学习参数的学习率,跟踪阶段使用0.005,建图阶段使用0.001。实验结果表明,本方法能够重建出更具几何细节的网格,相比于基于SDF的方法,如Co-SLAM和ESLAM,具有更好的重建效果。
- ScanNet数据集
在ScanNet数据集上,实验中使用了20级哈希网格和最大体素尺寸为4cm的参数设置。跟踪阶段进行30次迭代,建图阶段进行200次迭代。每隔15帧选择一个关键帧。对于可学习参数的学习率,跟踪阶段使用0.001,建图阶段使用0.0005。实验结果表明,本方法在这些具有挑战性的真实场景上能够实现更好的重建效果,而NICE-SLAM和ESLAM在这些场景上的重建能力有限。
- 自建数据集
在自建的数据集上,实验中使用了500次迭代进行初始化,然后每帧进行5次调整。实验结果表明,本方法能够在未观察到的区域进行重建,但在这些区域的预测结果可能存在一定的误差。未来的研究将探索更复杂的正则化策略和部分填充方法,以提高对稀疏采样的鲁棒性。
实验结果表明,本方法在同时定位、重建和分割的任务上取得了较好的效果,并且在重建细节和鲁棒性方面优于其他方法。
5、创新性
-
提出了一种新的SLAM方法,称为DNS SLAM,它是第一个同时进行定位、重建和分割的神经表示方法。
-
引入了多类别的场景表示,可以将场景中的不同类别分别表示和重建,从而提供更详细和准确的场景信息。
-
使用条件性的2D图像特征作为输入,增强了几何约束和纹理预测,提高了跟踪的准确性和外观预测的细节。
-
引入了占据概率近似方法,使重建结果更加平滑并保留细节。
-
在多个数据集上进行了全面的实验评估,证明了DNS SLAM方法的有效性和鲁棒性。
6、根据这项研究,后续可能的研究方向有哪些?
-
未观测区域的建模:当前的方法在评估指标中对未观测区域(例如桌子下面)的处理较差。未来的研究可以探索适当的正则化技术,例如基于扩散先验的方法,来改进基于图像的SLAM方法对未观测区域的建模。
-
语义评估:研究中将该方法与另一种神经语义SLAM方法NIDS-SLAM进行了比较。未来的研究可以进一步探索不同神经语义SLAM方法之间的比较和评估,以提高语义分割的准确性和效果。
-
运行时分析:研究中报告了在Replica数据集上的运行时间分析。未来的研究可以在更多数据集上进行运行时间分析,以评估该方法在不同硬件平台上的性能,并进一步优化算法以提高运行效率。
-
消融研究:研究中进行了消融实验,分析了不同组件对方法性能的影响。未来的研究可以进一步探索其他组件的影响,以及引入新的组件或改进现有组件来提高方法的性能。
总之,未来的研究可以在未观测区域建模、语义评估、运行时分析和消融研究等方面进一步改进和优化该方法。
7、结论
本文提出了一种名为DNS SLAM的方法,它是第一个同时使用神经表示进行定位、重建和分割的方法。作者使用了语义分解的场景表示结合条件的2D图像特征,从而加强了几何约束,提高了跟踪的准确性和外观预测的细节,并且对噪声深度输入更加鲁棒。实验结果表明,DNS SLAM在多个数据集上取得了优于其他方法的结果,并且具有较快的运行时间。作者还进行了消融实验,验证了各个组件的有效性。总之,DNS SLAM方法在同时定位、重建和分割任务上取得了较好的性能,具有潜力在实际应用中发挥作用。