0. 笔者个人体会
NeRF结合SLAM是这两年新兴的方向,衍生出了很多工作。目前来看SLAM结合NeRF有两个方向,一个是SLAM为NeRF训练提供位姿,然后建立稠密细腻的三维场景,一个是在NeRF里建立各种损失函数反过来优化pose和depth。那么NeRF结合SLAM都有哪些典型工作呢,本文将为大家做一个简单梳理。希望能够为想要入门NeRF SLAM的小伙伴提供一点研究思考。
受于篇幅限制,本文不会过多介绍文章细节。将所有相关文章划分为仅优化NeRF、仅优化位姿、位姿和NeRF联合优化、物体级NeRF SLAM、雷达NeRF SLAM这五类。同时为避免生硬的翻译原文,本文针对每篇文章的介绍将以四个问题来进行,分别是这篇文章希望解决什么问题?核心思想是什么?具体如何实现?有什么效果?当然笔者水平有限,如果有理解不当的地方欢迎各位读者批评指正~
1. 目录
受于篇幅限制,先放一个目录列举本文都介绍了哪些方案。
仅优化NeRF
0、NeRF
1、Point-NeRF
2、NeRF-SLAM
仅优化位姿
3、iNeRF
4、NeRF-Loc
5、NeRF-VINS(未开源)
位姿和NeRF联合优化
6、iMAP
7、BARF
8、NeRF--
9、NICE-SLAM
10、Vox-Fusion
11、NoPe-NeRF
12、RoDynRF
13、DIM-SLAM
14、Orbeez-SLAM
15、GO-SLAM
16、NICER-SLAM(未开源)
17、Co-SLAM
物体级NeRF SLAM
18、RO-MAP
19、vMAP
LiDAR NeRF SLAM
20、LiDAR-NeRF
21、IR-MCL
22、NeRF-LOAM
23、LONER
2. 仅优化NeRF
0、NeRF
标题:NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis
作者:Ben Mildenhall, Pratul P. Srinivasan, Matthew Tancik, Jonathan T. Barron, Ravi Ramamoorthi, Ren Ng
机构:加州大学伯克利分校、谷歌研究院、加州大学圣地亚哥分校
来源:ECCV 2020 oral
原文链接:https://arxiv.org/abs/2003.08934
代码链接:https://github.com/bmild/nerf
官方主页:https://www.matthewtancik.com/nerf
NeRF的开山之作,在很多领域掀起了一股浪潮。具体原理就不做介绍了,放在这里表示尊敬。
1、Point-NeRF
标题:Point-NeRF: Point-based Neural Radiance Fields
作者:Qiangeng Xu, Zexiang Xu, Julien Philip, Sai Bi, Zhixin Shu, Kalyan Sunkavalli, Ulrich Neumann
机构:南加州大学、Adobe
来源:CVPR 2022
原文链接:https://arxiv.org/abs/2201.08845
代码链接:https://github.com/Xharlie/pointnerf
官方主页:https://xharlie.github.io/projects/project_sites/pointnerf/
这篇文章不算是NeRF SLAM的工作,但是为特征点法SLAM和NeRF结合提供了一个思路。
这篇文章希望解决什么问题?
传统的NeRF渲染太慢了,因为要求MLP把整个图像的一切都渲染出来。
核心思想是什么?
MVS方法重建速度快,因此可以结合MVS和NeRF,使用点云来渲染NeRF,实现30倍的加速。
具体如何实现?
Point-NeRF首先利用基于体素代价的3D CNN来生成每个视角的深度图,并使用2D CNN来提取图像特征。在聚合深度图后,得到一个基于点的辐射场,每个点包含空间位置、置信度和图像特征。为了合成新视图,只在神经点云附近进行可微射线积分和计算阴影。在每个阴影位置,聚集K个神经点邻域的特征,并计算辐射率和体密度。整个过程可以端到端训练。
效果如何?
定量对比,主要还是训练速度上的提升,从10个小时降低到了2分钟。但是NVIDIA的Instant NPG训练已经降低到了5s,很多NeRF SLAM也都是使用Instant NPG作为NeRF部分。
定性对比,也还是训练速度上的提升。
2、NeRF-SLAM
标题:NeRF-SLAM: Real-Time Dense Monocular SLAM with Neural Radiance Fields
作者:Antoni Rosinol, John J. Leonard, Luca Carlone
机构:麻省理工学院
原文链接:https://arxiv.org/abs/2210.13641
代码链接:https://github.com/ToniRV/NeRF-SLAM
NeRF-SLAM实际是DROID-SLAM+probabilistic volumetric fusion+Instant NGP三个方案的组合,主要创新在于引入了深度和位姿的不确定性。
这篇文章希望解决什么问题?
单目稠密SLAM也好,直接进行单目深度估计也好,得到的深度图很多数值是不能用的,也很自然的不能用于三角化等应用。如果这些低质量深度值也拿来当Ground Truth训练NeRF的话,效果肯定不如深度真值。
核心思想是什么?
利用单目稠密SLAM监督NeRF的训练,单目稠密SLAM提供稠密深度图、相机位姿、以及相应的不确定性。之后利用这些信息进行深度边缘协方差加权的稠密深度损失训练。
具体怎么做呢?
NeRF-SLAM的输入是连续的单目序列,利用ConvGRU(具体原理参考RAFT)估计稠密光流和光流权重,之后就是一个稠密BA问题估计位姿和深度,并将系统方程线性化为近似相机/深度箭头块状的稀疏Hseeian矩阵。这里还用到了一个trick,使用舒尔补对海森矩阵降维成只与位姿有关,再使用Cholesky求解这个线性最小二乘问题,求解完T以后就可以带回去求解D。
继续计算位姿和深度图的边缘协方差。Hseeian矩阵在最大似然问题中可近似为信息矩阵,而协方差矩阵是信息矩阵的逆,这样就可以很容易得到两个协方差。。
最后把图像、位姿、深度图、位姿不确定性、深度不确定性全部馈送给Instant NGP进行NeRF的训练。
有什么效果?
运行设备是2080Ti,所需显存为11G,FPS为12帧。建图的定性效果很不错。
定量对比结果,还对比了有无深度真值对NICE-SLAM的影响。
本身就是用DROID-SLAM估计的位姿去优化NeRF,没有反过来优化位姿,所以也就没有轨迹精度的对比。
总结:使用SLAM去为NeRF训练提供位姿是一种很容易想到的思路,这方面最经典的文章就是NeRF-SLAM,但更多的文章还是希望将位姿和NeRF放到一起优化。
3. 使用NeRF优化位姿
3、iNeRF
标题:INeRF: Inverting Neural Radiance Fields for Pose Estimation
作者:Lin Yen-Chen, Pete Florence, Jonathan T. Barron, Alberto Rodriguez, Phillip Isola, Tsung-Yi Lin
机构:谷歌研究麻、省理工学院
来源:IROS 2021
原文链接:https://arxiv.org/abs/2012.05877
代码链接:https://github.com/salykovaa/inerf
官方主页:https://yenchenlin.me/inerf/
这篇文章希望解决什么问题?
使用NeRF来反过来优化位姿。
核心思想是什么?
固定场景生成RGB图,计算光度误差反过来回传梯度。
具体如何实现?
前面和传统的NeRF一样,只不过后面渲染图像和真实图像的光度误差反过来又优化位姿。
效果如何?
中间的图是iNeRF位姿估计过程中的估计姿态(灰色)和地面真实姿态(绿色)的轨迹,有一定的位姿优化效果。
位姿估计对比了SuperGlue,证明是有效果的,但肯定比不上完整的SLAM系统。
而且iNeRF需要场景已知,所以很难说对SLAM有什么帮助。
4、NeRF-Loc
标题:NeRF-Loc: Visual Localization with Conditional Neural Radiance Field
作者:Jianlin Liu, Qiang Nie, Yong Liu, Chengjie Wang
机构:腾讯
来源:ICRA 2023
原文链接:https://arxiv.org/abs/2304.07979
代码链接:https://github.com/JenningsL/nerf-loc
这篇文章是笔者第一次看到NeRF模型和图像直接匹配进行定位的文章。
这篇文章希望解决什么问题?
基于几何的重定位方法精度低。
核心思想是什么?
利用学习到的条件NeRF三维模型,计算3D描述子,直接与图像匹配,实现由粗到精的视觉定位。
具体如何实现?
整个Pipeline里场景表示为可泛化NeRF,从3D场景中随机采样点,并将3D点馈送到NeRF模型中以生成3D描述子。然后直接根据3D和2D描述符来匹配,由PnP解算相机位姿。
为了保持泛化性,条件NeRF是建立在一个支持集上,支持集由几幅给定的参考图像和深度图组成。模型不仅在多个场景的联合训练学习了一般匹配,还在每个场景优化过程中以残差的方式记忆了基于坐标的场景。
论文中条件NeRF模型的架构,通过新视图合成和3D-2D匹配来共享任意三维位置的特征生成器。
为了解决训练支持图像和查询图像之间的外观变化,还提出了一个外观自适应层,在匹配之前查询图像和三维模型之间的图像风格对齐。
效果如何?
先说时间,提供10个支持图像,定位1帧需要在Nvidia V100 GPU上花费250ms。然后是一个定位精度的对比。
位姿估计和渲染结果的定性可视化。
5、NeRF-VINS
标题:NeRF-VINS: A Real-time Neural Radiance Field Map-based Visual-Inertial Navigation System
作者:Saimouli Katragadda, Woosik Lee, Yuxiang Peng, Patrick Geneva, Chuchu Chen, Chao Guo, Mingyang Li, Guoquan Huang
机构:特拉华大学
来源:ICRA 2023
原文链接:https://arxiv.org/abs/2304.07979
这项工作是OpenVINS的扩展,首先离线训练NeRF,然后基于NeRF地图进行定位和导航。
这篇文章希望解决什么问题?
基于关键帧进行定位的策略,由于FOV较小效果比较差。
核心思想是什么?
充分利用NeRF新视角合成的能力,处理有限视角和回环问题,实现基于NeRF地图的定位和导航规划。同时要求整个系统可以在嵌入式设备上运行。
具体如何实现?
其实思路很简单,就是合成当前图像的临近视角图像,用这两幅图像进行匹配和定位,特征提取使用的是SuperPoint。整篇论文其实更像一个工程问题,为了在嵌入式设备上落地,用了大量的TRT、CUDA等技巧,生成图像的时候为了实时运行也降低了分辨率。
定性对比实验,主要验证在已知地图进行定位的图像检索能力,对比方案包括传统的DBoW方法和深度学习NetVLAD方法。可以发现NeRF-VINS产生了更多的精确匹配。
ATE的对比,对比了基于地图的方法和VINS方法。
总结:使用NeRF反过来优化pose也是一个很简单的思路,但如果只是设计损失函数再梯度回传的话,定位精度很难和传统SLAM比。