vMAP——论文解析

vMAP: Vectorised Object Mapping for Neural Field SLAM

在这里插入图片描述
vMAP 是一个物体级稠密图 neural SLAM,每一个物体都用一个 mlp 来表征,而不需要 3D 先验。当 RGB-D 相机在没有任何先验信息的情况下时,vMAP 会即时检测物体 instance,并将其动态地添加到地图中。

基于 vectorised training,vMAP 可以优化单个场景中多达 50 个单独的物体,并以 5Hz 的地图更新速度进行高效训练。

一、简介

物体级的模型通常是最好的,但关键在于,要对场景中的对象进行分割、分类以及重建,需要了解多大程度的先验信息。如果没有先验,通常只能重建出来观察到的物体部分,还有像 CAD 和 类别级形状空间模型虽然能获取物体先验,但是仅限于有对应物体的模型存在。

这个工作证明了在实时运行过程中,通过矢量化训练,大量独立的 MLP 物体模型可以在单个 GPU 上同时进行高效优化。

与在整个场景的单一神经场模型中使用类似数量的权重相比,通过对物体进行单独建模,我们可以实现更准确、更完整的场景重建。通过多个独立的物体级网络,能重建出最多 50 个物体的场景,每个物体只需 40KB 的学习参数。

二、相关

Neural Field SLAM
iMAP 首次借助 RGB-D 传感器的深度测量数据逐步训练的简单 MLP 网络可以实时表示房间大小的三维场景。iMAP 经常能重建未观察到的物体背面。当添加语义信息(如 SemanticNeRF 和 iLabel)时,神经场的这些连贯性特性就会特别显现出来。为了使隐式表征更具可扩展性和效率,有些工作常与传统的体积表征相融合。

Object Representations with Neural Fields
然而,从 Neural Field 中获取单个物体表征非常困难,因为网络参数与特定区域之间的对应关系难以确定。为了解决这个问题,DeRF 对场景进行了空间分解,并为每个分解部分专门设计了更小的网络。KiloNeRF 将场景分解为数千个体素,每个部分由一个微小的 MLP 表示,并使用定制的 CUDA 内核对其进行并行训练,以加快 NeRF 的速度。与 KiloNeRF 不同,vMAP 将场景分解为具有语义意义的对象。

为了表示多个物体,ObjectNeRF 和 ObjSDF 将预先计算的实例掩码作为额外输入,并将可学习的物体激活码作为物体表征的条件。但这些方法仍然是 offline 的,并将物体表征与主场景网络结合在一起优化网络权重。vMAP 对物体进行单独建模,能够停止和恢复对任何物体的训练,而不会受到物体间的干扰。

以 CodeNeRF 为基础,本文展示了可在实时系统中同时训练构成整个场景的多个独立神经场模型,从而准确、高效地呈现多物体场景。

三、方法

在这里插入图片描述

3.1 Vectorised Object Level Mapping

Object Initialisation and Association
首先,每帧图像都与标注的对象掩码相关联,这些对象掩码要么是数据集提供的,要么是通过现成的 2D 实例分割网络预测的。由于这些预测的对象掩码在不同帧之间没有时间上的一致性,因此我们根据两个标准在前一帧和当前实时帧之间进行对象关联:

  1. 语义一致性:当前帧中的对象被预测为与前一帧中的对象属于同一语义类别;
  2. 空间一致性:当前帧中的对象与前一帧中的对象在空间上接近,以它们的平均 IoU 来衡量。
    如果满足这两个标准,我们就认为它们是同一个物体实例,并用相同的模型来表示它们。否则初始化一个新的模型并加入到栈中。

对于帧中的每个物体,通过其 3D 点云估计其边界,并以其深度图和相机位姿为参数。相机跟踪由 ORB-SLAM3 提供。如果在新帧中检测到相同的物体实例,就会将之前帧中的 3D 点云合并到当前帧中,并重新估计边界。因此,这些物体边界会随着更多的观察结果动态更新。

Object Supervision
为了最大限度地提高训练效率,只对 2D 物体 bbox 内的像素进行物体级监督。对于物体 mask 内的像素,我们鼓励使用辐射场,并通过深度和颜色损失对其进行监督。否则,我们会鼓励辐射场为空。

每个物体实例都从自己独立的关键帧缓冲区中采样像素。因此可以灵活地停止或恢复任何物体的训练,物体之间不会产生干扰。

