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

news2024/12/23 0:27:53

论文信息

题目: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]。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【MYSQL】DataGrip连接linux本地mysql失败:Connection refused

防火墙需要开放3306端口 sudo ufw allow 3306 要么就把防火墙关了: sudo ufw disablemysql开放连接 记住你的密码 ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password by 123456;修改配置文件 sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf这个…

PostgreSQL 查询每个用户最后的登录时间多种方法

登录表,查询登录过的用户名 select username from system_online_users group by username;简单查询每个用户最后的登录时间 select username, max(login_time) from system_online_users group by username;查询 admin 最早和最后的登录时间 select username, m…

StreamSaver.js入门教程:优雅解决前端下载文件的难题

theme: smartblue 本文简介 本文介绍一个能让前端优雅下载大文件的工具:StreamSaver.js ⚡️ StreamSaver.js GitHub地址⚡️ 官方案例 StreamSaver.js 可用于实现在Web浏览器中直接将大文件流式传输到用户设备的功能。 传统的下载方式可能导致大文件的加载时间较长…

【二等奖方案】Web攻击检测与分类识别赛题「爆汁大橘少糖」团队解题思路

2022 CCF BDCI 数字安全公开赛 赛题「Web攻击检测与分类识别」 地址:http://go.datafountain.cn/4Zj 爆汁大橘少糖战队获奖方案 团队简介 团队成员来自海康威视研究院,目前从事大数据算法相关的工作,具有丰富的数据挖掘实践经验。曾获得过…

腾讯测试大佬分享4个关于 Python 函数(方法)的冷知识

关于参数标识 不知道大家在工作中有没有遇到一种情况,你的同事 A 写了一个方法给你调用,然后你调用时不知道该传什么参数,然后这个同事 A 还很 cao dan 的居然不加班!你一脸茫然的看着这个方法,当你尝试传进去一个 ab…

极狐GitLab 全新「价值流仪表盘」使用指南

本文来源:about.gitlab.com 作者:Haim Snir 译者:极狐(GitLab) 市场部内容团队 GitLab / 极狐GitLab 价值流仪表盘的使用相对简单,这种可以定制化的仪表盘能够让决策者识别数字化转型进程中的趋势及机遇。 如果你已经在用 GitLab…

【FAQ】调用EasyDSS返回的直播快照接口,无法编辑只能新建的原因排查与解决

EasyDSS视频直播点播平台集视频直播、点播、转码、管理、录像、检索、时移回看等功能于一体,可提供音视频采集、视频推拉流、播放H.265编码视频、存储、分发等视频能力服务,在应用场景上,平台可以运用在互联网教育、在线课堂、游戏直播等领域…

Couldn‘t lock the file :/tmp/bbc-filesystem-base_syscache_service

解决方案: 进去带这个目录,然后切换成root用户,将它删除

17. Spring 事务

目录 1. 事务定义 2. MySQL 中的事务使用 3. 没有事务时的插入 4. Spring 编程式事务 5. Spring 声明式事务 5.1 Transactional 作用范围 5.2 Transactional 参数说明 5.3 Transactional 工作原理 1. 事务定义 将⼀组操作封装成一个执行单元(封装到一起…

LBP特征笔记

LBP,局部二值模式(Local Binary Pattern),是一种描述图像局部纹理特征的方式,具有旋转不变性和灰度不变性。首先由T. Ojala, M.Pietikinen, 和 D. Harwood 在1994年提出。 LBP特征描述 基础LBP算子 基础的LBP算子定义…

什么是耗尽型MOS管

我们常用的MOS管属于增强型MOS管,对于N沟道增强型MOS管,需要UGS大于开启电压,MOS管才能导通。 其实还有一种MOS管,当UGS大于0,等于0,小于0时MOS管都能导通,这种MOS管叫做耗尽型 MOS管。 以N沟道…

复现原型链污染漏洞

目录 一、复现原型链污染漏洞 hackit 2018 1、创建hackit_2018.js文件 2、运行hackit_2018.js文件 3、寻找原型链漏洞 4、污染原型链 hackit 2018 1、创建hackit_2018.js文件 const express require(express) var hbs require(hbs); var bodyParser require(body-par…

485modbus转profinet网关连接6台ABB 变频器通讯案例

昆仑通态通过485Modbus转Profinet网关实现了1200PLC与6台ABB变频器之间的Modbus通讯,触摸屏本地实时监控。485Modbus转Profinet网关作为中间桥梁,实现1200PLC与ABB变频器之间的互联互通,使得数据的传输变得高效可靠。 打开博图添加PLC,在这里…

2.4G芯片XL2408开发板,SOP16封装,芯片集成1T 8051内核单片机

XL2408开发板可用于2.4G芯片XL2408开发板的开发调试。XL2408烧录仿真需要使用WS_LINK。XL2408开发板烧录仿真需要接4根线:PA13:DIO,PA14:CLK,VCC,GND。 XL2408芯片集成射频收发机、频率收生器、晶体振荡器、调制解调器等功能模块,…

GY-NEO6MV2 GPS模块测试

GY-NEO6MV2 GPS模块测试 📓模块资料:GY-NEO6MV2 https://pan.baidu.com/s/17ihqLzXytrR2K2LmumvdKA🍁原理图(资料中有) 📑基本参数信息 🌿3V-5V供电通用。🌿默认波特率&#xff…

【JAVASE】static成员

⭐ 作者:小胡_不糊涂 🌱 作者主页:小胡_不糊涂的个人主页 📀 收录专栏:浅谈Java 💖 持续更文,关注博主少走弯路,谢谢大家支持 💖 static 1. static修饰成员变量2. static…

公司来了个拿 25K 出来的测试,算是见识到了基础的天花板

今天上班开早会就是新人见面仪式,听说来了个很厉害的大佬,年纪还不大,是上家公司离职过来的,薪资已经达到中高等水平,很多人都好奇不已,能拿到这个薪资应该人不简单,果然,自我介绍的…

数学知识(一)

一、数论 1.1质数 定义:在所有大于1的自然数&#xff0c;如果只包含1和本身这两个约数&#xff0c;就被称为质数(素数). 质数的判断:试除法 bool is_prime(int n) {if(n < 2) return false;for(int i 2;i < n / i;i ){if(n % i 0)return false;}return true; } 分…

一文学会git常用命令和使用指南

文章目录 0. 前言1.分支分类和管理1. 分支分类规范&#xff1a;2. 最佳实践3. 分支命名规范示例&#xff1a;4. 分支管理方法&#xff1a; 2. commit 注释规范1. 提交注释结构&#xff1a;2. 提交注释的准则&#xff1a; 3. git 常用命令1. git pull 核心用法2. git push 命令1…

C++初阶 - 6.模板初阶

目录 1.泛型编程 2.函数模板 2.1函数模板的概念 2.2函数模板格式 2.3 函数模板的原理 2.4 函数模板的实例化 2.5模板参数的匹配原则 3.类模板 3.1类模板的定义格式 3.2类模板的实例化 1.泛型编程 如何实现一个通用的交换函数呢&#xff1f; void Swap(int& left…