NeRF-SLAM: Real-Time Dense Monocular SLAM with Neural Radiance Fields 论文阅读

论文信息

题目:NeRF-SLAM: Real-Time Dense Monocular SLAM with Neural Radiance Fields
作者:Antoni Rosinol, John J. Leonard, Luca Carlone
代码:https://github.com/ToniRV/NeRF-SLAM
来源:arxiv
时间:2022

Abstract

我们提出了一种新颖的几何和光度 3D 映射流程,用于从单目图像进行准确、实时的场景重建。

为了实现这一目标,我们利用了密集单目 SLAM 和实时分层体积神经辐射场的最新进展。
我们的见解是,密集单目 SLAM 通过提供准确的姿态估计和具有相关不确定性的深度图,提供正确的信息来实时拟合场景的神经辐射场。
通过我们提出的基于不确定性的深度损失,我们不仅实现了良好的光度精度,而且还实现了很高的几何精度。

事实上,我们提出的流程比竞争方法实现了更好的几何和光度精度(PSNR 提高了 179%,L1 深度提高了 86%),同时实时工作并且仅使用单目图像。

Introduction

我们的见解是,拥有一个密集的单目 SLAM 管道,可以输出接近完美的姿态估计,以及密集的深度图和不确定性估计,为动态构建场景的神经辐射场提供正确的信息。我们的实验表明,这确实是可能的,并且与其他方法相比,我们可以在更短的时间内实现更准确的重建。

贡献 我们提出了第一个场景重建流程,结合了密集单目 SLAM 和分层体积神经辐射场的优点。我们的方法从图像流构建准确的辐射场,不需要姿势或深度作为输入,并且实时运行。我们在单目方法的Replica数据集上实现了最先进的性能

Related Work

Dense SLAM

实现密集 SLAM 的主要挑战是
(i)由于要估计的深度变量的剪切量而导致计算复杂性
(ii)处理模糊或缺失的信息来估计场景的深度,例如无纹理表面或别名图像。

从历史上看,
第一个问题已经通过解耦姿态和深度估计来绕过。例如,DTAM [19] 通过使用与稀疏 PTAM [13] 相同的范例来实现密集 SLAM,该范例首先以解耦的方式跟踪相机姿态,然后跟踪深度。
第二个问题通常也可以通过使用提供显式深度测量的 RGB-D 或激光雷达传感器或简化深度估计的立体相机来避免。

最近关于密集SLAM的研究在这两个方面取得了令人印象深刻的成果。
为了减少深度变量的数量,CodeSLAM [4] 优化了从图像推断深度图的自动编码器的潜在变量。通过优化这些潜在变量,问题的维数显着降低,而所得的深度图仍然密集。
Tandem [14] 能够通过使用预训练的 MVSNet 式神​​经网络进行单目深度估计来仅使用单目图像重建 3D 场景,然后通过执行帧到模型光度跟踪来解耦姿势/深度问题。
Droid-SLAM [31] 表明,通过采用最先进的密集光流估计架构 [30] 来解决视觉里程计问题,可以在各种具有挑战性的数据集(例如Euroc [5] 和 TartanAir [34] 数据集),Droid-SLAM 通过使用下采样深度图来避免维数问题,随后使用学习的上采样算子进行上采样。
Rosinol 等人 [23] 进一步表明,密集单目 SLAM 可以通过边缘协方差对密集 SLAM 中估计的深度进行加权,然后将它们融合在体积表示中,从而重建场景的忠实 3D 网格。生成的网格在几何上是准确的,但由于 TSDF 表示的限制,它们的重建缺乏光度细节并且不完全完整。
我们的方法受到 Rosinol 等人 [23] 的工作的启发,其中我们将体积 TSDF 替换为分层体积神经辐射场作为我们的地图表示。通过使用辐射场,我们的方法实现了光度精确的地图并提高了重建的完整性,同时还允许同时优化姿势和地图

Neural Radiance Fields(NeRF)

