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),权重值由先前的不确定度得到。

Tracking : Dense SLAM with Covariance

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

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

  • 然后利用光流(flow)和权重作为测量值,建立BA问题,其中用逆深度图(inverse depth maps)表示每个关键帧的3D几何,最终可以转化为线性最小二乘问题,需要求解线性方程组Hx=bHx=bHx=b,即
    [CEETP][ΔξΔd]=[vw]\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} [CET​EP​][ΔξΔd​]=[vw​]

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

    利用高斯消元法:
    [I−EP−10I][CEETP][ΔξΔd]=[I−EP−10I][vw][C−EP−1ET0ETP][ΔξΔd]=[v−EP−1ww]\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} [I0​−EP−1I​][CET​EP​][ΔξΔd​]=[I0​−EP−1I​][vw​][C−EP−1ETET​0P​][ΔξΔd​]=[v−EP−1ww​]​
    这样,得到 reduced camera matrix HT=C−EP−1ETH_T=C-EP^{-1}E^THT​=C−EP−1ET

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

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

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

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

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

    2. 原线性方程转换为LLTX=bLL^TX=bLLTX=b,令LY=bLY=bLY=b,求YYY
      Y=L−1bY=L^{-1}b Y=L−1b

    3. LLTX=LY⟶LTX=YLL^TX=LY\longrightarrow L^TX=YLLTX=LY⟶LTX=Y,求XXX
      X=L−TYX=L^{-T}Y X=L−TY

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

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

    Σd=P−1+P−TETΣTEP−1ΣT=(LLT)−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​​=P−1+P−TETΣT​EP−1=(LLT)−1​

    这里是怎么计算的?

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

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

    利用 Schur complement 对HHH进行分解以便于求逆:
    H=[IEP−10I][C−EP−1ET00P][I0P−1ETI]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=[I0​EP−1I​][C−EP−1ET0​0P​][IP−1ET​0I​]
    求逆:
    Σ=H−1=[I0−P−1ETI][(C−EP−1ET)−100P−1][I−EP−10I]\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} Σ=H−1=[I−P−1ET​0I​][(C−EP−1ET)−10​0P−1​][I0​−EP−1I​]
    求对角元素:
    ΣT=(C−EP−1ET)−1=(LLT)−1Σd=P−1ET(C−EP−1ET)−1EP−1+P−1=P−1+P−TETΣTEP−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​=(C−EP−1ET)−1=(LLT)−1Σd​=P−1ET(C−EP−1ET)−1EP−1+P−1=P−1+P−TETΣT​EP−1

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

Mapping: Probabilistic Volumetric NeRF

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

Architecture

Tracking 和 Mapping 线程间的交互

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

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

关键帧的选取原则

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

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

Limitation

内存占用很大

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

  1. CNN-SLAM:学习深度预测的实时稠密单目SLAM

    文章转自(有图):http://bbit.vip/service/main.php?version=1&type=article&id=91 Abstract: 本文提出了一种利用CN ...

  2. 稠密单目SLAM,实时、稠密地重建三维场景

    以下内容来自从零开始机器人SLAM知识星球 每日更新内容 #论文# Probabilistic Volumetric Fusion for Dense Monocular SLAM 论文地址:http ...

  3. 用于自动驾驶的混合稀疏-稠密单目SLAM系统

    点击上方"计算机视觉工坊",选择"星标" 干货第一时间送达 作者丨泡椒味的口香糖 来源丨 GiantPandaCV 0. 引言 随着自动驾驶系统的推广,越来越多 ...

  4. 最佳论文!商汤提出手机端实时单目三维重建系统 | ISMAR 2020

    摘要 · 看点 商汤研究院和浙江大学 CAD&CG 国家重点实验室合作研发了一个手机端实时单目三维重建系统 Mobile3DRecon.与现有的基于 RGBD 的在线三维重建或离线生成表面网格 ...

  5. 论文阅读——《Online Photometric Calibration of Auto Exposure Video for Realtime Visual Odometry and SLAM》

    论文阅读--<Online Photometric Calibration of Auto Exposure Video for Realtime Visual Odometry and SLA ...

  6. 基于点云的语义单目SLAM

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者:robot L 链接:https://zhuanlan.zhihu.com/p/13043758 ...

  7. DeepFusion:基于单视图深度和梯度预测的单目SLAM实时稠密三维重建

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 标题:DeepFusion: Real-Time Dense 3D Reconstruction fo ...

  8. ORB-SLAM:精确多功能单目SLAM系统

    ORB-SLAM: a Versatile and Accurate Monocular SLAM System Taylor Guo, 2016年3月18日-9:00 原文发表于:IEEE Tran ...

  9. 2017CVPR NID-SLAM:基于归一化信息距离的鲁棒单目SLAM系统

    原作:Geoffrey Pascoe 翻译:Frank 转载请注明出处 水平有限,错误请指出 NID-SLAM:基于归一化信息距离的鲁棒单目SLAM系统 摘要 本文提出了一种基于归一化信息距离(NID ...

最新文章

  1. 聚类和EM算法——K均值聚类
  2. C语言类型转换大学霸IT达人
  3. 资源共享冲突问题概述
  4. 图神经网络学习一(浅谈embedding)
  5. 160个Crackme036
  6. BZOJ 1798: [Ahoi2009]Seq 维护序列seq
  7. 基因组装配新前沿:长片段完成完整的基因组
  8. java做一个简单的数据库,哪个嵌入式数据库用Java写成一个简单的键/值存储?
  9. [Unity3D]推荐几个不错的网站
  10. php 时间转换时间戳_如何实现PHP时间戳与日期的转换
  11. IDEA搭建SpringMVC+Spring+Mybatis项目
  12. Python收集新闻其他辅助功能的实现
  13. 计算机辅助翻译专业实训报告,计算机辅助翻译实训报告格式.doc
  14. Python批量导入图片到Word文件
  15. React父传子、子传父
  16. c语言里面%c什么作用,C语言里面,%d%c%f分别是什么意思?怎么用?
  17. Fiddler手机抓包,及HTTPS协议抓包【手机如何安装fiddler证书,以华为为例】
  18. 【中文】【吴恩达课后编程作业】Course 5 - 序列模型 - 第三周作业 - 机器翻译与触发词检测
  19. 在Linux中安装MySQL报错“error: Failed dependencies: mysql-community-libs(x86-32) >= 5.7.9 is needed by my“
  20. 儿童学编程的原因以及方法

热门文章

  1. 下载必应搜索背景图并设置为背景
  2. 该如何选择LoRaWAN终端入的网方式
  3. 破解elasticsearch(制作破解版docker镜像)
  4. BI驾驶舱是什么?BI管理驾驶舱主要内容及特点
  5. 网络打印机ip地址怎么设置?
  6. 2021_AAAI_Who You Would Like to Share With? A Study of Share Recommendation in Social E-commerce
  7. Modelsim 与Vivado联合仿真版本对应问题
  8. 小苏的java学习之路
  9. make[2]: *** 没有规则可制作目标“/home/.../src/viewer.cpp”,需求。 停止... recipe for target ‘.....‘failed问题解决
  10. 宽字节 多字节 单字节 的问题