Vectorised Training
KiloNeRF 用多个小型网络来表示神经场,可以提高训练效率。在 vMAP 中同样采用这种思路,用一个稍大的网络来表示物体,这样就可以将这些小物体模型堆叠在一起,再利用 functorch 中高度优化的矢量化操作进行矢量化训练。由于多个对象模型是 batch 后同时训练的,而不是按顺序训练,因此优化了 GPU 资源的使用。

3.2 Neural Implicit Mapping

Depth Guided Sampling
仅根据 RGB 数据训练的神经场无法保证建立精确的物体几何模型,vMAP 利用 RGB-D 传感器提供的深度图,来为学习密度场提供先验。具体来说,沿每条射线采样 Ns 和 Nc 个点,其中 Ns 个点以物体表面 ts(来自深度图)为中心的正态分布采样,方差为 dσ = 3cm,Ns越多物体越准确;Nc 个点在相机 tn(临近边界)和物体表面 ts 之间均匀采样,采用分层抽样方法。当深度测量无效时,物体表面 ts 将被远边界 tf 取代:
在这里插入图片描述
Surface and Volume Rendering
由于我们更关注 3D 表面重建而非 2D 渲染,因此我们在网络输入中省略了相机方向,并用二进制指标(无透明物体)来模拟物体可见度。与 UniSURF 相似,将 3D 点 xi 的占用概率参数化为 oθ (xi) ->[0, 1],θ是网络参数。因此,沿射线 r 中 xi 点的终止概率为 Ti = o (xi) ∏(1 − o (xj)),j<i ,表示在 xi 之前不存在 j < i 的占用样本 xj。相应的渲染占用率、深度和颜色定义如下:
在这里插入图片描述
Training Objective
对于每个物体 k,只对该物体 bbox(用 Rk 表示)内的训练像素进行采样,并只对其 2D 对象 mask(用 Mk 表示)内的像素进行深度和颜色优化,Mk ⊂ Rk。对象 k 的深度、颜色和占用率损失定义如下:
在这里插入图片描述在这里插入图片描述
其中 λ1 = 5 、 λ2 = 10。

3.3 Compositional Scene Rendering

由于 vMAP 在一个完全分离的表示空间中表示物体,因此我们可以通过在其估计的 3D 物体边界内查询每个物体。在 2D 视图合成方面,使用 RayBox Intersection 算法计算每个物体的近边界和远边界,然后沿每条光线按照渲染深度排序,实现感知遮挡的场景级渲染。

四、实验

数据集的质量决定了系统的上限。

实例分割选择 Detic,位姿估计部分选择 ORB-SLAM3。

metrics:Accuracy, Completion, Completion Ratio ,这种场景级指标严重偏向于重建墙壁和地板等大型物体。因此,我们通过平均每个场景中所有物体的度量值,额外提供了这些物体级度量值。

矢量化训练极大地提高了优化速度,尤其是当我们训练大量对象时。 有了矢量化训练,即使我们训练多达 200 个对象,每个优化步骤也不会超过 15 毫秒。
在这里插入图片描述
为了并行训练多个模型,我们最初尝试的方法是为每个对象启动一个进程。然而,由于每个进程的 CUDA 内存开销,我们只能生成非常有限数量的进程,这大大限制了对象的数量。

物体级表征是高度可压缩的,只需很少的参数就能高效、准确地进行参数化。

除了用单个 MLP 表示每个对象外,我们还将多对象映射视为多任务学习问题,探索了共享 MLP 设计[27, 34]。在这里,每个物体都与一个可学习的潜在代码相关联,这个潜在代码被视为网络的条件输入,并与网络权重共同优化。虽然我们尝试过多种多任务学习架构 [13, 19],但早期实验(图 9 中表示为 vMAP-S)表明,这种共享 MLP 设计的重建质量略有下降,而且与堆叠式 MLP 相比,训练速度没有明显提高。

作者还尝试了 shared MLP,即将多物体mapping视为多任务学习问题,但可能会导致不理想的训练特性:
i) 网络权重和所有对象编码在共享表示空间中纠缠在一起,一起进行优化;
ii) 在训练过程中,共享 MLP 的容量是固定的,因此随着对象数量的增加,表示空间可能不够用。

五、结论

