CVPR!不会吧?难道你还没看过NeRF+SLAM的经典文献NICE-SLAM?

作者:K.Fire | 来源:3DCV

在公众号「3DCV」后台,回复「原论文」可获取论文pdf

添加微信:dddvision,备注:自动驾驶,拉你入群。文末附行业细分群

1 笔者个人体会

这篇文章是近些年NeRF与SLAM结合领域非常有名的一篇文章了,同时也是一篇顶会,首先读这篇文章的时候,笔者认为它的思路逻辑非常清晰明了,从引言中提到的三个必要属性提出本文的研究意义和目的;然后在讲述提出的算法时,根据板块讲解,让我一个NeRF小白也可以看懂。本文的这个由粗到精的优化思想非常可以借鉴,在其他方面也经常用到,能在这样精细的地图创建的情况下,能实现实时的性能,确实很牛。

该方法的预测能力仅限于粗糙表示的尺度。此外,目前还没有执行闭环检测,未来也可以考虑加入闭环检测,这可能会有更好的效果。我感觉将NeRF引入SLAM,其实是更偏重于“建图”模块,文中的实验也提到了,与经典的一些注重于定位SLAM框架相比,跟踪误差还是有待提高的。

2 引言

作者主要围绕以下属性阐述了NICE-SLAM的优势:

  • SLAM系统能够是实时的

  • SLAM系统应该有能力对没有观测的区域做出合理的预测

  • SLAM系统应该能够扩展到大型场景

  • SLAM系统对有噪声或观测缺失的情况具有鲁棒性

传统的稠密视觉SLAM系统满足实时需求,可以用于大规模场景,但他们无法对未观测到的区域做出合理的几何估计。基于学习的SLAM方法获得一定水平的预测能力,因为它们通常在特定任务的数据集上进行训练。此外,基于学习的方法往往能更好地处理噪声和异常值。然而,这些方法通常只在具有多个对象的小场景中工作。iMAP的关键限制因素源于它使用了一个单一的多层感知器(MLP)来表示整个场景,它只能随着每一个新的、潜在的部分场景而进行全局更新RGB-D观测。

因此,这项工作结合分层场景表征(hierarchical scene representation)和神经隐式表征(neural implicit representation)的优势,以完成稠密RGB-D SLAM的任务,可以应用于大规模场景,同时保持预测能力。

本文主要贡献:

  • 提出了NICE-SLAM,一个稠密的RGB-DSLAM系统,对于各种具有挑战性的场景具有实时能力、可扩展性、可预测性以及鲁棒性。

  • NICE-SLAM的核心是一个层次化的、基于网格的神经隐式编码。与全局神经场景编码相比,这种表示允许局部更新,这是针对大规模方法的先决条件。

  • 对各种数据集进行了广泛的评估,从而证明了在建图和跟踪方面的竞争性能。

3 算法框架

算法框架如下图所示。

3.1 分层场景表示 Hierarchical Scene Representation

分层场景表示结合了多层次网格特征和预先训练的解码器的占用预测。几何图形被编码到三个特征网络中,对应三个MLP多层感知解码器,其中,分别是粗糙层(coarse)、中间层(mid-level)、精细层(fine-level)。

中间层和精细层: 使用从粗到精的方式,先通过优化中层特征网络重建几何结构,然后使用精细层进行细节优化。

中间层解码p点占用概率:

精细层: 使用残差的方式细化细节特征,因此精细层的特征解码器的输入为中间层特征和精细层特征:

一个点的最终占用值如下:

粗糙层: 的目的是捕捉场景的高级几何图形(例如,墙壁、地板等),并独立于中间层和精细层进行优化。粗糙网格的目标是能够预测观测到的几何图形(在中间层/精细层中进行编码)之外的近似占用值,即使每个粗糙体素只有被部分观测。占用值计算与中间层网格类似:

虽然我们主要对场景几何感兴趣,但我们也对颜色信息进行编码,使我们能够渲染RGB图像,这为跟踪提供了额外的信号,因此使用了一个单独的特征网络和解码器建模场景外观:

注意,与iMAP类似,这可能会导致遗忘问题,而且颜色只在局部保持一致。如果想可视化整个场景的颜色,它可以作为一个后期处理步骤进行全局优化。

网络设计: 对于所有的MLP多层感知机解码器,使用了32维隐藏特征和5个全连接块。除了粗糙层的几何表示外,在MLP解码器的输入之前,在点p处应用了一个可学习的高斯位置编码,这允许发现几何形状和外观的高频细节。

3.2 深度和颜色渲染 Depth and Color Rendering

给定相机内参和当前相机的位姿,我们可以计算一个像素坐标的视线朝向。我们首先沿着射线上的个点进行分层采样,并且在深度值附近均匀采样个点,每条射线共采样个点,每个采样点的计算方式为:,o为相机原点,di为每个采样点的深度。对于每个点,可以使用上面的式子计算它们的粗糙层占用值、精细层的占用值,和颜色值。

