Co-SLAM——论文解析

news2025/1/23 13:56:50

Co-SLAM: Joint Coordinate and Sparse Parametric Encodings for Neural Real-Time SLAM

在这里插入图片描述

神经隐式表征slam(implict neural representaton,INR)使用一个连续函数来表征图像或者三维voxel,并用神经网络来逼近这个函数。Co-SLAM 也是这类工作,Co-SLAM 将场景表示为多分辨率哈希网格,以利用其较高的收敛速度和表示高频局部特征的能力。此外,Co-SLAM 还采用了one-blob encoding,以促进未观察区域的表面一致性和完整性;在所有关键帧上进行 BA。

一、简介

传统的 SLAM 目前可以在将深度或颜色度量融合到一张高保真地图中的同时,稳定跟踪相机位置。然而,它们使用经过人工设计的损失函数,而不会充分利用基于数据的先验知识。

目前有一些工作就是探索神经网络在 SLAM 中的能力,如直接从数据中学习平滑一致性先验。比如经典的 NeRF,使用基于坐标的网络,将场景密度和颜色编码进神经网络,再结合体绘制(Volume Rendering)可以重新合成输入图像,这对附近不可见的视图有很高的泛化能力。

基于坐标的网络使用正弦编码等方式将点坐标嵌入高维空间,结合编码进 MLP 的平滑一致性先验,从而捕捉高频细节。然而,基于 MLP 的方法所需的训练时间较长(有时需要数小时)。最近的研究将实时 SLAM(如 iMAP)建立在具有 frequency embedding 的基于坐标表示的网络上,它们需要采用稀疏射线采样和减少跟踪迭代的策略,来维持交互式操作。 这就会导致细节丢失,重构会过度平滑,而且相机跟踪可能会出现误差。

parametric embedding 能够表示高保真的局部特征,且收敛速度很快,有的研究为了提高 denseGrid(将空间划分网格,每个顶点处为可训练的特征) 的效率,对特征进行稀疏表示,如 hashGrid(只给T个位置存储特征),但缺乏 MLP 固有的平滑一致性先验,在没有观测到的区域难以进行 hole-filling。

Co-SLAM 结合 coordinate based encoding (本文使用one-blob)和 parametric embedding (本文使用hashGrid)的优势,one-blob enconding 提供了平滑一致性先验,hashGrid 优化了速度和局部细节。

Co-SLAM 还采用全局 BA,从所有的关键帧中采样射线,这就提高了位姿估计的准确性。

二、相关

稠密图视觉 SLAM
传统采用 3D-3D ICP 求解,采用深度学习可以提升准确性和鲁棒性,但大部分的 pipeline 仍然采用传统方法。

INR
INR在神经网络中编码三维图像,如具有代表性的 NeRF,采用了带有 MLP的 coordinate encoding 通过体绘制进行场景重建,但是训练事件过长,后续有 parametric embedding 等工作,虽然增加了参数量,但是减少了训练时间。

Neural Implicit SLAM
iMAP 采用 MLP 在接近实时内同时追踪和建图,从而实现了 10 Hz tracking 和 2 Hz 建图。为了减少计算开销并提高可扩展性,NICE-SLAM 采用了多层特征网格来表示场景。然而,由于特征网格只进行局部更新,因此无法实现合理的hole-filling。

三、方法

在这里插入图片描述
在这里插入图片描述
其中 f 代表神经隐式表征,x 代表世界坐标,c 代表颜色,s 代表截断符号距离(TSDF)。

整个过程分为 tracking 和 mapping。初始化是在第一帧上迭代几次训练。对于随后的每一帧,首先优化相机位姿,并以简单的匀速恒定运动模型进行初始化。然后对一小部分像素进行采样,并复制到全局像素集中。在每次映射迭代中,都会对从全局像素集中随机取样的一组像素进行全局 BA,以共同优化场景表示 θ 和所有相机位姿 {ξt} 。

3.1 Joint Coordinate and Parametric Encoding

基于坐标的表示方法受益于 MLP 中的平滑一致性先验,能得到高保真的重建结果,但是收敛缓慢,且会发生灾难性遗忘。
parametric encoding 方法提升了计算效率,但是在平滑性和 hole-filling 上表现不佳。