我们目前的系统依赖于现成的实例掩码检测器,而这种检测器并不一定在时空上保持一致。虽然数据关联和多视角监督可以部分缓解这种模糊性,但合理的全局约束会更好。由于物体是独立建模的,因此可以对动态物体进行持续跟踪和重构,以完成下游任务,如机器人操纵。为了将我们的系统扩展到单目稠密图,可以进一步整合深度估计网络或更高效的神经渲染方法。

通过对分离的预训练特征字段进行调节来改变对象的形状或纹理。

参考:
[1] UniSURF: https://arxiv.org/pdf/2104.10078.pdf
[2] https://github.com/kxhit/vMAP
[3] vMAP: https://arxiv.org/pdf/2302.01838.pdf

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

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

相关文章

Solidity 小白教程:19. 接收 ETH receive 和 fallback

Solidity 小白教程&#xff1a;19. 接收 ETH receive 和 fallback Solidity支持两种特殊的回调函数&#xff0c;receive()和fallback()&#xff0c;他们主要在两种情况下被使用&#xff1a; 接收 ETH处理合约中不存在的函数调用&#xff08;代理合约 proxy contract&#xff…

Thymeleaf语法详解

目录 一、Thymeleaf介绍 &#xff08;1&#xff09;依赖 &#xff08;2&#xff09;视图 &#xff08;3&#xff09;控制层 二、变量输出 三、操作字符串 四、操作时间 五、条件判断 六、遍历集合 &#xff08;1&#xff09;迭代遍历 &#xff08;2&#xff09;将遍…

webpack 基础配置

常见配置 文件打包的出口和入口webpack如何开启一台服务webpack 如何打包图片&#xff0c;静态资源等。webpack 配置 loader配置 plugin配置sourceMap配置 babel 语法降级等 接下来 &#xff0c; 我们先从webpack的基本配置 开始吧&#xff01; 在准备 配置之前 , 搭建一个 …

程序地址空间

✅<1>主页&#xff1a;&#xff1a;我的代码爱吃辣 &#x1f4c3;<2>知识讲解&#xff1a;Linux——程序地址空间 ☂️<3>开发环境&#xff1a;Centos7 &#x1f4ac;<4>前言&#xff1a;我们一直随口就能说出来的栈区&#xff0c;堆区&#xff0c;常量…

VS code 下 makefile 【缺少分隔符 停下来】 报错解决方法

首先来看报错的makefile源码 再来看报错的信息&#xff1a; 第5行缺少分隔符&#xff0c;其实不止是第5行&#xff0c;只要是前面需要加tab留白的行都会报这个错误&#xff0c;比如说第7行第11行 编译的时候&#xff0c;前面的留白必须是按tab键生成的 但是&#xff01;&…

C++11线程库简介

前言 在c11之前涉及多线程的问题都是和平台相关的&#xff0c;比如windows和linux都有一套自己的接口&#xff0c;这使得代码的可移植性变差。C11中最重要的特性就是对线程进行了支持&#xff0c;使得C在编程时不再依赖第三方库&#xff0c;而且原子操作中还引入了原子类的概念…

LeetCode:3. 无重复字符的最长子串

给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 3. 无重复字符的最长子串 - 力扣&#xff08;LeetCode&#xff09; // 3.无重复字符的最长子串 // 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 class Solu…

DETR:End-to-End Object Detection with Transformers

代码&#xff1a;https://github.com/HuKai97/detr-annotations 论文&#xff1a;https://arxiv.org/pdf/2005.12872.pdf 参考视频&#xff1a;DETR 论文精读【论文精读】_哔哩哔哩_bilibili 团队&#xff1a;Meta AI 摘要 DETR 做目标检测任务既不需要proposal&#xff0…

elasticsearch4-文档操作

个人名片&#xff1a; 博主&#xff1a;酒徒ᝰ. 个人简介&#xff1a;沉醉在酒中&#xff0c;借着一股酒劲&#xff0c;去拼搏一个未来。 本篇励志&#xff1a;三人行&#xff0c;必有我师焉。 本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》&#xff0c;SpringCloud…

html的日期选择插件

1.效果 2.文档 https://layui.gitee.io/v2/docs/ 3.引入 官网地址&#xff1a; https://layui.gitee.io/v2/ 引入&#xff08;在官网下载&#xff0c;&#xff09;jquery-1.7.2.min.js,layui/layui.js **<link href"js/layui/css/layui.css" rel"stylesh…