虽然使用一个大型 MLP 的普通 NeRF 方法需要数小时的训练才能收敛,但几位作者表明,较小的 MLP 与 3D 空间数据结构相结合来划分场景,可以显着提高速度。

特别是,NGL​​OD [27]建议在体积网格中使用微小的 MLP,从而实现更快的重建,但不太实时。 Plenoxels [40] 通过使用球谐函数参数化方向编码进一步提高了速度,同时绕过了 MLP 的使用。最后,Instant-NGP [17] 表明,通过基于哈希的场景分层体积表示,可以实时训练神经辐射场。

Mono-SDF [41] 表明,用于单目图像深度和法线估计的最先进的深度学习模型提供了有用的信息,可以显着提高辐射场重建的收敛速度和质量。

我们的工作通过使用密集 SLAM 提供的信息来利用这些见解,该信息估计姿势和密集深度图。我们还利用密集 SLAM 输出本质上是概率性的事实,并使用当前方法中通常被丢弃的信息来对监控信号进行加权以适应辐射场。

SLAM with NeRFs

神经辐射场研究的另一个重要轴是消除其对部分已知相机姿势的依赖。这对于构建 NeRF 特别有吸引力,而无需处理数据来获取图像的相机姿势,这项任务通常很长,通常使用 COLMAP [25] 完成。

我们的工作利用了最近在密集单目 SLAM(Droid-SLAM [31])、概率体积融合(Rosinol 等人[23])和基于哈希的分层体积辐射场(Instant-NGP [17])方面的工作,实时估计场景的几何和光度图,无需深度图像或姿势。

Methodology

我们方法的主要思想是使用密集单目 SLAM 的输出来监督神经辐射场。

密集单目 SLAM 可以估计密集深度图和相机姿势,同时还提供深度和姿势的不确定性估计。有了这些信息,我们就可以训练一个具有由深度边际协方差加权的密集深度损失的辐射场。通过使用密集 SLAM 和辐射场训练的实时实现,并通过并行运行它们,我们实现了实时性能。

图 2 显示了我们管道中的信息流。我们现在解释我们的架构,从我们的跟踪前端(第 3.1 节)开始,然后是我们的映射后端(第 3.2 节)。
在这里插入图片描述

Tracking:Dense SLAM with Covariances

我们使用 Droid-SLAM [31] 作为跟踪模块,它为每个关键帧提供密集的深度图和姿势。

从图像序列开始,Droid-SLAM 首先使用与 Raft [30] 类似的架构计算帧对 i 和 j 之间的密集光流 p i j p_{ij} pij

Raft 的核心是一个卷积 GRU(图 2 中的 ConvGRU),给定帧对之间的相关性和当前光流 pij 的猜测,计算新的流 p i j p_{ij} pij 以及每个光流的权重 Σ p i j Σ_{p_{ij}} Σpij流量测量。

通过这些流量和权重作为测量值,DroidSLAM 解决了密集束调整 (BA) 问题,其中 3D 几何形状被参数化为每个关键帧的一组逆深度图。这种结构的参数化导致了一种解决密集 BA 问题的极其有效的方法,通过将方程组线性化为熟悉的摄像机/深度箭头状块稀疏 Hessian H ∈ R ( c + p ) × ( c + p ) H \in \mathbb{R}^{(c+p)×(c+p)} HR(c+p)×(c+p),可以将其表示为线性最小二乘问题,其中 c c c p p p是相机和点的维数

为了解决线性最小二乘问题,我们采用Hessian矩阵的Schur补来计算简化的相机矩阵HT,
它不依赖于深度,并且具有更小的 R c × c \mathbb{R}^{c\times c} Rc×c维数。通过对 H T = L L T H_T = LL^T HT=LLT 进行 Cholesky 分解(其中 L 是下三角 Cholesky 因子),然后通过前后替换求解姿势 T,可以解决由此产生的关于相机位姿的较小问题。