本文结合两者的优点,使用 One-blob 编码 γ(x),而不是将空间坐标嵌入多个频段。在 hashGrid 的多分辨率特征网格表征中使用 One-blob 编码,可实现快速收敛、高效内存使用和 online SLAM 所需的 hole-filling。

(Neural Importance Sampling 4.3)An important consideration is the encoding of the inputs to the network. We propose to use the one-blob encoding—a generalization of the one-hot encoding [Harris and Harris 2013]—where a kernel is used to activate multiple adjacent entries instead of a single one. Assume a scalars ∈ [0, 1] and a quantization of the unit interval into k bins (we use k = 32). The one-blob encoding amounts to placing a kernel (we use a Gaussian with σ = 1/k) at s and discretizing it into the bins. With the proposed architecture of the neural network (placement of ReLUs in particular, see Figure 3), the one-blob encoding effectively shuts down certain parts of the linear path of the network, allowing it to specialize the model on various sub-domains of the input.
In contrast to one-hot encoding, where the quantization causes a loss of information if applied to continuous variables, the one-blob encoding is lossless; it captures the exact position of s.

作为场景表示,我们采用基于哈希的多分辨率特征网格 Vα 。每一层的空间分辨率在最粗分辨率 Rmin 和最细分辨率 Rmax 之间逐步设置。每个采样点 x 上的特征向量 Vα(x) 通过三线性插值法进行查询。decodeer 输出预测的 SDF 值 s 和特征向量 h:
在这里插入图片描述
color MLP 输出颜色:
在这里插入图片描述

3.2. Depth and Color Rendering

通过对沿采样射线的预测值进行积分,来呈现深度和色彩。具体来说,给定摄像机原点 o 和光线方向 r,对 M 个点 xi = o + di r 进行均匀采样,i ∈ {1, ., M},深度值为 {t1, ., tM} ,颜色为 {c1, ., cM}, 并将颜色和深度渲染为
在这里插入图片描述
wi 为沿射线方向的权重,这是通过一个转换函数将预测的 SDF si 转换得到的,其中 tr (10cm)是截断距离:
在这里插入图片描述

3.3. Tracking and Bundle Adjustment

目标函数
颜色和深度 loss 通过平方误差计算,其中 Rd 是射线集合,u、v是图像平面的相应像素:
在这里插入图片描述
为了实现精确、平滑的重建,还应用了近似 SDF 和特征平滑损失。

具体来说,对于截断区域内的样本,即 |D[u, v] - d| ≤ tr 的点,我们使用采样点与其观测深度值之间的距离作为 gt SDF 的近似值进行监督:
在这里插入图片描述
对于 |D[u, v] - d| > tr 的点,采用 free-space loss ,迫使 SDF 预测值成为截断距离 tr:
在这里插入图片描述
为了防止在未观测到的区域发生 hash 冲突而导致的噪声重建,对插值特征进行了额外的正则化处理:
在这里插入图片描述
∆ 表示 hashGrid 上相邻采样顶点在三个维度上的特征度量差异。由于在整个特征网格上进行正则化对于实时建图来说在计算上不可行,因此只在每次迭代中的一小块随机区域进行正则化。

Camera Tracking
相机到世界的变换矩阵 T,基于匀速恒定运动模型:
在这里插入图片描述
然后选取当前帧内的 Nt (1024)个像素,通过最小化目标函数来优化位姿,而目标函数则与相机外参 ξt 有关。

Bundle Adjustment
在 neural SLAM 中,BA 通常包括关键帧选择以及相机位姿和场景表示的联合优化。经典的稠密图 vSLAM 方法需要保存关键帧,因为损失是在所有像素上计算的。

iMAP 的 neural SLAM 优势在于,BA 可以使用稀疏的采样射线集。这是因为使用神经网络将场景表示为隐式场。然而,iMAP 和 NICE-SLAM 并没有充分利用这一点,它们仍然按照经典的 SLAM 模式存储完整的关键帧图像,并依靠关键帧选择(如信息增益、视觉重叠)对一小部分关键帧(通常少于 10 个)进行联合优化。