哈夫曼编码原理及实现

文章目录 一.哈夫曼编码原理哈夫曼二叉树构建 二.具体代码实现 一.哈夫曼编码原理 哈夫曼编码&#xff08;Huffman Coding&#xff09;是一种用于数据压缩的编码方法&#xff0c;它通过给出不同的数据符号分配不同长度的编码&#xff0c;使得出现频率高的符号具有较短的编码&a…

OpenCV(四十一):图像分割-分水岭法

1.分水岭方法介绍 OpenCV 提供了分水岭算法&#xff08;Watershed Algorithm&#xff09;的实现&#xff0c; 使用分水岭算法对图像进行分割&#xff0c;将图像的不同区域分割成互不干扰的区域。分水岭算法模拟了水在图像中的扩散和聚集过程&#xff0c;将标记的边界被看作是阻…

PHP8中获取并删除数组中第一个元素-PHP8知识详解

我在上一节关于数组的教程&#xff0c;讲的是在php8中获取并删除数组中最后一个元素&#xff0c;今天分享的是相反的&#xff1a;PHP8中获取并删除数组中第一个元素。 回顾一下昨天的知识&#xff0c;array_pop()函数将返回数组的最后一个元素&#xff0c;今天学习的是使用arr…

Vue自动生成二维码并可下载二维码

遇到一个需求&#xff0c;需要前端自行生成用户的个人名片分享二维码&#xff0c;并提供二维码下载功能。在网上找到很多解决方案&#xff0c;最终吭哧吭哧做完了&#xff0c;把它整理记录一下&#xff0c;方便后续学习使用&#xff01;嘿嘿O(∩_∩)O~ 这个小东西有以下功能特点…

AWT中常用组件

笔记&#xff1a;https://www.yuque.com/huangzhanqi/rhwoir/repuodh23fz01wiv 仓库&#xff1a;Java图形化界面: Java图形化界面学习demo与资料 (gitee.com) 基本组件 组件名 功能 Button Button Canvas 用于绘图的画布 Checkbox 复选框组件&#xff08;也可当做单选…

批量获取CSDN文章对文章质量分进行检测,有助于优化文章质量

&#x1f4da;目录 ⚙️简介✨分析获取步骤⛳获取文章列表☘️前期准备✨ 接口解析⚡️ 获取文章的接口 ☄️文章质量分接口⭐接口分析 ⌛代码实现&#xff1a;⚓核心代码:⛵测试用例:⛴ 运行效果:☘️增加Excel导出 ✍️结束 ⚙️简介 有时候我们写文章是为了记录当下遇到的bu…

查看表结构

MySQL从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129334507?spm1001.2014.3001.5502 语法格式: desc 表名; 描述: 如果表不存在,就提示不存在; 如果表存在,就显示表的结构 比如: desc test01; desc test02; 错误示范: mysql> …

systemserver的inputdispatcher直接产生CANCEL事件原理分析-讨厌的android触摸面试题

背景回顾&#xff1a; 上一个blog已经重点讲解了app层面自己产生的Cancel触摸事件&#xff0c;大概产生的原理如下&#xff1a; 上一个blog地址&#xff1a;https://blog.csdn.net/learnframework/article/details/124086882 即可以看出来&#xff0c;在服务端systemserver其实…

vue3-vant4-vite-pinia-axios-less学习日记

代码地址 GitHub&#xff1a;vue3-vant4-vite-pinia-axios-less 效果如图 1.首页为导航栏 2.绑定英雄页 3.注册页 4.英雄列表页 5.后面不截图了&#xff0c;没啥了 模块 1.vant4&#xff1a;按需引入组件样式文档 2.安装该vite-plugin-vue-setup-extend插件可以直接在…

基于Java+SpringBoot+Vue的图书借还小程序的设计与实现(亮点:多角色、点赞评论、借书还书、在线支付)

图书借还管理小程序 一、前言二、我的优势2.1 自己的网站2.2 自己的小程序&#xff08;小蔡coding&#xff09;2.3 有保障的售后2.4 福利 三、开发环境与技术3.1 MySQL数据库3.2 Vue前端技术3.3 Spring Boot框架3.4 微信小程序 四、功能设计4.1 主要功能描述 五、系统实现5.1 小…