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]。

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

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

相关文章

【零基础学Rust | 基础系列 | 数据结构】元组,数组,向量,字符串,结构体

文章标题 简介:一,元组:1,定义元组:2,访问元组元素:3,元组解构:4,元组在函数中的应用: 二,数组:1,数组的声明和…

Redis-1

Redis 理论部分 redis 速度快的原因 1、纯内存操作 2、单线程操作,避免了频繁的上下文切换和资源争用问题,多线程需要占用更多的 CPU 资源 3、采用了非阻塞 I/O 多路复用机制 4、提供了非常高效的数据结构,例如双向链表、压缩页表和跳跃…

QT以管理员身份运行

以下配置后,QT在QT Creator调试时,或者生成的.exe程序,都将会默认以管理员身份运行。 一、MSVC编译器 1、在Pro文件中添加以下代码: QMAKE_LFLAGS /MANIFESTUAC:\"level\requireAdministrator\ uiAccess\false\\" …

纯css实现登录表单动效

效果图&#xff1a; 代码展示 // 我这边用的是elementUI表单校验&#xff0c;更改的样式。 <el-form:model"form":rules"rules"ref"fromList":hide-required-asterisk"true"><el-form-item prop"account"><…

全网最强,Python接口自动化测试实战-接口参数关联(购物实例)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 什么是参数关联&a…

【2023年电赛国一必备】C题报告模板--可直接使用

任务 图1 任务内容 要求 图2 基本要求内容 图3 发挥部分内容 说明 图4 说明内容 评分标准 图5 评分内容 正文 &#xff08;部分&#xff09; 摘要 本实验基于TI公司的TM4C123GH6PM主控&#xff0c;结合OPA2337芯片和其他硬件模块&#xff0c;设计并制作了一种单相逆变器…

OceanBase上的泡泡玛特抽盒机,轻松应对百倍流量峰值

8月3日晚10点&#xff0c;近百万年轻人再次同时涌入泡泡玛特的抽盒机小程序&#xff0c;参加抢抽盲盒新品的狂欢。 每周四的这个时刻&#xff0c;都是对抽盒机系统的一次技术大考。这个考验不但影响着用户体验&#xff0c;也直接影响着泡泡玛特的业绩。据2022年年度财报&#…

EMS SQL Manager for MySQL Crack

EMS SQL Manager for MySQL Crack 用于MySQL的EMS SQL Manager是用于MySQL数据库管理和开发的高性能工具。它适用于4.1到最新版本的任何MySQL&#xff0c;并支持所有最新功能&#xff0c;包括MySQL触发器、视图、存储过程和函数、InnoDB外键、Unicode数据等。SQL Manager for M…

【java】【maven】【基础】MAVEN安装配置介绍

目录 1 下载 2 安装-windows为例 3 配置环境变量 3.1 JAVA_HOME 3.2 MAVEN_HOME 3.3 PATH 3.4 验证 4 MAVEN基础概念 4.1 仓库概念 4.2 坐标概念 4.2.1 打开网址 4.2.2 输入搜索内容junit 4.2.3 找到对应API名称点击 4.2.4 点击对应版本 4.2.5 复制MAVEN坐标 4.3 配置…

爬虫007_python中的输出以及格式化输出_以及输入---python工作笔记025

首先看输出 输出这里,注意不能直接上面这样,18需要转换成字符串 可以看到python中这个字符串和数字一起的时候,数字要转换一下成字符串. 然后这里要注意%s 和%d,这个s指的是字符串,d指的是数字 注意后面的内容前面要放个% ,然后多个参数的话,那么这里用(),里面用,号隔开 然…

windows服务器iis PHP套件出现FastCGI等错误解决方法汇总

如果您的服务器安装了PHP套件&#xff0c;出现了无法打开的情况&#xff0c;请参照如下办法解决&#xff1a; 首先&#xff0c;需要设置IIS允许输出详细的错误信息到浏览器&#xff0c;才好具体分析 错误一&#xff1a; 处理程序“FastCGI”在其模块列表中有一个错误模块“Fast…

新手用户选择阿里云服务器地域、实例、带宽、操作系统经验参考

无论是个人还是企业用户&#xff0c;部署自己的网站或者APP客户端、小程序等&#xff0c;都需要用到服务器&#xff0c;现在流行的都是使用云服务器&#xff0c;考虑到性价比大家现在都喜欢选择阿里云服务器。但是新手用户往往在面对阿里云服务器地域、实例、带宽、操作系统等众…

RTC晶振两端要不要挂电容

发现GD32的RTC晶振两端需要挂电容&#xff0c;STM32的RTC晶振两端不需要挂电容。 STM32的RTC晶振两端&#xff0c;不需要挂电容&#xff0c;这样晶振启振很容易&#xff0c;挂大了&#xff0c;却难启动&#xff0c;且温度越低&#xff0c;启动越难。 有人说负载电容为6pF的晶振…

SQL分类及通用语法数据类型

一、SQL分类 DDL: 数据定义语言&#xff0c;用来定义数据库对象&#xff08;数据库、表、字段&#xff09;DML: 数据操作语言&#xff0c;用来对数据库表中的数据进行增删改DQL: 数据查询语言&#xff0c;用来查询数据库中表的记录DCL: 数据控制语言&#xff0c;用来创建数据库…

Go语言开发者的Apache Arrow使用指南:读写Parquet文件

Apache Arrow是一种开放的、与语言无关的列式内存格式&#xff0c;在本系列文章[1]的前几篇中&#xff0c;我们都聚焦于内存表示[2]与内存操作[3]。 但对于一个数据库系统或大数据分析平台来说&#xff0c;数据不能也无法一直放在内存中&#xff0c;虽说目前内存很大也足够便宜…

SpringBoot

SpringBoot 微服务阶段 javase&#xff1a; OOPmysql&#xff1a;持久化htmlcssjsjquery框架javaweb&#xff1a;MVC 三层架构 的网站ssm&#xff1a;简化了开发流程 配置也相对复杂Spring&#xff1a;SpringBoot&#xff1a;内嵌Tomact 微服务架构springCloud SpringBoot S…

云原生全栈体系(二)

Kubernetes实战入门 第一章 Kubernetes基础概念 一、是什么 我们急需一个大规模容器编排系统kubernetes具有以下特性&#xff1a; 服务发现和负载均衡 Kubernetes 可以使用 DNS 名称或自己的 IP 地址公开容器&#xff0c;如果进入容器的流量很大&#xff0c;Kubernetes 可以负…

CSS调色网有哪些

本文章转载于湖南五车教育&#xff0c;仅用于学习和讨论&#xff0c;如有侵权请联系 1、https://webgradients.com/ Wbgradients 是一个在线调整渐变色的网站 &#xff0c;可以根据你想要的调整效果&#xff0c;同时支持复制 CSS 代码&#xff0c;可以更好的与开发对接。 Wbg…

经典CNN(三):DenseNet算法实战与解析

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊|接辅导、项目定制 1 前言 在计算机视觉领域&#xff0c;卷积神经网络&#xff08;CNN&#xff09;已经成为最主流的方法&#xff0c;比如GoogleNet&#xff0c;…

opencv 30 -图像平滑处理01-均值滤波 cv2.blur()

什么是图像平滑处理? 图像平滑处理&#xff08;Image Smoothing&#xff09;是一种图像处理技术&#xff0c;旨在减少图像中的噪声、去除细节并平滑图像的过渡部分。这种处理常用于预处理图像&#xff0c;以便在后续图像处理任务中获得更好的结果。 常用的图像平滑处理方法包括…