如图 2 底部所示,给定这些姿势 T,我们可以求解深度 d。此外,给定姿势 T 和深度 D,Droid-SLAM 建议计算诱导光流,并将其作为初始猜测再次馈送到 ConvGRU 网络,如图 2 左侧所示,其中 Π 和 Π−1 ,是投影和反投影函数。图2中的蓝色箭头显示了跟踪环路,对应于Droid-SLAM。

我们进一步计算密集深度图和 Droid-SLAM 姿势的边际协方差(图 2 中的紫色箭头)。为此,我们需要利用 Hessian 的结构,我们将其按如下方式进行块划分
在这里插入图片描述
where H H H is the Hessian matrix, b b b the residuals, C C C is the block camera matrix, and P P P is the diagonal matrix corresponding to the inverse depths per pixel per keyframe. We represent by ∆ ξ ∆ξ ξ the delta updates on the lie algebra of the camera poses in S E ( 3 ) SE(3) SE(3), while ∆d is the delta update to the per-pixel inverse depths. E E E is the camera/depth off-diagonal Hessian’s block matrices, and v v v and w w w correspond to the pose and depths residuals.

密集深度 Σ d Σ_d Σd 和位姿 Σ T Σ_T ΣT 的边际协方差,如下所示:
在这里插入图片描述

Mapping:probalilistic Volumetric NeRF

考虑到每个关键帧的密集深度图,可以对我们的神经体积进行深度监督。不幸的是,深度图由于其密度而非常嘈杂,因为即使是无纹理区域也被赋予了深度值。

图 3 显示,密集单目 SLAM 生成的点云噪声特别大,并且包含较大的异常值(图 3 中的顶部图像)。在给定这些深度图的情况下监督我们的辐射场可能会导致有偏差的重建
在这里插入图片描述

考虑到不确定性损失,我们将映射损失表示为:
在这里插入图片描述
给定超参数 λD 平衡深度和颜色监督(我们将 λD 设置为 1.0),我们将姿势 T 和神经参数 θ 最小化。特别是,我们的深度损失由下式给出:
在这里插入图片描述
其中 D ∗ D^* D是渲染的深度, D 、 Σ D D、Σ_D DΣD是跟踪模块估计的密集深度和不确定性。

我们渲染深度 D ∗ D^* D作为预期的光线终止距离,每个像素的深度是通过沿像素光线采样 3D 位置、评估样本 i 处的密度 σ i σ_i σi 以及对所得密度进行 alpha 合成来计算的,与标准体积渲染类似:
在这里插入图片描述
其中 d i d_i di 是样本 i 沿射线的深度, δ i = d i + 1 − d i δ_i = d_{i+1} − d_i δi=di+1di是连续样本之间的距离。 σ i σ_i σi 是体积密度,通过评估样本 i 的 3D 世界坐标处的 MLP 生成。最后, T i T_i Ti是沿光线直到样本 i 的累积透射率,定义为
在这里插入图片描述
我们的颜色损失的定义如原始 NeRF [16] 中所示:
在这里插入图片描述
其中 I ∗ I^* I 是渲染的彩色图像,与深度图像类似,通过使用体积渲染进行合成。每个像素的每种颜色同样是通过沿像素的光线采样并通过 alpha 合成所得的密度和颜色来计算的: ∑ i T i ( 1 − exp ⁡ ( − σ i δ i ) ) c i \sum_{i} \mathcal{T}_{i}\left(1-\exp \left(-\sigma_{i} \delta_{i}\right)\right) \mathbf{c}_{i} iTi(1exp(σiδi))ci,其中 T i \mathcal{T}_{i} Ti 是公式 (6) 中的透射率。 c i \mathbf{c}_{i} ci 是 MLP 估计的颜色。对于给定样本 i,同时估计密度 δ i \delta_{i} δi 和颜色 c i \mathbf{c}_{i} ci

Architecture

我们的管道由跟踪Tracking线程和映射Mapping线程组成,两者都实时并行运行。
跟踪线程持续最小化关键帧活动窗口的 BA 重投影误差。
映射线程始终优化从跟踪线程接收到的所有关键帧,并且没有活动帧的滑动窗口。

