大盘点!22项开源NeRF SLAM顶会方案整理!(中)

0. 笔者个人体会

上一篇文章我们介绍了仅优化NeRF和仅优化位姿的NeRF SLAM方案,本文将介绍位姿和NeRF联合优化的相关工作,也是NeRF SLAM最主要的方向。下一篇文章我们将介绍物体级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

4. 位姿和NeRF联合优化

6、iMAP

标题:iMAP: Implicit Mapping and Positioning in Real-Time

作者:Edgar Sucar, Shikun Liu, Joseph Ortiz, Andrew J. Davison

机构:帝国理工学院

来源:ICCV 2021

原文链接:https://arxiv.org/abs/2103.12352

代码链接:https://github.com/tymoteuszb/implicit-slam

这篇文章希望解决什么问题?

验证MLP可以作为RGBD SLAM的唯一场景表征。

核心思想是什么?

基于RGBD跟踪,同时优化NeRF和位姿。

具体如何实现?

第一个既优化NeRF又优化位姿的NeRF SLAM方案,分为跟踪和建图两个线程。首先输入RGBD进行跟踪,基于关键帧生成一个记忆库,然后进行位姿和场景的联合优化。损失函数也包括光度损失和深度损失两部分,后面很多工作也都是使用这两个损失。

具体的关键帧选取策略,是用逆渲染深度与RGBD获取的深度值比对,超过一定阈值则认为是关键帧。

效果如何?

这项工作比较早了,验证了NeRF在SLAM建图中可以进行很好的空洞补全(新视图合成)。

定位精度对比,由于工作很早,所以精度较差,远不如ORB-SLAM2这些传统方法。但iMAP这个框架很有开创性。

7、BARF

标题:BARF: Bundle-Adjusting Neural Radiance Fields

作者:Chen-Hsuan Lin, Wei-Chiu Ma, Antonio Torralba, Simon Lucey

机构:卡内基梅隆大学、麻省理工学院、阿德莱德大学

来源:ICCV 2021

原文链接:https://arxiv.org/abs/2104.06405

代码链接:https://github.com/chenhsuanlin/bundle-adjusting-NeRF

官方主页:https://chenhsuanlin.bitbucket.io/bundle-adjusting-NeRF/

这篇文章希望解决什么问题?

传统的NeRF训练需要非常精确的位姿,并且NeRF SLAM反向传播优化位姿时,对位姿初值很敏感,容易陷入局部最优。

核心思想是什么?

光滑信号相较复杂信号更容易找到全局最优解,所以优化过程如果能平滑一些,就不容易陷入局部最优。

具体如何实现?

这篇文章是很早将BA引入NeRF SLAM的工作,给定不完美的位姿也可以训练NeRF。主要工作是应用传统图像对齐理论来联合优化位姿和NeRF,并且提出一个由粗到精的策略来优化位姿,使其对位置编码的噪声不敏感。

这个由粗到精实际上是通过w这个弹性正则化项来实现的,也就是优化过程中它会不断变化,实际上也就是使网络更加平滑。

效果如何?

先看看位置编码的影响,具体做法就是将图片分块,分别渲染再拼接。对比原始NeRF的位置编码,不加位置编码的效果,还有BARF的效果。

下面这个实验也是位置编码的影响,给定不完美位姿,b是原始NeRF的效果,c是验证BARF由粗到精优化的效果,证明不会陷入局部最优。

定量对比,各项指标(包括定位和建图)都实现了比较好的提升。

8、NeRF--

标题:NeRF--: Neural Radiance Fields Without Known Camera Parameters

作者:Zirui Wang, Shangzhe Wu, Weidi Xie, Min Chen, Victor Adrian Prisacariu

机构:牛津大学

原文链接:https://arxiv.org/abs/2102.07064

代码链接:https://github.com/ActiveVisionLab/nerfmm

官方主页:https://nerfmm.active.vision/

这篇文章希望解决什么问题?

没有相机参数(包括内参和位姿),只有RGB图像时无法训练NeRF。

核心思想是什么?

将相机内参、外参(位姿)设置成可学习的参数,其余部分与NeRF步骤相同。

具体如何实现?

将相机内参和外参设置为可学习的参数,在训练时先将相机参数设为一个固定的初始化值,通过这个相机参数和并根据NeRF射线积分,从而获得对应点的体密度和RGB,获得完整图像后计算光度误差。NeRF--可以未知相机的RGB图像来端到端地训练整个pipeline。

