论文信息
标题:NICE-SLAM: Neural Implicit Scalable Encoding for SLAM
作者:Zihan Zhu, Songyou Peng,Viktor Larsson — Zhejiang University
来源:CVPR
代码:https://pengsongyou.github.io/nice-slam
Abstract
神经隐式(Neural implicit representations)表示最近在同步定位和地图绘制(SLAM)方面有一定的进展,但现有方法会产生过度平滑的场景重建,并且难以扩展到大型场景。这些限制主要是由于其简单的全连接网络架构,未在观测中纳入本地信息。
我们提出了 NICE-SLAM,这是一种密集 SLAM 系统,通过引入分层场景表示来合并多级局部信息。使用预先训练的几何先验优化这种表示,可以实现大型室内场景的详细重建。与最近的神经隐式 SLAM 系统相比,我们的方法更具可扩展性、高效性和鲁棒性。
Introduction
现有方法的缺陷
传统的密集视觉SLAM系统[29,41,58,59]满足实时要求并且可以在大规模场景中使用,但它们无法对未观察到的区域进行合理的几何估计。
基于学习的 SLAM 方法 [3,12,47,67] 获得了一定水平的预测能力,因为它们通常在特定于任务的数据集上进行训练。此外,基于学习的方法往往可以更好地处理噪声和异常值。然而,这些方法通常仅适用于具有多个对象的小场景。
iMAP [46] 的关键限制因素源于它使用单个多层感知器 (MLP) 来表示整个场景,而该场景只能通过每个新的、可能部分的 RGB-D 观察进行全局更新。相比之下,最近的工作[37, 48]表明,建立多级基于网格的特征有助于保留几何细节并能够重建复杂场景,但这些都是离线方法,没有实时能力。
主要贡献
• 我们推出NICE-SLAM,这是一种密集的RGB-D SLAM 系统,具有实时能力、可扩展性、预测性,并且对各种具有挑战性的场景具有鲁棒性。
• NICE-SLAM 的核心是分层的、基于网格的神经隐式编码。与全局神经场景编码相比,这种表示允许局部更新,这是大规模方法的先决条件。
• 我们对各种数据集进行了广泛的评估,这些数据集在绘图和跟踪方面表现出了竞争性的性能。
Related Work
Dense Visual SLAM
地图表示可分为两类:以地图为中心(view-centric)和以世界为中心(world-centric)
view-centric:
将 3D 几何体锚定到特定关键帧,通常在密集环境中表示为深度图。
这一类别的早期例子之一是 DTAM 。由于其简单性,DTAM 已广泛应用于许多最新的基于学习的 SLAM 系统中。例如,[54, 68] 回归深度和姿势更新。 DeepV2D 类似地在回归深度和姿态估计之间交替,但使用测试时优化。 BA-Net 和 DeepFactors 通过使用一组基础深度图简化了优化问题。还有一些方法,例如 CodeSLAM 、SceneCode 和 NodeSLAM ,它们优化了解码为关键帧或对象深度图的潜在表示。 DROID-SLAM 使用回归光流来定义几何残差以进行细化。 TANDEM 将多视图立体与 DSO 结合起来,形成实时密集 SLAM 系统。
word-centric:
将 3D 几何图形锚定在统一的世界坐标中,并且可以进一步分为面元 和体素网格,通常存储占用或 TSDF 值 。体素网格已广泛用于 RGB-D SLAM,例如 KinectFusion 。
Neral Implict Representations(神经隐式表示)
神经隐式表示在对象几何表示、场景完成、新颖视图合成 以及生成建模中有应用。最近的一些论文尝试使用 RGB-(D) 输入来预测场景级几何,但它们都假设给定的相机姿势。另一些工作解决了相机位姿优化问题,但它们需要相当长的优化过程,不适合实时应用。
给定 RGB-D 序列,IMAP引入了实时密集 SLAM 系统,该系统使用单个多层感知器 (MLP) 来紧凑地表示整个场景。然而,由于单个 MLP 的模型容量有限,iMAP 无法生成详细的场景几何形状和准确的相机跟踪,特别是对于较大的场景。
Method
图 2. 系统概览。我们的方法采用 RGB-D 图像流作为输入,并以分层特征网格的形式输出相机姿势以及学习到的场景表示。从右到左,我们的管道可以解释为生成模型,它根据给定的场景表示和相机姿势渲染深度和彩色图像。在测试时,我们通过可微渲染器(从左到右)反向传播图像和深度重建损失来解决逆问题,从而估计场景表示和相机姿势。两个实体在交替优化中进行估计: Mapping:反向传播仅更新分层场景表示;Tracking:反向传播仅更新相机姿态。为了更好的可读性,我们将用于几何编码的精细网格与同等大小的颜色网格结合在一起,并将它们显示为具有两个属性(红色和橙色)的一个网格。
Hierarchical Scene Representation(层次化场景表示)
几何形状被编码为三个特征网络 ϕ θ l \phi _\theta ^l ϕθl及其对应的MLP解码器 f l f^l fl,其中 l ∈ { 0 , 1 , 2 } l \in \{0,1,2\} l∈{0,1,2}分别指coarse、mid、fine-level
场景外观使用单特征网络 ψ ω \psi _\omega ψω和解码器 g ω g_\omega gω进行建模
θ \theta θ和 ω \omega ω表示几何和颜色的可优化参数,即网格中的特征和颜色解码器中的权重。
Mid-&Fine-level Geometric Representation
在重建过程中,我们以从粗到细的方法使用这两个网格,首先通过优化中级特征网格来重建几何形状,然后使用精细级进行细化。
在实现中,我们使用边长分别为 32cm 和 16cm 的voxel grid(体素网格),除了 TUM RGBD [45],我们使用 16cm 和 8cm。对于mid-level,使用相关的 MLP
f
1
f^1
f1 将特征直接解码为占用值。对于任何点
p
∈
R
3
\textbf{p} \in \mathbb{R}^3
p∈R3,我们得到的占用率为
o
p
1
=
f
1
(
p
,
ϕ
θ
1
(
p
)
)
o_{\textbf{p}}^1=f^1(\textbf{p},\phi ^1_{\theta}(\textbf{p}))
op1=f1(p,ϕθ1(p))
其中
o
p
1
o_{\textbf{p}}^1
op1表示特征网格在 p 点进行三线性插值。
为了捕获场景几何中较小的高频细节,我们以残差方式添加精细级别的特征。特别地,精细级特征解码器将相应的中级特征和精细级特征两者作为输入,并输出相对于中级占用率的偏移,即:
Δ
o
p
1
=
f
2
(
p
,
ϕ
θ
1
(
p
)
,
ϕ
θ
2
(
p
)
)
\Delta o_{\textbf{p}}^1=f^2(\textbf{p},\phi ^1_{\theta}(\textbf{p}),\phi ^2_{\theta}(\textbf{p}))
Δop1=f2(p,ϕθ1(p),ϕθ2(p))
最终一个点的占用率为:
o
p
=
o
p
1
+
Δ
o
p
1
o_{\textbf{p}}=o_{\textbf{p}}^1+\Delta o_{\textbf{p}}^1
op=op1+Δop1
我们固定了预训练解码器 f 1 f^1 f1 和 f 2 f^2 f2 ,并且在整个优化过程中仅优化特征网格 ϕ θ 1 \phi ^1_{\theta} ϕθ1和 ϕ θ 2 \phi ^2_{\theta} ϕθ2 ,这有助于稳定优化并学习一致的几何形状。
Coarse-level Geometric Representation
粗级特征网格旨在捕获场景的高级几何形状(例如墙壁、地板等),并独立于中级和精细级进行优化。
粗网格的目标是能够预测观察到的几何形状(在中/精细级别中编码)之外的近似占用值,即使每个粗体素仅被部分观察到。为此,我们在实现中使用了非常低的分辨率,边长为 2m。与中级网格类似,我们通过对特征进行插值并通过 MLP
f
0
f^0
f0 直接解码为占用值,即:
o
p
0
=
f
0
(
p
,
ϕ
θ
0
(
p
)
)
o_{\textbf{p}}^0=f^0(\textbf{p},\phi ^0_{\theta}(\textbf{p}))
op0=f0(p,ϕθ0(p))
Pre-training Feature Decoders
在我们的框架中,我们使用三种不同的固定 MLP 将网格特征解码为占用值。粗级和中级解码器作为 ConvONet [37] 的一部分进行预训练,该网络由 CNN 编码器和 MLP 解码器组成。我们使用预测值和真实值之间的二进制交叉熵损失来训练编码器/解码器。
训练后,我们仅使用解码器 MLP ,因为我们将直接优化特征以适应重建管道中的观察结果。
使用相同的策略来预训练精细级解码器,只是我们在输入到解码器之前简单地将中级特征 ϕ θ 1 ( p ) \phi ^1_{\theta}(\textbf{p}) ϕθ1(p)与精细级特征 ϕ θ 2 ( p ) \phi ^2_{\theta}(\textbf{p}) ϕθ2(p)连接起来。
Color Representation
为了对场景中的颜色进行编码,我们应用另一个特征网格 ψ ω \psi _\omega ψω 和解码器 g ω g _\omega gω: c p = g ω ( p , ψ ω ( p ) ) c_p=g _\omega(\textbf{p},\psi_\omega(\textbf{p})) cp=gω(p,ψω(p)), 其中 ω 表示优化期间的可学习参数。
Network Design
对于所有 MLP 解码器,我们使用 32 个隐藏特征维度和 5 个全连接块。除了粗级几何表示之外,我们在作为 MLP 解码器的输入之前对 p 应用可学习的高斯位置编码 。
Depth and Color Rendering
给定相机内在参数和当前相机位姿,我们可以计算像素坐标的观察方向 r \textbf{r} r。我们首先沿着这条射线采样 N s t r a t N_{strat} Nstrat点进行分层采样,同时也在深度附近均匀采样 N i m p N_{imp} Nimp点。总共,我们对每条射线采样 N = N s t r a t + N i m p N = N_{strat} + N_{imp} N=Nstrat+Nimp 个点。
p i = o + d i r , i ∈ { 1 , . . . , N } \textbf{p}_i=\textbf{o}+d_i\textbf{r},i \in \{1,...,N\} pi=o+dir,i∈{1,...,N}表示给定相机原点 o \textbf{o} o 的射线 r \textbf{r} r 上的采样点, d i d_i di 对应于 p i \textbf{p}_i pi 沿该射线的深度值。
计算出每个点的粗级占用概率 o p i 0 o_{p_i}^0 opi0、精细级占用概率 o p i o_{p_i} opi和颜色值 c p i c_{p_i} cpi。
将点 p i \textbf{p}_i pi 处的射线终止概率建模为粗略级别的 ω i c = o p i 0 ∏ j = 1 i − 1 ( 1 − o p j 0 ) \omega_i^c=o_{p_i}^0\prod_{j=1}^{i-1}(1-o_{p_j}^0) ωic=opi0∏j=1i−1(1−opj0) ,并且 ω i f = o p i ∏ j = 1 i − 1 ( 1 − o p j ) \omega_i^f=o_{p_i}\prod_{j=1}^{i-1}(1-o_{p_j}) ωif=opi∏j=1i−1(1−opj)为精细水平。
最后,对于每条光线,粗略和精细级别的深度以及颜色可以渲染为:
Mapping and Tracking
Mapping
为了优化 场景表示,我们从当前帧和选定的关键帧中均匀采样总共 M 个像素。接下来,我们以分阶段的方式进行优化,以最大限度地减少几何和光度损失。
几何损失只是粗略或精细级别的观测值和预测深度之间的 L1 损失:
光度损失也是 M 个采样像素的渲染颜色值和观察到的颜色值之间的 L1 损失:
- 第一阶段,我们使用等式(8)中的几何损失 L g f L^f_g Lgf仅优化中层特征网格 ϕ θ 1 \phi^1_θ ϕθ1。
- 接下来,我们使用相同的精细级深度损失 L g f L^f_g Lgf 联合优化中级和精细级 ψ θ 1 ψ^1_θ ψθ1、 ψ θ 2 ψ^2_θ ψθ2 特征。
- 最后,我们进行局部捆绑调整(BA)来联合优化各级特征网格、颜色解码器以及K个选定关键帧的相机外在参数{
R
i
,
t
i
R_i,t_i
Ri,ti},其中
λ
p
λ_p
λp是损失权重因子。
这种多阶段优化方案可以实现更好的收敛,因为更高分辨率的外观和精细级特征可以依赖于来自中级特征网格的已经细化的几何形状。
Camera Tracking
我们还运行并行相机跟踪来优化当前帧的相机姿势,即旋转和平移{R,t}。为此,我们对当前帧中的
M
t
M_t
Mt 像素进行采样,并使用与等式(9)相同的光度损失,以及修改后的几何损失:
相机跟踪最终被表述为以下最小化问题:
Robustness to Dynamic Objects
为了使优化在跟踪过程中对动态对象更加鲁棒,我们过滤了具有大深度/颜色重新渲染损失的像素。特别是,我们从优化中删除损失 Eq (12) 大于当前帧中所有像素的中值损失值 10 倍的任何像素。
图 6 显示了一个示例,其中动态对象被忽略,因为它不存在于渲染的 RGB 和深度图像中。
请注意,对于此任务,我们仅在映射过程中优化场景表示。在动态环境下联合优化相机参数和场景表示并非易事,我们认为这是一个有趣的未来方向。
Keyframe Selection
我们本着 iMAP [46] 的精神维护一个全局关键帧列表,我们根据信息增益逐步添加新的关键帧。然而,与 iMAP [46] 相比,我们在优化场景几何时仅包含与当前帧有视觉重叠的关键帧。
Experiments
我们考虑 5 个通用数据集:Replica [44]、ScanNet [13]、TUM RGB-D 数据集 [45]、Co-Fusion 数据集 [39],以及自捕获的具有多个房间的大型公寓。我们遵循与[53]中相同的 TUM RGB-D 预处理步骤。
** 这部分暂时先不关注
Conclusion
我们提出了 NICE-SLAM,这是一种密集视觉 SLAM 方法,它将神经隐式表示的优点与基于分层网格的场景表示的可扩展性结合起来。与具有单个大 MLP 的场景表示相比,我们的实验表明,我们的表示(微小的 MLP + 多分辨率特征网格)不仅保证了精细的映射和高跟踪精度,而且由于本地场景更新的好处。此外,我们的网络能够填充小孔并将场景几何形状外推到未观察到的区域,从而稳定相机跟踪。
Limitations
我们方法的预测能力仅限于粗略表示的规模。此外,我们的方法不执行闭环检测,这是一个有趣的未来方向。最后,尽管传统方法缺乏一些功能,但与基于学习的方法仍然存在需要弥补的性能差距。