NICE-SLAM: Neural Implicit Scalable Encoding for SLAM论文阅读

论文信息

标题:NICE-SLAM: Neural Implicit Scalable Encoding for SLAM
作者:Zihan Zhu, Songyou Peng,Viktor Larsson — Zhejiang University
来源:CVPR
代码:https://pengsongyou.github.io/nice-slam
时间:2022

Abstract

神经隐式(Neural implicit representations)表示最近在同步定位和地图绘制(SLAM)方面有一定的进展,但现有方法会产生过度平滑的场景重建,并且难以扩展到大型场景。这些限制主要是由于其简单的全连接网络架构,未在观测中纳入本地信息。

我们提出了 NICE-SLAM,这是一种密集 SLAM 系统,通过引入分层场景表示来合并多级局部信息。使用预先训练的几何先验优化这种表示,可以实现大型室内场景的详细重建。与最近的神经隐式 SLAM 系统相比,我们的方法更具可扩展性、高效性和鲁棒性。

Introduction

现有方法的缺陷
传统的密集视觉SLAM系统[29,41,58,59]满足实时要求并且可以在大规模场景中使用,但它们无法对未观察到的区域进行合理的几何估计。

基于学习的 SLAM 方法 [3,12,47,67] 获得了一定水平的预测能力,因为它们通常在特定于任务的数据集上进行训练。此外,基于学习的方法往往可以更好地处理噪声和异常值。然而,这些方法通常仅适用于具有多个对象的小场景。

iMAP [46] 的关键限制因素源于它使用单个多层感知器 (MLP) 来表示整个场景,而该场景只能通过每个新的、可能部分的 RGB-D 观察进行全局更新。相比之下,最近的工作[37, 48]表明,建立多级基于网格的特征有助于保留几何细节并能够重建复杂场景,但这些都是离线方法,没有实时能力。

主要贡献
• 我们推出NICE-SLAM,这是一种密集的RGB-D SLAM 系统,具有实时能力、可扩展性、预测性,并且对各种具有挑战性的场景具有鲁棒性。

• NICE-SLAM 的核心是分层的、基于网格的神经隐式编码。与全局神经场景编码相比,这种表示允许局部更新,这是大规模方法的先决条件。

• 我们对各种数据集进行了广泛的评估,这些数据集在绘图和跟踪方面表现出了竞争性的性能。

Related Work

Dense Visual SLAM

地图表示可分为两类:以地图为中心(view-centric)和以世界为中心(world-centric)

view-centric:
将 3D 几何体锚定到特定关键帧,通常在密集环境中表示为深度图。
这一类别的早期例子之一是 DTAM 。由于其简单性,DTAM 已广泛应用于许多最新的基于学习的 SLAM 系统中。例如,[54, 68] 回归深度和姿势更新。 DeepV2D 类似地在回归深度和姿态估计之间交替,但使用测试时优化。 BA-Net 和 DeepFactors 通过使用一组基础深度图简化了优化问题。还有一些方法,例如 CodeSLAM 、SceneCode 和 NodeSLAM ,它们优化了解码为关键帧或对象深度图的潜在表示。 DROID-SLAM 使用回归光流来定义几何残差以进行细化。 TANDEM 将多视图立体与 DSO 结合起来,形成实时密集 SLAM 系统。

word-centric:
将 3D 几何图形锚定在统一的世界坐标中,并且可以进一步分为面元 和体素网格,通常存储占用或 TSDF 值 。体素网格已广泛用于 RGB-D SLAM,例如 KinectFusion 。

Neral Implict Representations(神经隐式表示)

神经隐式表示在对象几何表示、场景完成、新颖视图合成 以及生成建模中有应用。最近的一些论文尝试使用 RGB-(D) 输入来预测场景级几何,但它们都假设给定的相机姿势。另一些工作解决了相机位姿优化问题,但它们需要相当长的优化过程,不适合实时应用

给定 RGB-D 序列,IMAP引入了实时密集 SLAM 系统,该系统使用单个多层感知器 (MLP) 来紧凑地表示整个场景。然而,由于单个 MLP 的模型容量有限,iMAP 无法生成详细的场景几何形状和准确的相机跟踪,特别是对于较大的场景

Method

