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 空间数据结构相结合来划分场景,可以显着提高速度。
特别是,NGLOD [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)} H∈R(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+1−di是连续样本之间的距离。 σ 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(1−exp(−σ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]。
相关文章:

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 时间ÿ…...
机器学习之弹性网络(Elastic Net)
弹性网络 代码原文 下面代码参考scikit-learn中文社区,链接在上面。 但是由于scikit-learn中文社区上的代码有些地方跑不通,故对此代码做了修改,输出结果与社区中显示的结果相同。 对弹性网络进行简单的介绍: ElasticNet是一个训…...

嵌入式入门教学——C51
一、前期准备 1、硬件设备 2、软件设备 二、预备知识 1、什么是单片机? 在一片集成电路芯片上集成微处理器、存储器、IO接口电路,从而构成了单芯片微型计算机,及单片机。STC89C52单片机: STC:公司89:所属…...
2023-08-03力扣每日一题
链接: 722. 删除注释 题意: 如题,特殊规则见链接 解: 字符串处理,嗯写就完事了,主要是判断指针位置和特殊规则 实际代码: #include<bits/stdc.h> using namespace std; vector<string> …...

【蓝桥杯备考资料】如何进入国赛?
目录 写在前面注意事项数组、字符串处理BigInteger日期问题DFS 2013年真题Java B组世纪末的星期马虎的算式振兴中华黄金连分数有理数类(填空题)三部排序(填空题)错误票据幸运数字带分数连号区间数 2014年真题蓝桥杯Java B组03猜字…...

QtWebApp开发https服务器,完成客户端与服务器基于ssl的双向认证
引言:所谓http协议,本质上也是基于TCP/IP上服务器与客户端请求和应答的标准,web开发中常用的http server有apache和nginx。Qt程序作为http client可以使用QNetworkAccessManager很方便的进行http相关的操作。Qt本身并没有http server相关的库…...
动态IP代理的优势展现与应用场景
在当今数字化时代,网络安全和隐私保护变得愈发重要。作为一家动态IP代理产品供应商,我们深知在保护个人隐私和提高网络安全性方面的重要性。本文将会分享动态IP代理的优势及其在不同应用场景下的实际应用案例,帮助更好地了解和应用动态IP代理…...

ad+硬件每日学习十个知识点(22)23.8.2(LDO datasheet手册解读)
文章目录 1.LDO的概述、features2.LDO的绝对参数(功率升温和结温)3.LDO的引脚功能4.LDO的电气特性5.LDO的典型电路(电容不能真用1uF,虽然按比例取输出值,但是R2的取值要考虑释放电流)6.LDO的开关速度和线性…...

这可是全网最全的网络工程师零基础实战视频整理,最新版分享
互联网中每一项傍身的技能都是需要从如何入门开始的,网络技术也是如此! 网络技术区别其他互联网技能的一点是学习需要从设备开始,只有认识了解了路由器、交换机、防火墙这些网络设备,才开始从网络通信原理开始,这使得网…...

笔记本WIFI连接无网络【实测有效解决方案,不用重启电脑】
笔记本Wifi连接无网络实测有效解决方案 问题描述: 笔记本买来一段时间后,WIFI网络连接开机一段时间还正常连接,但是过一段时间显示网络连接不上解决方案: 1.编写网络重启bat脚本,将以下内容写到文本文件,把…...
js 正则表达式配合replace进行过滤html字符串遇到的性能问题
问题场景复现: 博主要实现一个邮箱列表,其中列表中的每一封邮件都有一个摘要,但是摘要是要自己从后端提供的content内容区自己过滤掉所有,只留下纯文本内容的前面几行作为摘要。 性能问题 当我测试到一个邮箱,其中的…...
2022牛客寒假算法基础集训营1
B题 炸鸡块君与FIFA22 题目大意: 给出胜负序列,每次询问区间 (l,r,s) ,回答在经历 (l-r) 之后积分是多少,初始积分为 (s) 胜 (1) 积分,平 (0) 积分,败的时候如果此时积分为 (3) 的倍数则 (-0) ,…...
API对接:构建连接不同系统的技术桥梁
API(Application Programming Interface)是一种用于不同软件系统之间进行通信和数据交换的技术。本文将介绍API对接的基本概念和原理,并通过代码示例演示如何使用API对接不同系统,解决数据传输与通信的难题。 在当今数字化时代&a…...

【MySQL】仓储--维护出入库流水、库存,去重数量逻辑修正
系列文章 C#底层库–MySQLBuilder脚本构建类(select、insert、update、in、带条件的SQL自动生成) 本文链接:https://blog.csdn.net/youcheng_ge/article/details/129179216 C#底层库–MySQL数据库操作辅助类(推荐阅读࿰…...

用Log4j 2记录日志
说明 maven工程中增加对Log4j 2的依赖 下面代码示例的maven工程中的pom.xml文件中需要增加对Log4j 2的依赖: <dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.20.0&…...
【Java面试】Paxos和Raft协议的区别?
面试官:你简历上说了解Paxos和Raft协议,说一下你对这两个协议的了解? 我:Paxos算法和Raft算法都是用于实现分布式系统中的一致性的算法,确保不同节点之间的数据一致。 我:Paxos算法它的目标是使多个节点能…...

手机浏览器H5打开微信小程序支付,自定义传参
微信官方提供的开放文档如下: 静态网站 H5 跳小程序 | 微信开放文档 想必大家都能看懂官网提供的文档,但实战时却遇到很多问题,博主总结一下遇到的坑,如果您也有遇到,希望可以帮到您。 1.小程序已经发布上线了&…...

Aligning Large Language Models with Human: A Survey
本文也是LLM相关的综述文章,针对《Aligning Large Language Models with Human: A Survey》的翻译。 对齐人类与大语言模型:综述 摘要1 引言2 对齐数据收集2.1 来自人类的指令2.1.1 NLP基准2.1.2 人工构造指令 2.2 来自强大LLM的指令2.2.1 自指令2.2.2 …...

windows图标白了,刷新图标
1.进入C盘,user(用户文件夹),进入当前用户文件夹,再进入隐藏文件夹(AppDada),最后进入Local 2.删除Local文件夹里的IconCache.db文件 3.重启资源管理器 -------------------------------------------- 或者创建bat文件…...

C++ 左值和右值
C 左值和右值 左值、右值左值引用、右值引用std::move()std::move()的实现引用折叠 完美转发forward()的实现函数返回值是左值还是右值如何判断一个值是左值还是右值 左值、右值 在C11中所有的值必属于左值、右值两者之一,右值又可以细分为纯右值、将亡值。在C11中…...

利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...