此外,为了提高模型的效果,可以重复优化相机内参,即将训练完后的相机内参保存为新的初始化值,重新训练。

效果如何?

在不知内参和位姿的情况下,也可以达到与NeRF相当的重建效果,恢复的位姿也和COLMAP持平。

9、NICE-SLAM

标题:Neural Implicit Scalable Encoding for SLAM

作者:Zihan Zhu, Songyou Peng, Viktor Larsson, Weiwei Xu, Hujun Bao, Zhaopeng Cui, Martin R. Oswald, Marc Pollefeys

机构:浙江大学、苏黎世联邦理工学院、隆德大学、MPI、阿姆斯特丹大学、微软

来源:CVPR 2022

原文链接:https://arxiv.org/abs/2112.12130

代码链接:https://github.com/cvg/nice-slam

官方主页:https://pengsongyou.github.io/nice-slam

这篇文章希望解决什么问题?

1、场景重建过于平滑,丢失高频细节

2、大场景存在网络遗忘问题(iMAP)

核心思想是什么?

通过引入基于特征网格的层次场景表达,嵌入多层位置信息(使用多个MLP组合多分辨率空间网格),并使用预训练的几何先验实现大尺度室内场景重建

具体如何实现?

NICE-SLAM分为Tracking和Mapping两部分,Tracking根据输入的RGBD信息估计位姿,Mapping生成RGB和Depth来做深度和光度损失。

Mapping包含Mid & Fine-level、Coarse-level、Color-level。首先由Mid Level进行重建,然后使用Fine level进行refine精细化。Mid level优化网格特征,Fine level捕获更小的高频几何细节。Coarse-level用来捕捉高层的几何场景,例如墙,地板,等具有几何结构的物体(可以保证Tracking不会太差),用于预测未观测到的几何特征,还有外插的能力(未见视角的合成)。Color-level储存颜色信息,用于生成场景中更为细致的颜色表征,从而提高在追踪线程的准确度。

效果如何?

毕竟是NeRF SLAM最经典的文章,效果必然很好,缺点就是太慢了。当然在很多场景上也会被其他NeRF SLAM方法拉出来打。

轨迹精度的对比,可以发现还是不如ORB-SLAM2这些传统方法。

10、Vox-Fusion

标题:Vox-Fusion: Dense Tracking and Mapping with Voxel-based Neural Implicit Representation

作者:Xingrui Yang, Hai Li, Hongjia Zhai, Yuhang Ming, Yuqian Liu, Guofeng Zhang

机构:浙江大学、布里斯托尔大学、SenseTime

来源:ISMAR 2022

原文链接:https://arxiv.org/abs/2210.15858

代码链接:https://github.com/zju3dv/Vox-Fusion

官方主页:https://yangxingrui.com/vox-fusion/

这篇文章希望解决什么问题?

传统的NeRF使用单个MLP,所以难以表达几何细节,并且很难扩展到大场景。

核心思想是什么?

将NeRF与稀疏体素网格结合,使用八叉树结合莫顿码实现体素的快速分配和检索。

具体如何实现?

Vox-Fusion将体密度更改为了体素,存储的是SDF和RGB。Vox-Fusion由三部分组成:1、体渲染,将场景编码为MLP和嵌入向量,并输出给定像素的渲染颜色和SDF值;2、跟踪过程,将RGB-D作为输入,并通过微分优化相机姿态;3、建图过程,重构场景的几何形状。

有什么效果?

Vox-Fusion支持场景的动态扩展,这就意味着它不需要像之前的NeRF一样先预定义地图大小,而是可以像SLAM一样增量得去构建地图。

相较于iMap和NICE-SLAM,各项指标都有了全面的提升。主要对比的点是Vox-Fusion使用更大的分辨率也可以得到更多的高频细节。

定性对比,即使使用比NICE-SLAM更大的分辨率,还是对桌腿、花这种更细小的物体重建效果更好,而NICE-SLAM对这些高频细节不敏感。

轨迹精度对比,相对NICE-SLAM有所提升。

11、NoPe-NeRF

标题:NoPe-NeRF: Optimising Neural Radiance Field with No Pose Prior

作者:Wenjing Bian, Zirui Wang, Kejie Li, Jia-Wang Bian, Victor Adrian Prisacariu

机构:牛津大学

来源:CVPR 2023 Highlight

原文链接:https://arxiv.org/abs/2212.07388

代码链接:https://github.com/ActiveVisionLab/nope-nerf/

官方主页:https://nope-nerf.active.vision/