在这里插入图片描述
图 2. 系统概览。我们的方法采用 RGB-D 图像流作为输入,并以分层特征网格的形式输出相机姿势以及学习到的场景表示。从右到左,我们的管道可以解释为生成模型,它根据给定的场景表示和相机姿势渲染深度和彩色图像。在测试时,我们通过可微渲染器(从左到右)反向传播图像和深度重建损失来解决逆问题,从而估计场景表示和相机姿势。两个实体在交替优化中进行估计: Mapping:反向传播仅更新分层场景表示;Tracking:反向传播仅更新相机姿态。为了更好的可读性,我们将用于几何编码的精细网格与同等大小的颜色网格结合在一起,并将它们显示为具有两个属性(红色和橙色)的一个网格。

Hierarchical Scene Representation(层次化场景表示)

几何形状被编码为三个特征网络 ϕ θ l \phi _\theta ^l ϕθl及其对应的MLP解码器 f l f^l fl,其中 l ∈ { 0 , 1 , 2 } l \in \{0,1,2\} l{0,1,2}分别指coarse、mid、fine-level

场景外观使用单特征网络 ψ ω \psi _\omega ψω和解码器 g ω g_\omega gω进行建模

θ \theta θ ω \omega ω表示几何和颜色的可优化参数,即网格中的特征和颜色解码器中的权重。

Mid-&Fine-level Geometric Representation

在重建过程中,我们以从粗到细的方法使用这两个网格,首先通过优化中级特征网格来重建几何形状,然后使用精细级进行细化。

在实现中,我们使用边长分别为 32cm 和 16cm 的voxel grid(体素网格),除了 TUM RGBD [45],我们使用 16cm 和 8cm。对于mid-level,使用相关的 MLP f 1 f^1 f1 将特征直接解码为占用值。对于任何点 p ∈ R 3 \textbf{p} \in \mathbb{R}^3 pR3,我们得到的占用率为
o p 1 = f 1 ( p , ϕ θ 1 ( p ) ) o_{\textbf{p}}^1=f^1(\textbf{p},\phi ^1_{\theta}(\textbf{p})) op1=f1(p,ϕθ1(p))
其中 o p 1 o_{\textbf{p}}^1 op1表示特征网格在 p 点进行三线性插值。

为了捕获场景几何中较小的高频细节,我们以残差方式添加精细级别的特征。特别地,精细级特征解码器将相应的中级特征和精细级特征两者作为输入,并输出相对于中级占用率的偏移,即:
Δ o p 1 = f 2 ( p , ϕ θ 1 ( p ) , ϕ θ 2 ( p ) ) \Delta o_{\textbf{p}}^1=f^2(\textbf{p},\phi ^1_{\theta}(\textbf{p}),\phi ^2_{\theta}(\textbf{p})) Δop1=f2(p,ϕθ1(p),ϕθ2(p))
最终一个点的占用率为: o p = o p 1 + Δ o p 1 o_{\textbf{p}}=o_{\textbf{p}}^1+\Delta o_{\textbf{p}}^1 op=op1+Δop1

我们固定了预训练解码器 f 1 f^1 f1 f 2 f^2 f2 ,并且在整个优化过程中仅优化特征网格 ϕ θ 1 \phi ^1_{\theta} ϕθ1 ϕ θ 2 \phi ^2_{\theta} ϕθ2 ,这有助于稳定优化并学习一致的几何形状。

Coarse-level Geometric Representation

粗级特征网格旨在捕获场景的高级几何形状(例如墙壁、地板等),并独立于中级和精细级进行优化。

粗网格的目标是能够预测观察到的几何形状(在中/精细级别中编码)之外的近似占用值,即使每个粗体素仅被部分观察到。为此,我们在实现中使用了非常低的分辨率,边长为 2m。与中级网格类似,我们通过对特征进行插值并通过 MLP f 0 f^0 f0 直接解码为占用值,即:
o p 0 = f 0 ( p , ϕ θ 0 ( p ) ) o_{\textbf{p}}^0=f^0(\textbf{p},\phi ^0_{\theta}(\textbf{p})) op0=f0(p,ϕθ0(p))

Pre-training Feature Decoders

在我们的框架中,我们使用三种不同的固定 MLP 将网格特征解码为占用值。粗级和中级解码器作为 ConvONet [37] 的一部分进行预训练,该网络由 CNN 编码器和 MLP 解码器组成。我们使用预测值和真实值之间的二进制交叉熵损失来训练编码器/解码器。

