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

news/2024/3/29 17:07:14/文章来源:https://blog.csdn.net/qin_liang/article/details/131962523

论文信息

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

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.luyixian.cn/news_show_337325.aspx

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

相关文章

Spring-mybatis结合的底层原理

1.项目前期准备 1.1 导入maven jar包 <dependencies><!-- spring依赖 --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.5.RELEASE</version></depende…

Java中对Redis的常用操作

目录 数据类型五种常用数据类型介绍各种数据类型特点 常用命令字符串操作命令哈希操作命令列表操作命令集合操作命令有序集合操作命令通用命令 在Java中操作RedisRedis的Java客户端Spring Data Redis使用方式介绍环境搭建配置Redis数据源编写配置类&#xff0c;创建RedisTempla…

QT--day5(网络聊天室、学生信息管理系统)

服务器&#xff1a; #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//给服务器指针实例化空间servernew QTcpServer(this); }Widget::~Widget() {delete ui; …

texshop mac中文版-TeXShop for Mac(Latex编辑预览工具)

texshop for mac是一款可以在苹果电脑MAC OS平台上使用的非常不错的Mac应用软件&#xff0c;texshop for mac是一个非常有用的工具&#xff0c;广泛使用在数学&#xff0c;计算机科学&#xff0c;物理学&#xff0c;经济学等领域的合作&#xff0c;这些程序的标准tetex分布特产…

【雕爷学编程】MicroPython动手做(15)——掌控板之AB按键

知识点&#xff1a;什么是掌控板&#xff1f; 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片&#xff0c;支持WiFi和蓝牙双模通信&#xff0c;可作为物联网节点&#xff0c;实现物联网应用。同时掌控板上集成了OLED…

MacOS Monterey VM Install ESXi to 7 U2

一、MacOS Monterey ISO 准备 1.1 下载macOS Monterey 下载&#x1f517;链接 一定是 ISO 格式的&#xff0c;其他格式不适用&#xff1a; https://www.mediafire.com/file/4fcx0aeoehmbnmp/macOSMontereybyTechrechard.com.iso/file 1.2 将 Monterey ISO 文件上传到数据…

jenkins 配置git

在linux 中输入 保证git 安装成功 git --version使用查看git 安装目录&#xff08;非源码安装直接用yum 安装的&#xff09; which gitjenkins 中到 系统管理–>全局工具配置–> Git installations 新建一个项目 选择自由风格 源码管理选择 git 如果使用的是码云&a…

Reinforcement Learning with Code 【Code 1. Tabular Q-learning】

Reinforcement Learning with Code 【Code 1. Tabular Q-learning】 This note records how the author begin to learn RL. Both theoretical understanding and code practice are presented. Many material are referenced such as ZhaoShiyu’s Mathematical Foundation o…

PostgreSQL构建时间

– PostgreSQL构建时间 select make_timestamp(2023,7,27,7,34,16);

Docker复杂命令便捷操作

启动所有状态为Created的容器 要启动所有状态为"created"的Docker容器&#xff0c;可以使用以下命令&#xff1a; docker container start $(docker container ls -aq --filter "statuscreated")上述命令执行了以下步骤&#xff1a; docker container l…

基于x-scan的渲染算法

基于x-scan算法实现的z-buffer染色&#xff0c;.net core framework 3.1运行。 x-scan算法实现&#xff1a; public List<Vertex3> xscan() {List<Vertex3> results new List<Vertex3>();SurfaceFormula formula getFormula();Box rect getBound();for …

【VTK】基于读取出来的 STL 模型,当用户点击鼠标左键时,程序将获取点击位置的点,显示其坐标,并设置它为模型的旋转原点

知识不是单独的&#xff0c;一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏&#xff1a;Visual Studio。 文章目录 class PointPickedSignal : public QObjectclass MouseInteractorCommand : public vtkCommandvoid A::on_pushButtonSelected_clicked()void A::on…

谷粒商城第六天-商品服务之分类管理下的获取三级分类树形列表

目录 一、总述 1.1 前端思路 1.2 后端思路 二、前端部分 2.1 在网页中建好目录及菜单 2.1.1 建好商品目录 2.1.2 建好分类管理菜单 ​编辑 2.2 编写组件 2.2.1 先完成组件文件的创建 2.2.2 编写组件 2.2.2.1 显示三级分类树形列表 三、后端部分 3.1 编写商品分类…

Michael.W基于Foundry精读Openzeppelin第15期——SignedMath.sol

Michael.W基于Foundry精读Openzeppelin第15期——SignedMath.sol 0. 版本0.1 SignedMath.sol 1. 目标合约2. 代码精读2.1 max(int256 a, int256 b) && min(int256 a, int256 b)2.2 average(int256 a, int256 b)2.3 abs(int256 n) 0. 版本 [openzeppelin]&#xff1a;v…

Blazor前后端框架Known-V1.2.8

V1.2.8 Known是基于C#和Blazor开发的前后端分离快速开发框架&#xff0c;开箱即用&#xff0c;跨平台&#xff0c;一处代码&#xff0c;多处运行。 Gitee&#xff1a; https://gitee.com/known/KnownGithub&#xff1a;https://github.com/known/Known 概述 基于C#和Blazor…

python整理

Python 整理&#xff08;更新中&#xff09; 一、环境搭建 1- 下载python解析器 下载地址&#xff1a;https://www.python.org/ 2- 安装解析器: 3.pycharm 安装操作 1- 下载pycharm 下载地址: https://www.jetbrains.com/pycharm/ pycharm开发第一个Python程序 在这…

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

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

Flutter 使用texture_rgba_renderer实现桌面端渲染视频

Flutter视频渲染系列 第一章 Android使用Texture渲染视频 第二章 Windows使用Texture渲染视频 第三章 Linux使用Texture渲染视频 第四章 全平台FFICustomPainter渲染视频 第五章 Windows使用Native窗口渲染视频 第六章 桌面端使用texture_rgba_renderer渲染视频&#xff08;本…

Power BI-云端报表定时刷新--ODBC、MySQL、Oracle等其他本地数据源的刷新(二)

ODBC数据源 一些小众的数据源无法直接连接&#xff0c;需要通过微软系统自带的应用“ODBC数据源”连接。 1.首次使用应安装对应数据库的ODBC驱动程序&#xff0c;Mysql的ODBC驱动需要手动安装 2.在web服务中进行数据源的配置 Mysql数据源 1.Powerbi与Gateway第一次连SQL…

IDEA debug总结

调试一次编程题&#xff0c;发现没有掌握debug技巧&#xff0c;确实费事&#xff0c;做一次总结&#xff0c;方便以后回顾。 Run to Cursor 跳到光标处&#xff0c;适用于快速跳过循环&#xff0c;定位到光标处&#xff0c;而不用到处打断点&#xff0c;使用断点跳转。非常实…