也是NeRF很经典的文章。

这篇文章希望解决什么问题?

和NeRF---类似,也是没有先验位姿时无法训练NeRF,尤其是在剧烈相机运动时。

核心思想是什么?

引入无畸变单目深度先验,先验是通过在训练期间校正比例和平移参数生成的,从而能够约束连续帧之间的相对姿态。

具体怎么做呢?

NoPe-NeRF的输入是RGB序列,首先从单目深度估计网络(DPT)生成单目深度图,并重建点云,然后优化NeRF、相机位姿、深度失真参数。训练主要也是依靠单目深度估计的深度图和渲染出来的深度图做损失。

具体来说,无畸变深度图提供了两个约束条件。通过在无畸变深度图中反投影出的两个点云距离的来提供相邻图像的相对姿态,从而约束全局姿态估计。然后通过将无畸变深度视为表面,使用基于表面的光度一致性来约束相对姿态估计。

有什么效果?

这个图很经典啊,很多公众号都拿这个图当封面。一方面表达了NoPe-NeRF可以联合优化位姿和NeRF,一方面表达了性能超越了其他SOTA方案。

做SLAM的话更关心位姿,所以这里再放一个和其他方案的轨迹精度对比。

12、RoDynRF

标题:Robust Dynamic Radiance Fields

作者:Yu-Lun Liu, Chen Gao, Andreas Meuleman, Hung-Yu Tseng, Ayush Saraf, Changil Kim, Yung-Yu Chuang, Johannes Kopf, Jia-Bin Huang

机构:Meta、国立台湾大学、KAIST、马里兰大学

来源:CVPR 2023

原文链接:https://arxiv.org/abs/2301.02239

代码链接:https://github.com/facebookresearch/robust-dynrf

官方主页:https://robust-dynrf.github.io/

本身这篇文章研究的是动态NeRF,但是和NeR--一样都可以在没有位姿和内参的情况下联合优化位姿和NeRF,所以也算是NeRF SLAM的一种。

这篇文章希望解决什么问题?

1、传统的NeRF基于静态环境假设

2、动态环境下由SfM估计的位姿不准确

核心思想是什么?

联合优化静态、动态辐射场和相机参数(位姿和焦距)。

具体怎么做呢?

用静态和动态辐射场分别建模静态和动态场景。静态辐射场就是一个普通的NeRF,使用坐标和方向作为输入,并预测体密度和颜色。静态部分的密度不随时间和观察方向而变化,因此可以使用查询特征的总和作为密度(而不是使用MLP),静态区域loss同时优化静态体素场和相机参数。动态辐射场取采样坐标和时间t,得到正则空间中的变形坐标。然后利用这些变形坐标对动态体素场中的特征进行查询,并将特征随时间指数传递给随时间变化的浅层MLP,得到动态部分的颜色、密度和非刚性。最后在体渲染之后,从静态和动态部分以及非刚性Mask获得RGB图像和深度图。

有什么效果?

使用的设备是一块NVIDIA V100GPU,训练了28小时。随意捕捉一组带动态目标的视频,就可以在不知相机参数的情况下进行动态NeRF重建。

由于是SLAM总结,所以这里放了和其他方案的定位轨迹精度,可以发现其他SOTA方案都无法处理动态场景。

13、DIM-SLAM

标题:Dense RGB SLAM with Neural Implicit Maps

作者:Heng Li, Xiaodong Gu, Weihao Yuan, Luwei Yang, Zilong Dong, Ping Tan

机构:香港科技大学、阿里巴巴、西蒙·弗雷泽大学

来源:ICLR 2023

原文链接:https://arxiv.org/abs/2301.08930

代码链接:https://github.com/HKUST-3DV/DIM-SLAM

官方主页:https://poptree.github.io/DIM-SLAM/

作者宣称这是第一个具有神经隐式建图表示的稠密RGB SLAM,因为没有使用深度信息。

这篇文章希望解决什么问题?

没有深度信息只有RGB的情况下训练NeRF。

核心思想是什么?

引入一个分层的特征体积来辅助隐式地图解码器,融合不同尺度的形状线索以促进地图重建。同时通过匹配渲染和输入视频帧来同时优化相机运动和神经隐式地图。

具体怎么做呢?

DIM-SLAM是一个完全RGB的SLAM系统,不需要任何单目深度估计和光流预训练模型(这个还是挺亮眼的),就能同时优化场景和相机位姿,相机位姿的精度甚至超过了一些RGB-D SLAM方法。