训练后,我们仅使用解码器 MLP ,因为我们将直接优化特征以适应重建管道中的观察结果。

使用相同的策略来预训练精细级解码器,只是我们在输入到解码器之前简单地将中级特征 ϕ θ 1 ( p ) \phi ^1_{\theta}(\textbf{p}) ϕθ1(p)与精细级特征 ϕ θ 2 ( p ) \phi ^2_{\theta}(\textbf{p}) ϕθ2(p)连接起来。

Color Representation

为了对场景中的颜色进行编码,我们应用另一个特征网格 ψ ω \psi _\omega ψω 和解码器 g ω g _\omega gω c p = g ω ( p , ψ ω ( p ) ) c_p=g _\omega(\textbf{p},\psi_\omega(\textbf{p})) cp=gω(p,ψω(p)), 其中 ω 表示优化期间的可学习参数。

Network Design

对于所有 MLP 解码器,我们使用 32 个隐藏特征维度和 5 个全连接块。除了粗级几何表示之外,我们在作为 MLP 解码器的输入之前对 p 应用可学习的高斯位置编码 。

Depth and Color Rendering

给定相机内在参数和当前相机位姿,我们可以计算像素坐标的观察方向 r \textbf{r} r。我们首先沿着这条射线采样 N s t r a t N_{strat} Nstrat点进行分层采样,同时也在深度附近均匀采样 N i m p N_{imp} Nimp点。总共,我们对每条射线采样 N = N s t r a t + N i m p N = N_{strat} + N_{imp} N=Nstrat+Nimp 个点。

p i = o + d i r , i ∈ { 1 , . . . , N } \textbf{p}_i=\textbf{o}+d_i\textbf{r},i \in \{1,...,N\} pi=o+dir,i{1,...,N}表示给定相机原点 o \textbf{o} o 的射线 r \textbf{r} r 上的采样点, d i d_i di 对应于 p i \textbf{p}_i pi 沿该射线的深度值。

计算出每个点的粗级占用概率 o p i 0 o_{p_i}^0 opi0、精细级占用概率 o p i o_{p_i} opi和颜色值 c p i c_{p_i} cpi

将点 p i \textbf{p}_i pi 处的射线终止概率建模为粗略级别的 ω i c = o p i 0 ∏ j = 1 i − 1 ( 1 − o p j 0 ) \omega_i^c=o_{p_i}^0\prod_{j=1}^{i-1}(1-o_{p_j}^0) ωic=opi0j=1i1(1opj0) ,并且 ω i f = o p i ∏ j = 1 i − 1 ( 1 − o p j ) \omega_i^f=o_{p_i}\prod_{j=1}^{i-1}(1-o_{p_j}) ωif=opij=1i1(1opj)为精细水平。

最后,对于每条光线,粗略和精细级别的深度以及颜色可以渲染为:

在这里插入图片描述

Mapping and Tracking

Mapping
为了优化 场景表示,我们从当前帧和选定的关键帧中均匀采样总共 M 个像素。接下来,我们以分阶段的方式进行优化,以最大限度地减少几何和光度损失。

几何损失只是粗略或精细级别的观测值和预测深度之间的 L1 损失:
在这里插入图片描述

光度损失也是 M 个采样像素的渲染颜色值和观察到的颜色值之间的 L1 损失:
在这里插入图片描述

  1. 第一阶段,我们使用等式(8)中的几何损失 L g f L^f_g Lgf仅优化中层特征网格 ϕ θ 1 \phi^1_θ ϕθ1
  2. 接下来,我们使用相同的精细级深度损失 L g f L^f_g Lgf 联合优化中级和精细级 ψ θ 1 ψ^1_θ ψθ1 ψ θ 2 ψ^2_θ ψθ2 特征。
  3. 最后,我们进行局部捆绑调整(BA)来联合优化各级特征网格、颜色解码器以及K个选定关键帧的相机外在参数{ R i , t i R_i,t_i Riti},其中 λ p λ_p λp是损失权重因子。
    在这里插入图片描述

这种多阶段优化方案可以实现更好的收敛,因为更高分辨率的外观和精细级特征可以依赖于来自中级特征网格的已经细化的几何形状。

Camera Tracking
我们还运行并行相机跟踪来优化当前帧的相机姿势,即旋转和平移{R,t}。为此,我们对当前帧中的 M t M_t Mt 像素进行采样,并使用与等式(9)相同的光度损失,以及修改后的几何损失:
在这里插入图片描述

