[论文阅读-NeRF+SLAM]NeRF-SLAM:使用神经辐射场表征的实时稠密单目SLAM系统

NeRF-SLAM

NeRF-SLAM: Real-Time Dense Monocular SLAM with Neural Radiance Fields

第一个结合稠密单目SLAM层次化体素神经辐射场(hierarchical volumetric neural radiance fields)的3D场景重建算法,能实时地用图像序列实现准确的辐射场构建,并且不需要位姿或深度输入。

核心思想是,使用一个稠密单目SLAM pipeline来估计相机位姿稠密深度图以及它们的不确定度,用上述信息作为监督信号来训练NeRF场景表征

相关文献

Rosinol等人 基于方差对深度估计值赋予权重,然后将它们融合到体素表征中,从而构建准确的场景表征(3D网格)。

Rosinol et al. [23] further show that dense monocular SLAM can reconstruct faithful 3D meshes of the scene by weighting the depths estimated in dense SLAM by their marginal covariance, and subsequently fusing them in a volumetric representation

本文从上述工作中获得启发,用他们的方法来计算深度和位姿不确定度。但是将场景表征由 volumetric TSDF 换成了 hierarchical volumetric neural radiance field

Instant-NGP 用了 基于哈希的层次化体素表征 hash-based hierarchical volumetric representation 来表征场景,实现实时的神经辐射场训练。

Droid-SLAM 使用了SOTA的稠密光流估计架构(a state-of-the-art dense optical flow estimation architecture )作为视觉里程计,同时,使用了降采样后的深度图来规避维度问题。

Droid-SLAM avoids the dimensionality problem by using downsampled depth maps that are subsequently upsampled using a learned upsampling operator

本文用Droid-SLAM作为前端tracking frontend),使用了其预训练的权重

Method

本文算法包含trackingmapping两个并行运行的线程,其中 tracking 作为前端,使用稠密单目(dense monocular)SLAM估计稠密深度图(dense depth maps)和相机位姿,同时会输出对深度和位姿的不确定度估计;mapping 后端使用前端的输出信息作为监督,训练一个辐射场(radiance field),其损失函数是颜色误差(color loss)和带权重的深度误差(depth loss weighted by the depths’ marginal covariances),权重值由先前的不确定度得到。

[论文阅读-NeRF+SLAM]NeRF-SLAM:使用神经辐射场表征的实时稠密单目SLAM系统_第1张图片

Tracking : Dense SLAM with Covariance