NeRF在没有深度监督的情况下难以收敛,为了解决这个问题,DIM-SLAM引入了一个分层的特征体素以提高场景表示能力。DIM-SLAM在给定摄像机姿态的情况下,对多尺度特征沿射线进行采样,并通过MLP解码器将多尺度特征计算出每个像素的深度和颜色。这样,通过将所呈现的图像与观察到的图像进行匹配,可以同时求解相机位姿和三维场景建图。

还是用了一个warping损失来提高精度。

有什么效果?

运行设备是两块NVIDIA 2080Ti GPU。作为仅RGB方法,建图精度可以媲美RGBD方法。

看看定位精度的定量对比,已经可以媲美ORB-SLAM2这种传统方法和DROID-SLAM这种学习方法。

14、Orbeez-SLAM

标题:Orbeez-SLAM: A Real-time Monocular Visual SLAM with ORB Features and NeRF-realized Mapping

作者:Chi-Ming Chung, Yang-Che Tseng, Ya-Ching Hsu, Xiang-Qian Shi, Yun-Hung Hua, Jia-Fong Yeh, Wen-Chin Chen, Yi-Ting Chen, Winston H. Hsu

机构:国立台湾大学

原文链接:https://arxiv.org/abs/2209.13274

代码链接:https://github.com/MarvinChung/Orbeez-SLAM

这篇文章希望解决什么问题?

很多NeRF SLAM需要针对每个新场景重新训练,实际应用要求SLAM具备泛化性。

核心思想是什么?

传统SLAM可以在NeRF训练初期提供较为准确的位姿,使得没有深度信息也可以快速收敛。

具体怎么做呢?

个人感觉是传统SLAM和NeRF结合很好的一篇文章,使用的是ORB-SLAM2和Instant-NGP的组合方案,同样不需要深度信息。跟踪和建图同时运行,首先使用ORB-SLAM2进行跟踪,如果定位精度较高并且建图线程不繁忙则添加为关键帧,再用关键帧和位姿去优化NeRF(Instant-NGP)。

还提供了一种新的射线采样方法。

有什么效果?

运行设备是Intel i7-9700 CPU和一块NVIDIA RTX3090 GPU,可以在线训练。

定位精度对比,这个不太好,本身就是ORB-SLAM2提供的初始位姿,优化后还不如ORB2了。

15、GO-SLAM

标题:GO-SLAM: Global Optimization for Consistent 3D Instant Reconstruction

作者:Youmin Zhang, Fabio Tosi, Stefano Mattoccia, Matteo Poggi

机构:博洛尼亚大学

来源:ICCV 2023

原文链接:https://arxiv.org/abs/2309.02436

代码链接:https://github.com/youmi-zym/GO-SLAM

官方主页:https://youmi-zym.github.io/projects/GO-SLAM/

这篇文章希望解决什么问题?

NeRF SLAM定位精度低。

核心思想是什么?

使用BA和回环来优化位姿。

具体怎么做呢?

GO-SLAM本身是基于DROID-SLAM和Instant-NGP的组合,主要工作是引入了BA和回环模块。GO-SLAM由三个并行线程组成:前端跟踪、后端跟踪,以及实例建图。GO-SLAM的前端跟踪线程是直接用的DROID-SLAM的跟踪模块,后面训练过程也是直接调的DROID-SLAM的预训练权重,只不过加入了新的回环和BA优化。然后使用RAFT来计算新一帧相对于最后一个关键帧的光流,如果平均流大于阈值,则创建新关键帧。后端跟踪线程的重点是通过全BA生成全局一致的位姿和深度预测。最后,实例建图线程根据最新的位姿信息实时更新三维重建。GO-SLAM的输入可以是单目双目,还可以是RGB-D,非常的通用!

GO-SLAM主要还是基于NeRF进行稠密重建,可以发现相较于NICE-SLAM这些SOTA方案,GO-SLAM重建场景的全局一致性更好,这主要是因为它引入了回环和全局BA来优化累计误差。

还有在EuRoC数据集上的定性重建结果。相较于DROID-SLAM,GO-SLAM的重建效果更加干净!

轨迹精度对比,在TUM、EuRoC、ScanNet三个数据集都对比了ATE,出于篇幅限制只放一个TUM的。

16、NICER-SLAM

标题:NICER-SLAM: Neural Implicit Scene Encoding for RGB SLAM

作者:Zihan Zhu, Songyou Peng, Viktor Larsson, Zhaopeng Cui, Martin R. Oswald, Andreas Geiger, Marc Pollefeys