相机跟踪最终被表述为以下最小化问题:

在这里插入图片描述
Robustness to Dynamic Objects
为了使优化在跟踪过程中对动态对象更加鲁棒,我们过滤了具有大深度/颜色重新渲染损失的像素。特别是,我们从优化中删除损失 Eq (12) 大于当前帧中所有像素的中值损失值 10 倍的任何像素。

图 6 显示了一个示例,其中动态对象被忽略,因为它不存在于渲染的 RGB 和深度图像中。
在这里插入图片描述

请注意,对于此任务,我们仅在映射过程中优化场景表示。在动态环境下联合优化相机参数和场景表示并非易事,我们认为这是一个有趣的未来方向。

Keyframe Selection

我们本着 iMAP [46] 的精神维护一个全局关键帧列表,我们根据信息增益逐步添加新的关键帧。然而,与 iMAP [46] 相比,我们在优化场景几何时仅包含与当前帧有视觉重叠的关键帧。

Experiments

我们考虑 5 个通用数据集:Replica [44]、ScanNet [13]、TUM RGB-D 数据集 [45]、Co-Fusion 数据集 [39],以及自捕获的具有多个房间的大型公寓。我们遵循与[53]中相同的 TUM RGB-D 预处理步骤。

** 这部分暂时先不关注

Conclusion

我们提出了 NICE-SLAM,这是一种密集视觉 SLAM 方法,它将神经隐式表示的优点与基于分层网格的场景表示的可扩展性结合起来。与具有单个大 MLP 的场景表示相比,我们的实验表明,我们的表示(微小的 MLP + 多分辨率特征网格)不仅保证了精细的映射和高跟踪精度,而且由于本地场景更新的好处。此外,我们的网络能够填充小孔并将场景几何形状外推到未观察到的区域,从而稳定相机跟踪。

Limitations
我们方法的预测能力仅限于粗略表示的规模。此外,我们的方法不执行闭环检测,这是一个有趣的未来方向。最后,尽管传统方法缺乏一些功能,但与基于学习的方法仍然存在需要弥补的性能差距

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

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

相关文章

ES-5-进阶

单机 & 集群 单台 Elasticsearch 服务器提供服务,往往都有最大的负载能力,超过这个阈值,服务器 性能就会大大降低甚至不可用,所以生产环境中,一般都是运行在指定服务器集群中 配置服务器集群时,集…

OpenAI宣布安卓版ChatGPT正式上线;一站式 LLM底层技术原理入门指南

🦉 AI新闻 🚀 OpenAI宣布安卓版ChatGPT正式上线 摘要:OpenAI今日宣布,安卓版ChatGPT已正式上线,目前美国、印度、孟加拉国和巴西四国的安卓用户已可在谷歌Play商店下载,并计划在下周拓展到更多地区。Chat…

linux快速安装tomcat

linux快速安装tomcat 前提安装好jdk 下载Tomcat安装包 wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.0.27/bin/apache-tomcat-10.0.27.tar.gz如果出现颁发的证书已经过期的错误提示,用下面命令 wget --no-check-certificate https://dlcdn.apache.org/tomcat/tomcat-1…

web浏览器脚本的调试

水一贴。 在浏览器中按F12点击"source"或者"源程序"点击html、js、css等源码文件所在的窗口的左边,此时点击处显示为蓝色光标,表示断点中断已经设置完毕。配合窗口右上角的"继续" “下一步” "跳过"等控制按钮…

android stduio 打开工程后直接报Connection refused解决

报错如下:Connection refused 解决方案: 打开gradle-wrapper.properties修改distributionUrl 将: distributionUrlhttp\://localhost/gradle/distributions/gradle-6.5-bin.zip 替换为: distributionUrlhttps\://services.gradle.org/distributions/gradle-6.5-bin.zip 错…

【外卖系统】文件上传与下载

文件上传 文件上传又称upload,将本地图片、视频等文件上传到服务器上,供其他用户下载或者浏览。 form表单:HTML中的form元素用于创建一个包含表单字段的区域,用户可以在该区域输入数据,并通过提交表单将数据发送到服务…

谷粒商城第七天-商品服务之分类管理下的分类的拖拽功能的实现