在pi点射线的终止概率为,粗糙层:,精细层:。

最后,对于每条射线,粗糙层和精细层的深度和颜色都可以渲染为:

此外,沿着射线的深度方差计算为:

3.3 建图和跟踪Mapping and Tracking

建图(Mapping): 为了优化3.1小节中提到的场景表示,从当前帧和所选的关键帧中统一采样总M个像素。接下来,将以一种分阶段的方式来执行优化以最小化几何损失(geometric loss)和光度损失(photometric loss)。

几何损失是在粗糙层和精细层上观测深度和预测深度之间的L1损失:

光度损失也是M个采样像素的渲染和观测颜色值之间的L1损失:

第一阶段,使用几何损失优化中间层的特征网络;第二阶段以相同的精细几何损失共同优化中间层和精细层的;最后,进行局部束调整(BA),共同优化各级特征网格、颜色解码器以及K个选定关键帧的摄像机外部参数{Ri, ti}:

这种多阶段优化方案可以更好地收敛,因为更高分辨率的外观和精细层特征可以依赖于来自中间层特征网格的已经细化的几何形状

相机跟踪(Camera Tracking): 除了优化场景表示之外,还并行运行相机跟踪来优化当前帧的相机姿态,比如,旋转矩阵和平移向量。最后,在当前帧中采样个像素并应用相同的光度损失,但使用了修改后的几何损失:

这种改进的几何损失计算方法降低了一些不确定区域的权重,比如,边缘区域。最后将摄像机跟踪表述为最小化问题:

粗糙层的特征网格能够对场景几何图形进行短程预测。当相机移动到以前未观察到的区域时,这种推算出的几何形状为跟踪提供了一个有意义的信号。使其对突然帧丢失或相机快速相机移动更加鲁棒。

对动态物体的鲁棒性(Robustness to Dynamic Objects): 为了使优化在跟踪过程中对动态对象更加鲁棒,过滤了深度/颜色重渲染损失较大的像素。具体操作时:删除以公式(12)计算的损失大于当前帧中所有像素的10倍损失中值的像素。下图显示了一个动态对象被忽略的例子。

3.4 关键帧选取 Keyframe Selection

按照与iMAP相同的策略,维护一个全局关键帧列表,根据信息增益逐步添加新的关键帧。然而,与iMAP相比,本文只包含在优化场景几何图形时,与当前帧有视觉重叠的关键帧。这种关键帧选择策略不仅确保了当前视图之外的几何图形保持静态,而且还导致了一个非常有效的优化问题,因为每次只优化必要的参数。具体步骤如下:

  1. 随机采样像素,并使用优化的相机姿态反向投影对应的深度。

  2. 将点云投影到全局关键帧列表中的每个关键帧上。

  3. 从那些有投影点的关键帧中,随机选择K-2帧,在加上最近的关键帧和当前帧,形成总共K个活动帧。

4 实验与结果

4.1 实验设置

数据集Datasets: 考虑了5个通用数据集:Replica、ScanNet、TUM RGB-D数据集、Co-Fusion数据集,以及一个有多个房间的自己获取的大公寓。遵循TUM RGB-D数据集相同的预处理步骤。

度量指标Metrics: 同时使用二维和三维的度量值来评估场景的几何图形。对于二维度量,评估来自重建网格和GT真值网格的1000个随机采样的深度图上的L1损失;对于3D指标,遵循iMAP中,并考虑精度Accuracy[cm]、完成度Completion[cm]和完成率[<5cm%]。对于相机跟踪的评估,使用ATE RMSE。如果没有另外指定,在默认情况下,使用5次运行的平均结果

4.2 建图和跟踪的评估

Replica数据集上的评估。 结果如表1所示,NICE-SLAM在几乎所有指标上都显著优于baseline基准方法,同时保持了合理的内存消耗。定性地说,可以从下图中看到,提出的方法产生了更清晰的几何形状和更少的伪影。

UM RGB-D数据集上对相机跟踪性能的评估。 结果如表2所示,提出的方法优于iMAP和DI-Fusion,尽管提出的算法更适合大场景。可以注意到,针对于跟踪最好的方法(BAD-SLAM,ORB-SLAM2)仍然优于基于隐式场景表示的方法(iMAP和提出的方法)。然而,提出的方法显著地减少了这两类方法之间的差距,同时保留了隐式表示的表征优势。

ScanNet数据集上的评估。 从ScanNet中选择多个大型场景来基准测试不同方法的可扩展性。对于下图中所示的几何形状,可以清楚地注意到,比起TSDF-Fusion、DI-Fusion和iMAP∗,NICE-SLAM产生了更清晰、更详细的几何形状。在跟踪方面,可以观察到,iMAP∗和DI-Fusion要么完全失败,要么引入了较大的漂移,而提出的方法成功地重建了整个场景。从定量上来说,跟踪结果也明显比DI-Fusion和iMAP∗更准确,如表3所示。

