【计算机图形学】3D Implicit Transporter for Temporally Consistent Keypoint Discovery

对3D Implicit Transporter for Temporally Consistent Keypoint Discovery的简单理解

在这里插入图片描述

文章目录

  • 1. 现有方法限制和文章改进
  • 2. 方法
    • 2.1 寻找时间上一致的3D特征点
      • 2.1.1 3D特征Transporter
      • 2.1.2 几何隐式解码器
      • 2.1.3 损失函数
    • 2.2 使用一致特征点的操纵

1. 现有方法限制和文章改进

用于探测特征点的、已经存在的2D和3D方法主要依赖于几何一致性来获得空间上的对齐,而忽视了时间上的一致性。

为了解决这个问题,Transporter在2D数据上,聚合时间和空间信息,进而从原始帧重建目标帧。然而2D Transporter不能直接应用于3D点云上,因为3D点云和2D图像存在结构上的差异。

因此,文章提出了第一个3D版本的Transporter,充分利用混合3D表示、跨注意力机制、隐式重建。在3D铰接物体和非刚性动物(人类和啮齿动物)上应用这种新的学习系统,从而展示了学习到的特征点在时空上的一致性。另外提出了一种closed-loop的控制策略,利用学习到的特征点来进行3D物体操纵,证明其表现。

2. 方法

文章的感知方法提出了一种新的方式,以自监督的方式,在一系列点云中发现移动物体和物体部件在时间和空间上一致的3D特征点。

一旦训练好,学习到的特征点可以被用于设计从初始状态到目标状态的铰接物体的操纵策略,从而避免了UMPNet和Where2Act策略搜集的试错。

2.1 寻找时间上一致的3D特征点

根据[23],数据集的组成是一对对的、从一系列策略中提取出来的帧,每一帧是一个3D点云。一对点云之间是通过物体的姿态/几何(有点类似于Template的概念吗?同一类别下的物体可以泛化?)来辨别差异的。文章的目标是去寻找从源帧到目标帧的、能够描述物体或物体运动部件的对应特征点。文章对这个问题的处理方式是从源帧构建目标帧的基本形状。如下图所示。

在这里插入图片描述

2.1.1 3D特征Transporter

混合的3D表示: 2D图像这种规则数据的对应不适用于不规则的3D点云数据。将点云统一成3D体素网格是最直接的方式,但转换成体素也会引起一些几何结构的信息丢失,比如表面可能不够精确等。尽管可以使用高分辨率的体素网格,但也会带来计算和空间上的成本。

相反,基于点的模型凭借其稀疏表示可以大大减少这些成本,因此,文章利用了基于点的backbone来从稀疏的点钟提取局部特征,利用给予体素的模型来实现局部特征迁移。

给定一帧 o ∈ R N 1 × 3 o∈\R^{N_1×3} oRN1×3 N 1 N_1 N1是输入点的数量,利用PointNet P P P来获得逐点特征 P ( o ) ∈ R N 1 × C 1 P(o)∈\R^{N_1×C_1} P(o)RN1×C1 C 1 C_1 C1是特征维度数。这些特征局部池化并投影到结构化网格 v ∈ R C 2 × C h × C w × C d v∈\R^{C_2×C_h×C_w×C_d} vRC2×Ch×Cw×Cd中。使用3D-UNet U U U来处理特征体素得到输出 U ( v ) ∈ R C 3 × C h × C w × C d U(v)∈\R^{C_3×C_h×C_w×C_d} U(v)RC3×Ch×Cw×Cd。这些步骤通过图2的特征编码器 Φ Φ Φ实现。


注意力特征点探测: 当被要求在一对帧之间寻找移动物体或移动部件时,采用迭代检查和筛选的方式来在帧之间寻找多个试探性区域。受启发于之前的工作,提出使用跨注意力机制模块来聚集两帧的几何信息来定位特征点。