在 Co-SLAM 中,不再需要存储完整的关键帧图像或关键帧选择。相反只存储代表每个关键帧的像素子集(约 5%)。为了进行联合优化,我们从全局关键帧列表中随机抽取 Ng 条射线,以优化场景表示和相机位姿。

联合优化以交替的方式进行。具体来说,km 步优化场景表示 θ,然后利用相机外参 {ξt} 的累积梯度更新位姿。由于外参只使用 6 个参数,这种方法可以提高位姿优化的鲁棒性,而梯度累积的额外计算成本几乎可以忽略不计。

四、实验

重建 metrcis:Depth L1 (cm), Accuracy (cm), Completion (cm), Completion ratio (%) with a threshold of 5cm
相机追踪:ATE RMSE (cm)

实验还删除了相机半径内但目标场景外的噪声点,这对于所有已有的方法都有提升。

baseline:iMAP、NICE-SLAM

五、结论

局限:Co-SLAM 依靠 RGB-D 的输入,因此对光照变化和不准确的深度测量非常敏感。与随机抽样关键帧像素相比,信息引导像素抽样策略有助于进一步减少像素数量,提高跟踪速度。采用回环检测可进一步提高跟踪质量。

参考
[1]Neural Importance Sampling: https://arxiv.org/pdf/1808.03856.pdf
[2]Co-SLAM: https://arxiv.org/abs/2304.14377
[3]https://github.com/HengyiWang/Co-SLAM
[4]http://liuxiao.org/kb/3dvision/3d-reconstruction/tsdf-truncated-signed-distance-function/
[5]https://blog.csdn.net/weixin_49003609/article/details/130328062

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

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

相关文章

MyBatis-Plus-扩展操作(3)

3.扩展 代码生成 逻辑删除 枚举处理器 json处理器 配置加密 分页插件 3.1 代码生成 https://blog.csdn.net/weixin_41957626/article/details/132651552 下载下面的插件 红色的是刚刚生成的。 我觉得不如官方的那个好用,唯一的好处就是勾选的选项能够看的懂得。…

架构图怎么制作?分享5个实用方法!

面对复杂的系统、应用程序或项目,绘制架构图是一种关键的手段,帮助我们清晰地展示各个组件、关系和交互。本文将带你深入了解几种常见的制作架构图的方法,一起看下去吧。 1 手绘和扫描 对于简单的概念,你可以手绘架构图&#…

自考本科,毕业八年,2023浙大MPA提面优秀分享

去年十月中旬,我参加了浙江大学MPA提前批面试。结果出乎意料地,我竟然获得了A资格。对此,我自己也感到难以置信。事实上,我只是抱着试一试的心态递交了申请材料。因为通过我对前几年浙大自划线的情况来看,对于浙江大学…

OSPF协议:优点、初始化流程和管理

文章目录 一、RIP的缺陷二、定义三、OSPF初始化流程1. 建立邻居和邻接关系2. 邻接路由器之间交换链路状态信息,实现区域内链路状态数据库同步3. 每台路由器根据本机链路状态数据库,计算到达每个目的网段的最优路由,写入路由表 四、OSPF分区域…

自媒体MCN公司选择企业云盘:哪个更适合?

自媒体MCN公司用什么企业云盘好?Zoho WorkDive企业网盘助力内容创作与MCN公司进行文件储存与管理。 一、MCN公司业务背景 A公司是一家处于蓬勃发展的MCN(多频道网络)机构,其业务范围广泛且多元化。A公司为文化娱乐行业提供经纪人服务,帮助艺人…

软考备考-程序员-备考笔记

软考备考-程序员-备考笔记 持续更新中》》》》》 更新日志: 刷题软件: 希赛网:每日一练和往年真题是免费的 软考通:完全免费 软考真题:完全免费 51CTO题库:微信小程序,不用下载,顺手 试卷题…

Java集合大总结——Map集合

Map集合框架 1、Map集合框架1.1 关于Map接口中的主要实现类1.2 各实现类的特点: 2. HashMap 和 Hashtable 的区别3. HashMap 和 HashSet 区别4. HashMap 和 TreeMap 区别 1、Map集合框架 注意:Map接口是在java.util.Map 的包下,Map 接口不是…

深度学习面试八股文(2023.9.06)