目录 一、总述 1.1 前端思路 1.2 后端思路 二、前端实现 2.1 判断是否能进行拖拽 2.2 收集受影响的节点,提交给服务器 三、后端实现 四、总结 一、总述 这个拖拽功能对于这种树形的列表,整体的搬迁是很方便的。但是其实现却并不是那么的简单。 …

618技术揭秘 - 大促弹窗搭投实践 | 京东云技术团队

背景 618 大促来了,对于业务团队来说,最重要的事情莫过于各种大促营销。如会场、直播带货、频道内营销等等。而弹窗作为一个极其重要的强触达营销工具,通常用来渲染大促氛围、引流主会场、以及通过频道活动来提升频道复访等。因此&#xff0…

基于正交滤波器组的语音DPCM编解码算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ...........................................................g0zeros(1,lenH); g1zeros(1,l…

【Git系列】分支操作

🐳分支操作 🧊1. 什么是分支🧊2. 分支的好处🧊3. 分支操作🪟3.1 查看分支🪟3.2 创建分支🪟3.3 切换分支 🧊4. 分支冲突🪟4.1 环境准备🪟4.2 分支冲突演示 &am…

汽车产业链面临重大变革 大运乘用车加强产业布局 助力低碳出行

当前,国家“双碳”战略的全面实施,全球绿色产业发展理念的不断加深以及汽车产品形态、交通出行模式、能源消费结构变革所呈现的发展机遇等诸多因素,持续推动新能源汽车产业全面转型提速。据悉,2022年,中国新能源汽车销…

【Golang 接口自动化00】为什么要用Golang做自动化?

目录 为什么使用Golang做自动化 最终想实现的效果 怎么做? 写在后面 资料获取方法 为什么使用Golang做自动化 顺应公司的趋势学习了Golang之后,因为没有太多时间和项目来实践,怕止步于此、步Java缺少练习遗忘殆尽的后尘,决定…

Docker 镜像解密:分层存储与镜像构建原理

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

2353. 设计食物评分系统;1895. 最大的幻方;842. 将数组拆分成斐波那契序列

2353. 设计食物评分系统 核心思想:首先明确我们有哪些功能,首先是修改某种食物分数的功能,然后第二点是能够每次弹出分数高字典序小的食物名字。由这两个我们想到了a 食物[分数],b 烹饪方式[分数,食物名字] 然后有一点经验的感…

Netty各组件基本用法、入站和出站详情、群聊系统的实现、粘包和拆包

Netty Bootstrap和ServerBootstrapFuture和ChannelFutureChannelSelectorNioEventLoop和NioEventLoopGroupByteBuf示例代码 Channel相关组件入站详情出站详情对象编解码ProtoBuf和ProtoStuffnetty实现群聊系统粘包和拆包TCP协议特点举个例子 Bootstrap和ServerBootstrap Boots…

css定义超级链接a标签里面的title的样式

效果: 代码: 总结:此css 使用于任何元素,不仅仅是a标签!

Redis如何实现排行榜?

今天给大家简单聊聊 Redis Sorted Set 数据类型底层的实现原理和游戏排行榜实战。特别简单,一点也不深入,也就 7 张图,粉丝可放心食用,哈哈哈哈哈~~~~。 1. 是什么 Sorted Sets 与 Sets 类似,是一种集合类型&#xff…

F5 LTM 知识点和实验 7-使用SNATs处理流量

第七章:使用SNATs处理流量 SNATs: 传统的vs都是对目的地址和端口进行改变,而源地址没有改变,如果你需要对源地址和源端口进行更改,则需要使用SNAT能力,好处在于: 1、允许不可路由地址(网络内部)的设备获得可路由地址以进入网络外部。2、确保目标服务器通过BIG-IP系统返…

Qt应用开发(基础篇)——QComboBox

目录 一、前言 二、属性和方法 三、信号 四:QFontComboBox 一、前言 QComboBox继承于QWidget,作为Qt Wdiget常用的控件,在实际开发中,经常用来作为某些特定参数属性的选择,比如语言、国家、字体、主题…

【Rust笔记】意译解构 Object Safety for trait

意译解构Object Safety for trait 借助【虚表vtable】对被调用成员函数【运行时内存寻址】的作法允许系统编程语言Rust模仿出OOP高级计算机语言才具备的【专用多态Ad-hoc Polymorphism】特性。 计算机高级语言中的“多态”术语是一个泛指。它通常可被细化为 基于继承关系的“子…