利用基于点的模型来提取输入点云多层特征,进而实现两帧点云之间的关联。给定一对帧 o s , o t o_s,o_t os,ot,利用共享的PointNet++ P ^ \hat{P} P^来获得两个下采样的点特征 f s = P ^ ( o s ) f_s=\hat{P}(o_s) fs=P^(os) f t = P ^ ( o t ) f_t=\hat{P}(o_t) ft=P^(ot),且 f s , f t ∈ R N 2 × C 4 f_s,f_t∈\R^{N_2×C_4} fs,ftRN2×C4。接着使用跨注意力机制来混合这对输入之间的点特征:

在这里插入图片描述

模块的输出( f s ′ , f t ′ f'_s,f'_t fs,ft)是输入特征和注意力特征的concatenation。接着通过PointNet++解码器上采样 f s ′ , f t ′ f'_s,f'_t fs,ft以获得dense features f s ′ , f t ′ ∈ R N 1 × C 5 f'_s,f'_t∈\R^{N_1×C_5} fs,ftRN1×C5

通过以上操作,通过投影和3D UNet U k U_k Uk 将dense point features转换为keypoint saliency volumes(不知道怎么翻译)。整个检测模块的输出表示为 Ψ Ψ Ψ,分别为 Ψ ( o s , o t ) s , Ψ ( o s , o t ) t ∈ R m × C h × C w × C d Ψ(o_s,o_t)_s,Ψ(o_s,o_t)_t∈\R^{m×C_h×C_w×C_d} Ψ(os,ot)s,Ψ(os,ot)tRm×Ch×Cw×Cd,从中可以提取出 m m m个3D关键点 k s , k t ∈ R m × 3 k_s,k_t∈\R^{m×3} ks,ktRm×3,如图2的蓝色部分所示。 k s 和 k t k_s和k_t kskt的第 i i i个特征点彼此对应。


Feature Transportation: 类似于2D Transporter,下一步就是feature transportation以从 o s o_s os中重建 o t o_t ot。Transport Φ ( o t ) Φ(o_t) Φ(ot) k t k_t kt周围的特征至 Φ ( o s ) Φ(o_s) Φ(os)中,压缩 Φ ( o s ) Φ(o_s) Φ(os) k t , k s k_t,k_s kt,ks的特征。如图2绿色部分所示。首先擦除 Φ ( o s ) Φ(o_s) Φ(os)中两个集的特征得到 Φ − ( o s ) Φ^-(o_s) Φ(os),接着从 o t o_t ot中提取特征点 k t k_t kt周围的特征,最后连接到 Φ ( o s ) Φ(o_s) Φ(os)中生成 Φ + ( o s ) Φ^+(o_s) Φ+(os),公式化为:

在这里插入图片描述

其中 H Ψ H_Ψ HΨ表示由固定方差 σ \sigma σ各向同性高斯线组成的3D热力图,以 Ψ Ψ Ψ表示的 m m m个关键点为中心。

2.1.2 几何隐式解码器

由于源和目标帧之间除运动部件外的几何形状保持相同,使用探测到的移动部件上的特征点可以重新合成目标视觉输入。受到3D重建中深度隐式函数的启发,这里使用几何隐式解码器。

给定查询集 Q Q Q中的点 q ∈ R 3 q∈\R^3 qR3,文章的方法使用MLP将点编码成 C e C_e Ce维的向量 q e q_e qe。接着,通过三线性插值从 Φ + ( o s ) Φ^+(o_s) Φ+(os)查询 Φ q + ( o s ) Φ^+_q(o_s) Φq+(os)。隐式解码器 Ω Ω 将特征 q e q_e qe Φ q + ( o s ) Φ^+_q(o_s) Φq+(os)连接后的结果map到目标表面占用率: Ω ( q e , Φ q + ( o s ) ) → P r o b ( q ∣ o t ) Ω(q_e,Φ^+_q(o_s))→Prob(q|o_t) (qe,Φq+(os))Prob(qot)

2.1.3 损失函数

所有模块都可以通过表面重建损失来优化。在预测的目标表面占用率 P r o b ( q ∣ o t ) Prob(q|o_t) Prob(qot)和目标帧的GT标签 P r o b g t ( q ∣ o t ) Prob^{gt}(q|o_t) Probgt(qot)中使用二分类交叉熵损失。如果 q q q来自目标点云,则 P r o b ( q ∣ o t ) Prob(q|o_t) Prob(qot)为1,反之为0,损失函数为:

在这里插入图片描述

除此之外,还使用了额外的损失项 L o c c s L_{occ_s} Loccs,通过利用其自身的特征网格 Φ ( o s ) Φ(o_s) Φ(os)来辅助源帧的重建。

2.2 使用一致特征点的操纵

使用特征点作为中层表示,对于接触丰富的机器人3D空间操纵任务来说是一种合适的方式。之前的工作仅关注与2D特征点表示,或在面对巨大的shape变化或物体拓扑改变的情况下,难以探测到时空一致的3D特征点。由于3D Transporter特征点的长期一致性,文章的方法很好地处理了3D操纵任务。此处以铰接物体操纵作为基线来证明。

在UMPNet工作中,给定目标状态 o g o_g og,目标是生成机器人的end-effector从当前状态 o c o_c oc转变到目标状态 o g o_g og的一组动作。在本片工作中,每个状态使用点云而不是2D图像表示,使用吸盘手以实现对物体表面任意一个点的抓取。

特征点一致性损失: 由于预测的特征点分布在预测的移动部件上,可以使用它来生成源和目标之间的刚性部件运动姿态假设:

在这里插入图片描述

可以使用奇异值分解在封闭形式下计算。强制所有特征点满足刚性转换,使关键点几何对齐:

在这里插入图片描述

关节一致性损失: 铰接运动过程中,轴的方向要么保持不变要么平行。给定预测的姿态,可以通过Rodrigues旋转公式计算轴的方向 μ μ μ和角度 θ \theta θ,惩罚不同时间步下的轴的方向:

在这里插入图片描述

其中, μ a b μ_{ab} μab表示在时间步 a a a和时间步 b b b中预测的轴方向。

完整的损失就是occupancy loss加上这个corr和axis。


在训练后设计了一个基于3D Implicit Transporter keypoint的对象无关的操纵策略,避免了低效探索。对于每个将物体从current state移动到goal state的动作 A c , g A_{c,g} Ac,g,6-Dof姿态表示吸盘手的位置 A c , g p o s ∈ R 3 A^{pos}_{c,g}∈\R^3 Ac,gposR3和移动方向 A c , g d i r ∈ R 3 A^{dir}_{c,g}∈\R^3 Ac,gdirR3,策略由两个部分组成:

位置和方向推理: 第一步是获得预测特征点 k c , k g k_c,k_g kc,kg,轴 μ c , g μ_{c,g} μc,g,角度 θ c , g \theta_{c,g} θc,g。接着从对应特征点计算系数铰接流 F c , g i = k g i − k c i F^i_{c,g}=k^i_g-k^i_c Fc,gi=kgikci。为有效驱动铰接部件,根据杠杆原理选择具有最高magnitude flow的关键点位置 k c s k^s_c kcs作为吸力点,表示为 A c , g p o s = k c s A^{pos}_{c,g}=k^s_c Ac,gpos=kcs

对于旋转轴, k c s k_c^s kcs被限制在垂直于旋转轴的半径为 r s r^s rs的2D圆上,其中 r s r^s rs是从 k c s k^s_c kcs到关节的最短向量。因此, k c s k_c^s kcs的理想行动方向与 A c , g d i r s A^{dir_s}_{c,g} Ac,gdirs相切。若当前状态和目标状态的运动范围较小,则 F c , g s F^s_{c,g} Fc,gs将近似平行于 A c , g d i r s A^{dir_s}_{c,g} Ac,gdirs,则可被设置为运动方向。然而随着旋转范围的增加,它们之间的差异也会越来越显著,减轻这个问题的方法就是根据预测的轴多插值几个中间状态。

对于平移轴, A c , g d i r s A^{dir_s}_{c,g} Ac,gdirs平行于每个移动点的GT铰接流的。直接设置 F c , g s F^s_{c,g} Fc,gs作为铰接方向。不需要区分关节类型,两种方法在极小的差异内都是一样的。