当跟踪管道生成新的关键帧时,这些线程之间的唯一通信发生。在每个新关键帧上,跟踪线程将当前关键帧的姿势及其各自的图像和估计的深度图以及深度的边际协方差发送到映射线程。仅将跟踪线程的滑动优化窗口中当前可用的信息发送到映射线程。跟踪线程的活动滑动窗口最多由 8 个关键帧组成。一旦前一个关键帧和当前帧之间的平均光流高于阈值(在我们的例子中为 2.5 像素),跟踪线程就会生成新的关键帧。

映射线程还负责渲染以实现重建的交互式可视化。

Result

在这里插入图片描述
在这里插入图片描述

Conclusion

我们证明,密集单目 SLAM 为从随意拍摄的单目视频中构建场景的 NeRF 表示提供了理想的信息。来自密集 SLAM 的估计姿态和深度图,通过其边际协方差估计进行加权,为优化基于分层散列的体积神经辐射场提供了理想的信息源。通过我们的方法,用户可以实时生成场景的光度和几何精确重建。

未来的工作可以利用我们的方法来扩展度量语义 SLAM [24] 的定义,该定义通常只考虑几何和语义属性,通过构建光度准确的表示形式。

除了度量语义 SLAM 之外,我们的方法还可以用作高级场景理解的映射引擎,例如用于构建 3D 动态场景图 [2,21,22]。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/64897.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

安装element-plus报错:Conflicting peer dependency: eslint-plugin-vue@7.20.0

VSCode安装element-plus报错: D:\My Programs\app_demo>npm i element-plus npm ERR! code ERESOLVE npm ERR! ERESOLVE could not resolve npm ERR! npm ERR! While resolving: vue/eslint-config-standard6.1.0 npm ERR! Found: eslint-plugin-vue8.7.1 npm E…

机器学习实战1-kNN最近邻算法

文章目录 机器学习基础机器学习的关键术语 k-近邻算法(KNN)准备:使用python导入数据实施kNN分类算法示例:使用kNN改进约会网站的配对效果准备数据:从文本文件中解析数据分析数据准备数据:归一化数值测试算法…

Go语言并发编程(千锋教育)

Go语言并发编程(千锋教育) 视频地址:https://www.bilibili.com/video/BV1t541147Bc?p14 作者B站:https://space.bilibili.com/353694001 源代码:https://github.com/rubyhan1314/go_goroutine 1、基本概念 1.1、…

鉴源论坛·观擎丨浅谈操作系统的适航符合性(上)

作者 | 蔡喁 上海控安可信软件创新研究院副院长 版块 | 鉴源论坛 观擎 社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区” 01 源头和现状​​​​​​​ 在越来越多的国产机载系统研制中,操作系统软件的选择对后续开展研制以及适航举证活动带来…

码云 Gitee + Jenkins 配置教程

安装jdk 安装maven 安装Jenkins https://blog.csdn.net/minihuabei/article/details/132151292?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22132151292%22%2C%22source%22%3A%22minihuabei%22%7D 插件安装 前往 Manage Jen…

基于Windows手动编译openssl和直接安装openssl

零、环境 win10-64位 VS2019 一、手动编译 前言:对于一般的开发人员而言,在 openssl 上下载已经编译好的 openssl 库,然后直接拿去用即可,,不用手动编译,{见下文直接安装}。。。对于一些开发人员&#…

Jmeter录制HTTPS脚本

Jmeter录制HTTPS脚本 文章目录 添加“HTTP代理服务器”设置浏览器代理证书导入存在问题 添加“HTTP代理服务器” 设置浏览器代理 保持端口一致 证书导入 点击一下启动让jmeter自动生成证书,放在bin目录下: 打开jmeter的SSL管理器选择刚刚生成的证书&…

# 关于Linux下的parted分区工具显示起始点为1049kB的问题解释

关于Linux下的parted分区工具显示起始点为1049kB的问题解释 文章目录 关于Linux下的parted分区工具显示起始点为1049kB的问题解释1 问题展示:2 原因3 修改为KiB方式显示4 最后 1 问题展示: kevinTM1701-b38cbc23:~$ sudo parted /dev/nvme1n1 GNU Part…