跟踪线程使用Driod-SLAM,由每个关键帧计算 dense depth maps 和位姿。

  • 首先,计算两帧之间的稠密光流 p i j \bold p_{ij} pij 以及权重 Σ p i j \Sigma_{\bold p_{ij}} Σpij。这里使用的是与Raft类似的架构,其核心是 Convolutional GRU

  • 然后利用光流(flow)和权重作为测量值,建立BA问题,其中用逆深度图(inverse depth maps)表示每个关键帧的3D几何,最终可以转化为线性最小二乘问题,需要求解线性方程组 H x = b Hx=b Hx=b,即
    [ C E E T P ] [ Δ ξ Δ d ] = [ v w ] \begin{bmatrix}C&E\\E^T&P\end{bmatrix}\begin{bmatrix}\Delta\boldsymbol\xi\\\Delta\bold d\end{bmatrix}=\begin{bmatrix}\bold v\\\bold w\end{bmatrix} [CETEP][ΔξΔd]=[vw]

  • 为了解决这个线性最小二乘问题,先用 schur complement 方法将Hessian矩阵降维成 reduced camera matrix

    利用高斯消元法:
    [ I − E P − 1 0 I ] [ C E E T P ] [ Δ ξ Δ d ] = [ I − E P − 1 0 I ] [ v w ] [ C − E P − 1 E T 0 E T P ] [ Δ ξ Δ d ] = [ v − E P − 1 w w ] \begin{aligned}\begin{bmatrix}I&-EP^{-1}\\0&I\end{bmatrix}\begin{bmatrix}C&E\\E^T&P\end{bmatrix}\begin{bmatrix}\Delta\boldsymbol\xi\\\Delta\bold d\end{bmatrix}=\begin{bmatrix}I&-EP^{-1}\\0&I\end{bmatrix}\begin{bmatrix}\bold v\\\bold w\end{bmatrix}\\ \begin{bmatrix}C-EP^{-1}E^T&0\\E^T&P\end{bmatrix}\begin{bmatrix}\Delta\boldsymbol\xi\\\Delta\bold d\end{bmatrix}=\begin{bmatrix}\bold v-EP^{-1}\bold w\\\bold w\end{bmatrix} \end{aligned} [I0EP1I][CETEP][ΔξΔd]=[I0EP1I][vw][CEP1ETET0P][ΔξΔd]=[vEP1ww]
    这样,得到 reduced camera matrix H T = C − E P − 1 E T H_T=C-EP^{-1}E^T HT=CEP1ET

  • 然后采用 cholesky 分解,利用 front and back-substitution 求出位姿 T T T,然后再求出深度 D D D

    先求解 H T Δ ξ = v − E P − 1 w H_T\Delta\boldsymbol\xi=\bold v-EP^{-1}\bold w HTΔξ=vEP1w(使用cholesky分解),得到位姿更新量 Δ ξ = [ C − E P − 1 E T ] − 1 ( v − E P − 1 w ) \Delta\boldsymbol\xi=[C-EP^{-1}E^T]^{-1}(\bold v-EP^{-1}\bold w) Δξ=[CEP1ET]1(vEP1w)

    进而求深度更新量 Δ d = P − 1 ( w − E T Δ ξ ) \Delta\bold d=P^{-1}(\bold w-E^T\Delta\boldsymbol\xi) Δd=P1(wETΔξ)

    Cholesky分解求解线性方程组 A X = b AX=b AX=b

    1. A A A作cholesky分解( A A A需要时对称正定矩阵)
      A = L L T A=LL^T A=LLT

    2. 原线性方程转换为 L L T X = b LL^TX=b LLTX=b,令 L Y = b LY=b LY=b,求 Y Y Y
      Y = L − 1 b Y=L^{-1}b Y=L1b

    3. L L T X = L Y ⟶ L T X = Y LL^TX=LY\longrightarrow L^TX=Y LLTX=LYLTX=Y,求 X X X
      X = L − T Y X=L^{-T}Y X=LTY

  • 利用上一步计算出来的深度和位姿再一次计算光流 p i j = ∏ ( T i j ∏ − 1 ( p i , d i ) ) \bold p_{ij}=\prod(\bold T_{ij}\prod^{-1}(\bold p_i,\bold d_i)) pij=(Tij1(pi,di))并作为GRU的初始估计值

  • 然后,计算稠密深度图和位姿的边缘协方差(marginal covariances

    Σ d = P − 1 + P − T E T Σ T E P − 1 Σ T = ( L L T ) − 1 \begin{aligned} \Sigma_{\bold d}&=P^{-1}+P^{-T}E^T\Sigma_{\bold T}EP^{-1}\\ \Sigma_{\bold T}&=(LL^T)^{-1} \end{aligned} ΣdΣT=P1+PTETΣTEP1=(LLT)1

    这里是怎么计算的?

    根据协方差矩阵、信息矩阵与边际概率(即本文中提到的marginal covariances)、条件概率的关系, d , T \bold d,\bold T d,T的边际概率分别为协方差矩阵的左上元素和右下元素。

    而Hessian矩阵 H H H就是信息矩阵,即协方差矩阵的逆,因此,首先要求协方差矩阵即为 H H H求逆

    利用 Schur complement H H H进行分解以便于求逆:
    H = [ I E P − 1 0 I ] [ C − E P − 1 E T 0 0 P ] [ I 0 P − 1 E T I ] H=\begin{bmatrix}I&EP^{-1}\\0&I\end{bmatrix}\begin{bmatrix}C-EP^{-1}E^T&0\\0&P\end{bmatrix}\begin{bmatrix}I&0\\P^{-1}E^T&I\end{bmatrix} H=[I0EP1I][CEP1ET00P][IP1ET0I]
    求逆:
    Σ = H − 1 = [ I 0 − P − 1 E T I ] [ ( C − E P − 1 E T ) − 1 0 0 P − 1 ] [ I − E P − 1 0 I ] \Sigma=H^{-1}=\begin{bmatrix}I&0\\-P^{-1}E^T&I\end{bmatrix}\begin{bmatrix}(C-EP^{-1}E^T)^{-1}&0\\0&P^{-1}\end{bmatrix}\begin{bmatrix}I&-EP^{-1}\\0&I\end{bmatrix} Σ=H1=[IP1ET0I][(CEP1ET)100P1][I0EP1I]
    求对角元素:
    Σ T = ( C − E P − 1 E T ) − 1 = ( L L T ) − 1 Σ d = P − 1 E T ( C − E P − 1 E T ) − 1 E P − 1 + P − 1 = P − 1 + P − T E T Σ T E P − 1 \Sigma_{\bold T}=(C-EP^{-1}E^T)^{-1}=(LL^T)^{-1}\\ \Sigma_{\bold d}=P^{-1}E^T(C-EP^{-1}E^T)^{-1}EP^{-1}+P^{-1}=P^{-1}+P^{-T}E^T\Sigma_{\bold T}EP^{-1} ΣT=(CEP1ET)1=(LLT)1Σd=P1ET(CEP1ET)1EP1+P1=P1+PTETΣTEP1

最后,将上面计算出来的信息( D , T , Σ d , Σ T \bold D,\bold T,\Sigma_{\bold d},\Sigma_{\bold T} D,T,Σd,ΣT)作为监督来训练NeRF表征

Mapping: Probabilistic Volumetric NeRF

Mapping线程最小化建图损失函数 L M ( T , Θ ) \mathcal{L}_M(\bold T,\Theta) LM(T,Θ)
L M ( T , Θ ) = L r g b ( T , Θ ) + λ D L D ( T , Θ ) \mathcal{L}_M(\bold T,\Theta)=\mathcal{L}_{rgb}(\bold T,\Theta)+\lambda_D\mathcal{L}_D(\bold T,\Theta) LM(T,Θ)=Lrgb(T,Θ)+λDLD(T,Θ)
颜色损失函数为光度误差:
L r g b ( T , Θ ) = ∥ I − I ⋆ ( T , Θ ) ∥ 2 \mathcal{L}_{rgb}(\bold T,\Theta)=\Vert I-I^\star(\bold T,\Theta)\Vert^2 Lrgb(T,Θ)=II(T,Θ)2
其中图像中每个点的像素值的计算方法与原始NeRF论文一致:
C = ∑ i T i ( 1 − exp ⁡ ( − σ i δ i ) ) c i C=\sum_i\mathcal{T}_i(1-\exp(-\sigma_i\delta_i))\bold c_i C=iTi(1exp(σiδi))ci
透射率(transmittance)定义与NeRF一致:
T i = exp ⁡ ( − ∑ j < i σ j δ j ) \mathcal{T}_i=\exp(-\sum_{jTi=exp(j<iσjδj)
几何损失函数考虑到了深度的不确定度(即深度的marginal covariances) Σ D \Sigma_{\bold D} ΣD
L D ( T , Θ ) = ∥ D − D ⋆ ( T , Θ ) ∥ Σ D 2 \mathcal{L}_D(\bold T,\Theta)=\Vert D-D^\star(\bold T,\Theta)\Vert^2_{\Sigma_{\bold D}} LD(T,Θ)=DD(T,Θ)ΣD2
每一点的深度值由如下方式计算:
d ⋆ = ∑ i T i ( 1 − exp ⁡ ( − σ i δ i ) ) d i d^\star=\sum_i\mathcal{T}_i(1-\exp(-\sigma_i\delta_i))d_i d=iTi(1exp(σiδi))di
此外,MLP输入的形式参考了Instant-NGP(用于网络加速)

Architecture

Tracking 和 Mapping 线程间的交互

仅当有新关键帧生成时,Tracking线程将新关键帧的位姿、RGB图、深度图以及深度的边缘协方差传递给Mapping线程

只有在Tracking线程滑动窗口内的信息会被传给Mapping

关键帧的选取原则

滑动窗口法中最多包含8个关键帧

当前帧与先前关键帧之间的平均光流大于一定阈值时,会生成新的关键帧

Limitation

内存占用很大

你可能感兴趣的:(NeRF系列论文阅读,论文阅读,图像处理,计算机视觉,人工智能)