闭环操纵: 与使用单个步骤动作实现目标不同,该工作生成一系列动作来逐渐改变铰接状态。应用一个closed-loop的控制系统,依赖于反馈来逐渐调整当前动作。特别地,基于物体当前状态和目标状态来预测下一个动作。不同于UMPNet使用一个常数移动距离,这里利用 F c , g s F^s_{c,g} Fc,gs的大小来动态调整移动距离。受到PID控制器的启发,设置 ∣ ∣ A c , g d i r s ∣ ∣ = λ ⋅ ∣ ∣ F c , g s ∣ ∣ ||A^{dir_s}_{c,g}||=\lambda·||F^s_{c,g}|| ∣∣Ac,gdirs∣∣=λ∣∣Fc,gs∣∣作为当前状态, λ \lambda λ是一个比例系数。

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

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

相关文章

在组件上使用

对于只有一个根元素的组件&#xff0c;当你使用了 class attribute 时&#xff0c;这些 class 会被添加到根元素上并与该元素上已有的 class 合并。 举例来说&#xff0c;如果你声明了一个组件名叫 MyComponent&#xff0c;模板如下&#xff1a; <!-- 子组件模板 --> &…

linux 批量查找并替换文件里的指定字符串,linux 批量查找并替换当前目录下所有子目录内文件里的指定字符串

使用sed命令批量修改文件里的指定字符串。一个简单示例&#xff0c;假设要将文件夹/path/to/directory下所有文件中的字符串old_string替换为new_string 使用cd命令进入目标文件夹 cd /path/to/directory使用sed命令批量替换指定文件中的字符串 sed -i s/old_string/new_stri…

阿里云CentOS7安装Hadoop3伪分布式

ECS准备 开通阿里云ECS 略 控制台设置密码 连接ECS 远程连接工具连接阿里云ECS实例&#xff0c;这里远程连接工具使用xshell 根据提示接受密钥 根据提示写用户名和密码 用户名&#xff1a;root 密码&#xff1a;在控制台设置的密码 修改主机名 将主机名从localhost改为需要…

HarmonyOS 应用开发之Want的定义与用途

Want 是一种对象&#xff0c;用于在应用组件之间传递信息。 其中&#xff0c;一种常见的使用场景是作为 startAbility() 方法的参数。例如&#xff0c;当UIAbilityA需要启动UIAbilityB并向UIAbilityB传递一些数据时&#xff0c;可以使用Want作为一个载体&#xff0c;将数据传递…

scala05-函数式编程01