一、优化器 1、SGD是什么? 批梯度下降(Batch gradient descent):遍历全部数据集算一次损失函数,计算量开销大,计算速度慢,不支持在线学习。随机梯度下降(Stochastic gradient desc…

知识库搭建最简单的方法:登录、创建、优化,就这三步!

实际应用中,企业所需要的知识库场景不止一个,更多是很多场景的复合模式,甚至还需要不同团队间的协作配合,这个时候就还需要去考虑不同部门/团队间的业务拉通。 搭建知识库 所以当我们搭建知识库的时候,不仅要掌握基础…

【每天一道算法题】day2-认识时间复杂度

认识时间复杂度: O:读作big O,在数学上指的是上限的意思 常数时间的操作 一个操作如果和样本的数据量没有关系,每次都是固定时间内完成的操作,叫做常数操作。时间复杂度为一个算法流程中,常数操作数量的一…

docker系列(1) - docker环境篇

文章目录 1. docker环境1.1 docker安装1.2 阿里云镜像加速器1.2 docker管理工具(portainer)1.3 docker网络1.3.1 网络说明1.3.2 创建指定网关的网络 1. docker环境 1.1 docker安装 #CentOS 6 rpm -iUvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noar…

windows10系统-14-VirtualBox中的设置

VirtualBox 常用设置说明 Ubuntu-server18.04.2LTS安装VirtualBox增强功能 VirtualBox官网 使用VirtualBox一步一步安装Ubuntu 22.04 ubuntu server官网安装教程 1 新建虚拟机 (1)点击新建,在新建虚拟电脑对话框填入虚拟电脑的名称,保存的位置。推荐保…

代码随想录第41天| 343.整数拆分,96.不同的二叉搜索树

343.整数拆分 这道题全程懵逼 343. 整数拆分 class Solution {public int integerBreak(int n) {//推论一: 若拆分的数量 a 确定, 则 各拆分数字相等时 ,乘积最大。//推论二: 将数字 n尽可能以因子 3等分时,乘积最大…

ElementPlus·面包屑导航实现

面包屑导航 使用vue3中的UI框架elementPlus的 <el-breadcrumb> 实现面包屑导航 <template><!-- 面包屑 --><div class"bread-container" ><el-breadcrumb separator">"><el-breadcrumb-item :to"{ path:/ }&quo…

apt安装yum

配置apt国内镜像源 /etc/apt/sources.list deb https://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse deb-src https://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse deb https://mirrors.aliyun.com/ubuntu/ trusty-…

19 螺旋矩阵

螺旋矩阵 题解1 循环&#xff08;4个标志——根据顺时针&#xff09;题解2 方向 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 提示&#xff1a; - m matrix.length - n matrix[i].length - 1 < m, n <…

LVS NAT模式负载均衡群集部署

目录 1 群集(集群) cluster 1.1 群集的类型 2 LVS的工作模式及其工作过程 2.1 NAT模式&#xff08;VS-NAT&#xff09; 2.2 直接路由模式&#xff08;VS-DR&#xff09; 2.3 IP隧道模式&#xff08;VS-TUN&#xff09; 3 LVS-NAt 模式配置步骤 3.1 部署共享存储 3.2 配…

【全网最全protobuf中文版教程】

protocal buffer Notes 文章目录 protocal buffer Notes为什么是ProtoBufprotoBuf数据要素字段编号标签字段类型标量枚举复合类型mapgroup 导入其他消息类型编码解码编码解码 proto生成文件 为什么是ProtoBuf 通常&#xff0c;程序运行时产生的一些结构化数据会经历存储或者与…

基于Java+SpringBoot+Vue校园求职招聘系统的设计与实现 前后端分离【Java毕业设计·文档报告·代码讲解·安装调试】

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

docker系列(2) - 常用命令篇

文章目录 2. docker常用命令2.1 参数说明(tomcat案例)2.2 基本命令2.3 高级命令2.4 其他 2. docker常用命令 2.1 参数说明(tomcat案例) 注意如果分成多行&#xff0c;\后面不能有空格 # 拉取运行 docker run \ -d \ -p 8080:8080 \ --privilegedtrue \ --restartalways \ -m…