SAP 开发编辑界面-关闭助手

打开关闭助手时的开发界面如下: 关闭关闭助手后的界面如下: 菜单栏: 编辑--》修改操作--》关闭助手

会这个Python的测试员,工作都不会太差!

Python语言得天独厚的优势使之在业界的火热程度有增无减,尤其是在经历了互联网,物联网,云计算,大数据,人工智能等浪潮的推动下,其关注度,普适度一路走高。 对于测试人员来说,很多人…

【CSS】旋转中的视差效果

效果 index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"/><meta http-equiv"X-UA-Compatible" content"IEedge"/><meta name"viewport" content"widthdevice-…

RK3568 lunch新增设备

rk3568 android9.0 &#xff0c;32位平台 1.进入devices/rockchip/rk356x/ 将rk3568_box_32 拷贝一份&#xff0c;命名为hdx6 2.打开vendorsetup.sh,添加lunch选项 add_lunch_combo hdx6-user add_lunch_combo hdx6-userdebug 3.进入hdx6&#xff0c;修改rk3568_box_32.mk…

Linux root用户执行修改密码命令,提示 Permission denied

问题 linux系统中&#xff08;ubuntu20&#xff09;&#xff0c;root用户下执行passwd命令&#xff0c;提示 passwd: Permission denied &#xff0c;如下图&#xff1a; 排查 1.执行 ll /usr/bin/passwd &#xff0c;查看文件权限是否正确&#xff0c;正常情况是 -rwsr-xr…

阿里云二级域名配置

阿里云二级域名配置 首先需要进入阿里云控制台的域名管理 1.选择域名点击解析 2.添加记录 3.选择A类型 4.主机记录设置【可以aa.bb或者aa.bb.cc】 到时候会变成&#xff1a;aa.bb.***.com 5.解析请求来源设置为默认 6.记录值 设置为要解析的服务器的ip地址 7.TTL 默认即…

MyCat水平分表

1.水平拆分案例场景 2.MyCat配置 这个表只是在 schema.xml配置的逻辑表&#xff0c;在具体的数据库里面是没有的 根据id的模确定数据存在哪个节点上&#xff01;&#xff01;

基于图像形态学处理的目标几何形状检测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 .................................................... %二进制化图像 Images_bin imbinari…

7个月的测试经验,来面试居然开口要18K,我一问连5K都不值...

2021年8月份我入职了深圳某家创业公司&#xff0c;刚入职还是很兴奋的&#xff0c;到公司一看我傻了&#xff0c;公司除了我一个测试&#xff0c;公司的开发人员就只有3个前端2个后端还有2个UI&#xff0c;在粗略了解公司的业务后才发现是一个从零开始的项目&#xff0c;目前啥…

前端技术基础-css

前端技术基础-css【了解】 一、css理解 概念&#xff1a;CSS&#xff1a;C(cascade) SS(StyleSheet) &#xff0c;级联样式表。作用&#xff1a;对网页提供丰富的视觉效果&#xff0c;进行美化页面(需要在html页面基础上)样式规则&#xff1a;样式1&#xff1a;值1;样式2&…

项目中使用git vscode GitHubDesktopSetup-x64

一、使用git bash 1.使用git bash拉取gitee项目 1.在本地新建一个文件夹&#xff08;这个文件夹是用来存放从gitee上拉下来的项目的&#xff09; 2.在这个文件夹右键选择 git bash here 3.输入命令 git init (创建/初始化一个新的仓库) 4.输入命令 git remote add origin …

51单片机程序烧录教程

STC烧录步骤 &#xff08;1&#xff09;STC单片机烧录方式采用串口进行烧录程序&#xff0c;连接的方式如下图&#xff1a; &#xff08;2&#xff09;所以需要先确保USB转串口驱动是识别到&#xff0c;且驱动运行正常&#xff1b;是否可通过电脑的设备管理器查看驱动是否正常…