函数和方法 package com.zishi.scala.a02.okk05object Test01_FunctionAndMethod {/*** public void main(final String[] args) {* sayHi$1("alice"); -- 这里调用的就是&#xff1a;sayHi$1* this.sayHi("bob");* String result this.sayHel…

如何在Flutter中进行网络请求?

Hello&#xff01;大家好&#xff0c;我是咕噜铁蛋&#xff0c;你们的好朋友&#xff01;今天&#xff0c;我想和大家分享一下在Flutter中如何进行网络请求。Flutter作为一个跨平台的开发框架&#xff0c;网络请求是其实现数据交互的重要一环。下面&#xff0c;我将详细介绍几种…

构建一个基础的大型语言模型(LLM)应用程序

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

docker部署-RabbitMq

1. 参考 RabbitMq官网 docker官网 2. 拉取镜像 这里改为自己需要的版本即可&#xff0c;下面容器也需要同理修改 docker pull rabbitmq:3.12-management3. 运行容器 docker run \ --namemy-rabbitmq-01 \ -p 5672:5672 \ -p 15672:15672 \ -d \ --restart always \ -…

java算法day37 | 贪心算法 part06 ● 738.单调递增的数字 ● 968.监控二叉树

738.单调递增的数字 思路&#xff1a; 从后向前遍历&#xff0c;如果前一个数比后一个数大&#xff0c;则前一个数-1&#xff0c;后面的数都变成9. 思路不难&#xff0c;但实现的代码还是有一点繁琐的。 以下是用List实现的代码。 class Solution {public int monotoneIncrea…

【群晖】部署UptimeKuma监控服务

【群晖】部署UptimeKuma监控服务 点击标题查看原文 本文讲解在群晖系统中使用docker方式部署UptimeKuma服务并通过外网地址正确访问 配置及版本 DSM&#xff1a;7.2&#xff08;7.x以上均可&#xff09; UptimeKuma&#xff1a;louislam/uptime-kuma:latest 安装 docker中下…

Switch 和 PS1 模拟器:3000+ 游戏随心玩 | 开源日报 No.174

Ryujinx/Ryujinx Stars: 26.1k License: MIT Ryujinx 是用 C# 编写的实验性任天堂 Switch 模拟器。 该项目旨在提供出色的准确性和性能、用户友好的界面以及稳定的构建。它已经通过了大约 4050 个测试&#xff0c;其中超过 4000 个可以启动并进入游戏&#xff0c;其中大约 340…

【DevOps基础篇】Proxy的工作原理

目录 代理服务器的类型正向代理正向代理的用例反向代理反向代理的例子推荐超级课程: Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战代理服务器充当客户端请求资源和提供资源的服务器之间的中介。它可以用于各种目的,如缓存资源以加快访问速度,匿名化…

SpringBoot+ElasticSearch实现文档内容抽取、高亮分词、全文检索

需求 产品希望我们这边能够实现用户上传PDF、WORD、TXT之内得文本内容&#xff0c;然后用户可以根据附件名称或文件内容模糊查询文件信息&#xff0c;并可以在线查看文件内容。 一、环境 项目开发环境&#xff1a; 后台管理系统springbootmybatis_plusmysqles 搜索引擎&#…

Java中的NIO(非阻塞IO)

Java中的NIO&#xff08;Non-blocking I/O&#xff0c;非阻塞IO&#xff09;是Java IO API的一个改进版&#xff0c;为所有的原始数据访问提供了一个新的通道&#xff08;Channel&#xff09;接口。NIO与原来的IO有同样的作用和目的&#xff0c;但是使用的方式完全不同&#xf…

springdata框架对es集成

什么是spring data框架 Spring Data是一个用于简化数据库、非关系型数据库、索引库访问&#xff0c;并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快捷&#xff0c;并支持 map-reduce框架和云计算数据服务。Spring Data可以极大的简化JPA(Elasticsearch…)的…

《享元模式(极简c++)》

本文章属于专栏- 概述 - 《设计模式&#xff08;极简c版&#xff09;》-CSDN博客 模式说明 方案&#xff1a;享元模式是一种结构型设计模式&#xff0c;旨在通过共享尽可能多的对象来最小化内存使用和提高性能。 优点 减少内存占用&#xff1a;通过共享相似对象的状态&#xf…

ssh 公私钥(github)

一、生成ssh公私钥 生成自定义名称的SSH公钥和私钥对&#xff0c;需要使用ssh-keygen命令&#xff0c;这是大多数Linux和Unix系统自带的标准工具。下面&#xff0c;简单展示如何使用ssh-keygen命令来生成具有自定义名称的SSH密钥对。 步骤 1: 打开终端 首先&#xff0c;打开我…

对话 Mines of Dalarnia: Web3 游戏创新,社区驱动与公链共建

作者&#xff1a;stellafootprint.network 嘉宾&#xff1a;Manfred Pack&#xff0c;Mines of Dalarnia 游戏开发总监 采访者&#xff1a;Alex Cooper&#xff0c;Footprint Analytics 北美社区与 BD 负责人 在区块链游戏领域&#xff0c;去中心化和玩家经济正在颠覆传统游戏…

泛型,数据结构,集合

文章目录 泛型介绍解决问题好处使用通配符泛型的下限泛型的上限 数据结构定义常见的数据结构栈(先进后出)队列(先进先出)数组结构链表结构哈希表结构 集合List集合特点特有方法子类及其底层数据结构LinkedList集合 Set集合特点没有特有方法子类及其底层数据结构LinkedHashSet集…

vscode使用sftp上传

1.用vscode打开项目 2.安装一下这个sftp 3.使用快捷键 ctrlshiftP 打开指令窗口&#xff0c;输入 sftp:config&#xff0c;选中回车&#xff0c;在当前目录中会自动生成 .vscode 文件夹及 sftp.json 4.修改sftp.json文件配置&#xff0c;改成以下&#xff08;默认的参数可能上传…