在更大场景数据集上的评估。 为了评估提出的方法的可扩展性,在一个有多个房间的大公寓中捕获了一个序列。下图显示了使用NICE-SLAM、DI-Fusion和iMAP*获得的重建结果。作为参考,还展示了在Open3D中使用离线工具Redwoud的三维重建。可以看到,NICE-SLAM与离线方法具有相似的结果,而iMAP∗和DI-FusioN无法重建整个序列。

4.3 性能分析

计算复杂度Computation Complexity。 首先,比较了查询一个3D点的颜色和占用率/体积密度所需的浮点操作(FLOPs)的数量,见表4。提出的方法只需要iMAP 1/4的FLOP。值得一提的是,即使在非常大的场景中,提出的方法中的流程也保持不变。相比之下,由于iMAP中使用单一MLP,MLP的容量限制可能需要更多的参数,这就导致更多的FLOPS。

运行时Runtime。 表4中还比较了使用相同数量的像素样本进行跟踪和映射的运行时(Mt = 200用于跟踪,M = 1000用于映射)。可以看到,提出的方法在跟踪和映射方面比iMAP快2倍和3倍。这表明与单个重型MLP解码器相比,使用带有浅MLP解码器的特征网格具有优势。

几何预测和孔洞填充Geometry Forecast and Hole Filling。 如下图所示,由于使用粗糙层场景,提出的方法能够补全未观察到的场景区域。相比之下,由iMAP∗重建的看不见的区域噪声很大,因为在iMAP∗中没有编码场景先验知识。

4.4 消融实验

这一部分主要研究分层结构的选择和颜色表示的重要性。

分层结构Hierarchical Architecture。 下图将提出的分层架构与其他两种情况进行比较:a)一个特征网格与提出的精细层表示具有相同的分辨率(只有高分辨率);b)一个具有中间层分辨率的特征网格(只有低分辨率)。当精细层的表示参与优化时,提出的层次结构可以快速地添加几何细节,这也导致了更好的收敛性。

局部光束平差Local BA。 在ScanNet上验证了局部BA的有效性。如果不联合优化K个关键帧的相机姿态和场景表示(在表5中没有局部BA),则相机跟踪不仅精度明显降低,而且可靠性也较差。

颜色表示Color Representation。 在表5中,比较了没有光度损失的方法。这表明,虽然由于有限的优化预算和缺乏样本,估计的颜色并不完美,学习这种颜色表示仍然对精确的相机跟踪起着重要的作用。

关键帧选取KeyFrame Selection。 使用iMAP的关键帧选择策略(表5中的w/iMAP关键帧)来测试我们的方法,其中他们从整个场景中选择关键帧。这对于iMAP是必要的,以防止其简单的多层感知机忘记了之前的几何形状。然而,这也会导致收敛缓慢和不准确的跟踪。

5 总结

本文提出了NICE-SLAM,一种稠密视觉SLAM方法,它结合了神经隐式表示的优势和基于层次网格的场景表示的可扩展性。实验表明,与单个大的多层感知机MLP的场景表示相比,所提出的方法不仅保证了精细的建图和高的跟踪精度,但由于局部场景更新的好处,速度更快和计算更少。

3D视觉交流群

大家好,群里会第一时间发布3D计算机视觉方向的最前沿论文解读和交流分享,主要方向有:

视觉SLAM、激光SLAM、ORB-SLAM、Vins-Fusion、LOAM/LeGo-LOAM、cartographer、VIO、语义SLAM、滤波算法、多传感器融合、多传感器标定、MSCKF、动态SLAM、MOT SLAM、NeRF-SLAM、FAST-LIO、LVI-SAM、LIO-SAM、事件相机、GPS/RTK/UWB/IMU/码盘/TOF(iToF、dToF)、激光雷达、气压计、毫米波雷达、RGB-D相机、超声波等、机器人导航、相机标定、立体匹配、三维点云、结构光(面/线/散斑)、机械臂抓取(2D/3D)、2D缺陷检测、3D缺陷检测、6D位姿估计、相位偏折术、Halcon、光场重建、摄影测量、阵列相机、偏振三维测量、光度立体视觉、激光雷达、NeRF、多视图几何、OpenMVS、MVSNet、colmap、纹理贴图、深度估计、Transformer、毫米波/激光雷达/视觉摄像头传感器、多传感器标定、多传感器融合、自动驾驶综合群等、目标检测、3D目标检测、路径规划、轨迹预测、3D点云、3D点云分割、模型部署、车道线检测、Occupancy、目标跟踪、四旋翼建模、无人机飞控、求职、硬件选型、视觉产品落地、最新论文、3D视觉最新产品等综合交流群。

添加微信: dddvision,备注:研究方向+学校/公司+昵称(如3D点云+清华+小草莓), 小助理会拉你入群。

资源下载: