SLAM文献之-NICE-SLAM: Neural Implicit Scalable Encoding for SLAM

《NICE-SLAM: Neural Implicit Scalable Encoding for SLAM》是 2022 年 CVPR 收录的一篇开创性论文,提出了一种将 神经隐式表示层次化体素编码 相结合的稠密 RGB-D SLAM 系统。下面将系统性介绍其算法原理、关键策略、公式推导思路以及创新点。


一、算法整体框架概览

NICE-SLAM 结合了以下几个模块:

  1. Tracking 模块:使用基于渲染的 Pose 优化方法进行相机位姿估计;
  2. Mapping 模块:通过神经网络学习隐式场景几何(SDF)和颜色;
  3. 层次化体素网格表示:采用 coarse-to-fine 层次化的 feature grid 编码场景信息;
  4. 先验引导:通过预训练的几何 auto-decoder 引导几何表示学习。

二、核心公式与推导思路

1. 神经隐式场景表示(Neural Implicit Representation)

使用一个多层感知机(MLP)建模 场景几何(SDF)颜色

f θ ( x , z ( x ) ) → ( SDF ( x ) , RGB ( x ) ) f_{\theta}(x, \mathbf{z}(x)) \rightarrow \left( \text{SDF}(x), \text{RGB}(x) \right) fθ(x,z(x))(SDF(x),RGB(x))

其中:

  • x ∈ R 3 x \in \mathbb{R}^3 xR3:查询点的三维坐标;
  • z ( x ) \mathbf{z}(x) z(x):从 feature grid 中获取的局部特征;
  • θ \theta θ:神经网络参数。

2. 层次化体素特征编码(Hierarchical Feature Grid)

场景被划分为 coarse → mid → fine 的三个分辨率网格,每一层都有其独立的特征张量 F l \mathcal{F}_l Fl

z ( x ) = ϕ ( x , F c o a r s e , F m i d , F f i n e ) \mathbf{z}(x) = \phi(x, \mathcal{F}_{coarse}, \mathcal{F}_{mid}, \mathcal{F}_{fine}) z(x)=ϕ(x,Fcoarse,Fmid,Ffine)

ϕ \phi ϕ:三线性插值函数。

3. Tracking:基于渲染的 Pose 优化

通过将当前帧渲染为深度图 D ^ \hat{D} D^,并与观测深度图 D D D 对比,优化相机位姿:

min ⁡ T ∈ S E ( 3 ) ∑ x ∈ Ω ∥ D ( x ) − D ^ ( x ; T , f θ ) ∥ 2 \min_{T \in SE(3)} \sum_{x \in \Omega} \left\| D(x) - \hat{D}(x; T, f_{\theta}) \right\|^2 TSE(3)minxΩ D(x)D^(x;T,fθ) 2

渲染深度图通过体渲染(volume rendering)方式进行,采用沿光线查找零交点的方法(Zero-Crossing of SDF)。

4. Mapping:反向传播优化 feature grid

对于每一帧,将其加入优化窗口,反向传播误差更新:

  • MLP 参数 θ \theta θ
  • Grid 特征 F l \mathcal{F}_l Fl

目标是最小化所有帧的重建误差,包括:

  • RGB 重建误差;
  • SDF → TSDF 转换后的深度误差;
  • Eikonal 正则项(保持 SDF 梯度为 1)。

5. Eikonal Loss(SDF 正则化)

L e i k o n a l = E x [ ( ∥ ∇ x SDF ( x ) ∥ 2 − 1 ) 2 ] \mathcal{L}_{eikonal} = \mathbb{E}_{x} \left[ \left( \|\nabla_x \text{SDF}(x)\|_2 - 1 \right)^2 \right] Leikonal=Ex[(xSDF(x)21)2]

该项确保 SDF 是合法的 signed distance 函数(单位梯度)。


三、主要创新点

创新点说明
多尺度体素特征(Hierarchical Grid)结合 coarse/mid/fine 三层特征,实现高效可扩展的场景编码;可适应大规模环境
引入预训练几何先验在初始阶段将 auto-decoder 生成的 SDF 模型作为初始几何,有助于早期收敛
Alternating Tracking/Mapping 策略每帧 alternately 进入 tracking → mapping 模块,提升了实时性能与精度
稀疏体素更新仅在相机视野范围内更新特征,提高效率
高效的体渲染利用 SDF 隐式曲面投影而非显式体素,实现更精细的几何细节表达

四、主要部分公式推导

  1. SDF 渲染过程推导(Ray Marching)
  2. TSDF 监督公式与损失函数
  3. Pose 优化中的梯度推导(反向传播到位姿)

4.1、SDF 渲染过程推导

1、 背景:使用隐式函数表示表面

隐式表面用 Signed Distance Function(SDF)定义:

$$
\text{SDF}(x) =
\begin{cases}
< 0 & \text{inside surface} \
= 0 & \text{on surface} \

0 & \text{outside surface}
\end{cases}
$$

目标是获取每条光线上与 SDF = 0 曲面的交点,来渲染深度。


2、 Ray Marching (零交点查找)

对每个像素 u ∈ Ω u \in \Omega uΩ,从相机出发发出一条光线:

r ( t ) = o + t ⋅ d , t ∈ [ t m i n , t m a x ] r(t) = o + t \cdot d, \quad t \in [t_{min}, t_{max}] r(t)=o+td,t[tmin,tmax]

  • o o o:相机中心;
  • d d d:归一化光线方向(通过内参和像素坐标计算)。

沿这条光线采样多个点:

x i = r ( t i ) , t i = t 0 + i ⋅ Δ t x_i = r(t_i), \quad t_i = t_0 + i \cdot \Delta t xi=r(ti),ti=t0+iΔt

查找某一段 [ t i , t i + 1 ] [t_i, t_{i+1}] [ti,ti+1],满足:

SDF ( x i ) ⋅ SDF ( x i + 1 ) < 0 \text{SDF}(x_i) \cdot \text{SDF}(x_{i+1}) < 0 SDF(xi)SDF(xi+1)<0

即过零点。可使用 线性插值 获取交点:

t ∗ = t i + SDF ( x i ) SDF ( x i ) − SDF ( x i + 1 ) ⋅ Δ t t^* = t_i + \frac{\text{SDF}(x_i)}{\text{SDF}(x_i) - \text{SDF}(x_{i+1})} \cdot \Delta t t=ti+SDF(xi)SDF(xi+1)SDF(xi)Δt

得到深度值:

D ^ ( u ) = ∥ r ( t ∗ ) − o ∥ = t ∗ \hat{D}(u) = \|r(t^*) - o\| = t^* D^(u)=r(t)o=t


3 、深度渲染损失(Tracking Loss)

L depth = ∑ u ∈ Ω ( D ^ ( u ; T ) − D ( u ) ) 2 \mathcal{L}_{\text{depth}} = \sum_{u \in \Omega} \left( \hat{D}(u; T) - D(u) \right)^2 Ldepth=uΩ(D^(u;T)D(u))2

  • D ^ ( u ; T ) \hat{D}(u; T) D^(u;T):根据当前相机姿态 T ∈ S E ( 3 ) T \in SE(3) TSE(3) 渲染出的深度;
  • D ( u ) D(u) D(u):实测深度图。

4.2、TSDF 监督损失推导(Mapping Loss)

监督目标:使网络估计的 SDF 与 ground truth 的 TSDF 相匹配。

1、 TSDF 定义(截断 Signed Distance)

真实 TSDF:

TSDF g t ( x ) = sign ( D ( u ) − ∥ x − o ∥ ) ⋅ min ⁡ ( ∣ D ( u ) − ∥ x − o ∥ ∣ τ , 1.0 ) \text{TSDF}_{gt}(x) = \text{sign}(D(u) - \|x - o\|) \cdot \min\left( \frac{|D(u) - \|x - o\||}{\tau}, 1.0 \right) TSDFgt(x)=sign(D(u)xo)min(τD(u)xo∥∣,1.0)

  • τ \tau τ:截断距离;
  • x x x:投影自像素 u u u
  • D ( u ) D(u) D(u):深度图中真实值。

神经网络预测:

SDF ^ ( x ) = f θ ( x , z ( x ) ) \hat{\text{SDF}}(x) = f_\theta(x, \mathbf{z}(x)) SDF^(x)=fθ(x,z(x))

2、TSDF 监督损失函数

L TSDF = ∑ x ∈ V ( SDF ^ ( x ) − TSDF g t ( x ) ) 2 \mathcal{L}_{\text{TSDF}} = \sum_{x \in \mathcal{V}} \left( \hat{\text{SDF}}(x) - \text{TSDF}_{gt}(x) \right)^2 LTSDF=xV(SDF^(x)TSDFgt(x))2

  • V \mathcal{V} V:当前可见体素集合。
3 、总 Mapping Loss 结构

L map = L TSDF + λ e i k o n a l ⋅ L eikonal + λ r g b ⋅ L r g b \mathcal{L}_{\text{map}} = \mathcal{L}_{\text{TSDF}} + \lambda_{eikonal} \cdot \mathcal{L}_{\text{eikonal}} + \lambda_{rgb} \cdot \mathcal{L}_{rgb} Lmap=LTSDF+λeikonalLeikonal+λrgbLrgb


4.3、Pose 优化中的梯度推导(Tracking)

1、 优化目标

我们要优化相机位姿 T ∈ S E ( 3 ) T \in SE(3) TSE(3)

T = [ R t 0 1 ] , R ∈ S O ( 3 ) ,   t ∈ R 3 T = \begin{bmatrix} R & t \\ 0 & 1 \end{bmatrix}, \quad R \in SO(3),\ t \in \mathbb{R}^3 T=[R0t1],RSO(3), tR3

优化目标是最小化渲染误差:

L ( T ) = ∑ u ( D ^ ( u ; T ) − D ( u ) ) 2 \mathcal{L}(T) = \sum_{u} \left( \hat{D}(u; T) - D(u) \right)^2 L(T)=u(D^(u;T)D(u))2


2、 参数化位姿增量(李代数)

采用李代数 ξ ∈ R 6 \xi \in \mathbb{R}^6 ξR6 表示增量:

T new = exp ⁡ ( ξ ^ ) ⋅ T old T_{\text{new}} = \exp(\hat{\xi}) \cdot T_{\text{old}} Tnew=exp(ξ^)Told

其中 exp ⁡ ( ξ ^ ) ∈ S E ( 3 ) \exp(\hat{\xi}) \in SE(3) exp(ξ^)SE(3) 是指数映射。


3、 使用链式法则计算梯度

目标是:

∂ L ∂ ξ = ∑ u 2 ( D ^ ( u ; ξ ) − D ( u ) ) ⋅ ∂ D ^ ( u ; ξ ) ∂ ξ \frac{\partial \mathcal{L}}{\partial \xi} = \sum_u 2 \left( \hat{D}(u; \xi) - D(u) \right) \cdot \frac{\partial \hat{D}(u; \xi)}{\partial \xi} ξL=u2(D^(u;ξ)D(u))ξD^(u;ξ)

而渲染深度 D ^ \hat{D} D^ 依赖于光线上 SDF 的零交点 → 所以反向传播路径为:

ξ → T(ξ) → x_cam = T·x_world → SDF(x) → hatD → L

可通过 PyTorch 的自动求导或手动反推链式导数实现。


总结表

模块公式说明
SDF 渲染 t ∗ = t i + SDF ( x i ) SDF ( x i ) − SDF ( x i + 1 ) ⋅ Δ t t^* = t_i + \frac{\text{SDF}(x_i)}{\text{SDF}(x_i) - \text{SDF}(x_{i+1})} \cdot \Delta t t=ti+SDF(xi)SDF(xi+1)SDF(xi)Δt从零交点处计算深度
TSDF 监督 L T S D F = ∑ ( SDF ^ − TSDF g t ) 2 \mathcal{L}_{TSDF} = \sum \left( \hat{\text{SDF}} - \text{TSDF}_{gt} \right)^2 LTSDF=(SDF^TSDFgt)2显式 TSDF 引导隐式学习
Pose 优化 ∂ L ∂ ξ \frac{\partial \mathcal{L}}{\partial \xi} ξL利用 SE(3) 李代数优化位姿

四、实验与性能

  • 在 Replica, ScanNet, TUM RGB-D 等数据集上进行了测试;
  • 比较对象包括:iMAP, Vox-Fusion, NICE-SLAM (ablation),在重建质量和运行效率上优于对手;
  • 重建分辨率达到 512³,支持在线大规模场景建图。

五、开源资源


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

点云SLAM

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值