机构:ETHZ、MPI、隆德大学、浙江大学、阿姆斯特丹大学、乌宾根大学、微软

原文链接:https://arxiv.org/abs/2302.03594

这篇文章希望解决什么问题?

RGB数据没有深度信息,无法产生高质量的NeRF渲染结果。

核心思想是什么?

引入单目深度估计进行监督,还为SDF表征建立分层神经隐式编码。

具体如何实现?

NICER-SLAM以RGB流作为输入,并输出相机位姿,以及学习的几何和颜色的分层场景表示。实际上是在NICE-SLAM的基础上引入单目深度估计,同时融合了重建、颜色、位姿、光流、warping-loss、深度、Eikonal Loss损失。

其实这篇文章的启发意义不大,但是证明了引入各种各种的损失可以提升性能。

效果如何?

重建效果对比,在只是用RGB的方法里效果不错,甚至和RGBD方法持平。

相机跟踪结果,在RGB里好像也没达到最优。

17、Co-SLAM

标题:Co-SLAM: Joint Coordinate and Sparse Parametric Encodings for Neural Real-Time SLAM

作者:Hengyi Wang, Jingwen Wang, Lourdes Agapito

机构:伦敦大学学院

来源:CVPR 2023

原文链接:https://arxiv.org/abs/2304.14377

代码链接:https://github.com/HengyiWang/Co-SLAM

官方主页:https://hengyiwang.github.io/projects/CoSLAM

这篇文章希望解决什么问题?

1、Instant-NPG虽然训练速度很快,但是因为它使用了哈希编码,所以在空间很多位置都不连续。

2、传统的NeRF在大场景面临遗忘问题。

核心思想是什么?

1、使用one-blob编码提高哈希编码的连续性。

2、在所有关键帧上采样来训练NeRF,而不是像NICE-SLAM那样维护一个关键帧列表。

具体如何实现?

首先将传统NeRF中的体密度改为TSDF,训练也是联合优化NeRF和相机位姿。

Co-SLAM的输入是RGBD序列,进行射线采样和跟踪获得位姿。传统的Instant-NGP是先建立网格,将采样点输入并在哈希表中检索,再输给MLP进行渲染。为了将离散的哈希表转换成连续的,这里引入了obe-blob编码(实际上是将连通区域编码成相同的数值),后面将编码的点再过一遍MLP。

效果如何?

运行设备是i7-12700K CPU和RTX 3090ti GPU,运行速率是5-13 Hz。

定量结果对比,各项指标都很好,运行速度也提高很多。

轨迹精度的对比,相比NICE-SLAM精度有所提升,但还是不如传统的ORB-SLAM2。

总结:在NeRF SLAM应用里,位姿和NeRF联合优化是最主要的方向,这方面的文章非常多。

要运行Nerf-SLAM开源代码,首先需要确保您的计算机满足系统要求。Nerf-SLAM是一个基于Python和PyTorch的三维重建和SLAM算法,因此您需要安装Python和PyTorch。 在安装所需的软件和库后,您可以按照以下步骤来运行Nerf-SLAM开源代码: 1. 下载Nerf-SLAM的代码库,并将其解压到您选择的目录。 2. 打开终端或命令提示符窗口,并导航到代码库的目录。 3. 安装必要的Python库。可以使用pip或conda来安装依赖,例如numpy、imageio、tqdm等。具体的依赖可以在代码库的requirements.txt文件找到。 4. 准备数据。Nerf-SLAM需要输入图像序列来进行重建。您可以将图像序列放在指定的文件夹,并按照代码库提供的文件命名约定来命名文件。 5. 打开config文件夹,并选择适合您的应用程序的配置文件。您可以根据自己的需求进行编辑和自定义。 6. 在终端或命令提示符窗口执行模型训练命令。使用命令"python trainer.py --config=config_file_name",其config_file_name是您选择的配置文件的名称。 7. 等待模型训练完成。根据您选择的配置和数据量的不同,训练过程可能需要一些时间。 8. 在训练完成后,您可以利用训练得到的模型来进行三维重建或SLAM。具体的操作方法和命令可以在代码库的文档找到。 需要注意的是,运行Nerf-SLAM的代码需要一定的计算资源,并且对于大规模的数据集,可能需要更高的计算能力和存储空间。此外,在运行代码之前,建议您仔细阅读代码库的文档和说明,以确保正确地配置和使用Nerf-SLAM开源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值