【计算机图形学】Command-driven Articulated Object Understanding and Manipulation

对Command-driven Articulated Object Understanding and Manipulation的简单理解
在这里插入图片描述

文章目录

  • 1. 以往工作问题和本文提出的工作内容
  • 2. 任务定义
  • 3. 方法
    • 2.1 Seg-Net
    • 3.2 Art-Net
    • 3.3 推理

1. 以往工作问题和本文提出的工作内容

该工作提出了一个新的方法,面向人类指令的铰接物体操纵。在已有的、推理铰接结构的基础上,进一步支持操纵铰接形状,使其能够对齐到简单的指令模板。

Cart的核心是利用物体结构的预测,将用户的指令与视觉观察相连接,以进行高效的操作。 其实现的方法是编码用户指令用于运动预测,并使用TTA来调整进使用指令作为监督的运动。

对于广泛的物体类别,Cart可以精准操纵物体的shapes,并对固有的铰接结构有良好的理解。同时还可以很好地泛化到未见过的物体类别和真实世界物体上。

2. 任务定义

制作了一个操纵铰接物体的系统,输入为:

  1. 未知铰接物体的3D点云

  2. 操纵指令,形式化为“移动<部件>至<目标状态>”,<>由用户给定,用户可以选择点云中的一个或多个点来指示要操纵的<部件>,以及该部件在操纵后将要到达的<目标状态>

用户指令以用户自然语言形式给定,如下图的橱柜从“完全关闭”到“完全打开”,使用状态节点 T k T^k Tk表示目标状态, k k k是一个从0到K-1的整数,用于表示部件铰接关节的不同打开范围。

在这里插入图片描述

T 0 T^0 T0完全关闭, T k − 1 T^{k-1} Tk1完全打开,其他是均匀采样的中间态。语言指令可以通过自然语言处理翻译为这些状态,但并不是本文研究重点。

对于给定的由任意数量可移动部件 L = { l j } j = 1 M L=\{l_j\}^M_{j=1} L={lj}j=1M的未知铰接物体点云观察 P = { p i ∈ R 3 } i = 1 N P=\{p_i∈\R^3\}^N_{i=1} P={piR3}i=1N,首先预测所有物体部件的铰接参数 [ { τ j , ψ j } ] j = 1 M [\{\tau_j,ψ_j\}]^M_{j=1} [{τj,ψj}]j=1M。给定提供3D点(假设该点属于第 j t h j^{th} jth部件)和对应状态节点的用户命令 ( T j K ) (T^K_j) (TjK),推理第 j t h j^{th} jth的部件从当前铰接状态到目标铰接状态的运动参数 φ j φ_j φj τ j τ_j τj表示二进制关节类型(平移或旋转), ψ j ψ_j ψj是关节参数。

prismatic joint下 ψ ψ ψ包括移动方向$up∈\R3 和沿着 和沿着 和沿着u^p 的带方向的运动参数 的带方向的运动参数 的带方向的运动参数φ$。

revolute joint下 ψ ψ ψ包括旋转轴 u r ∈ R 3 u^r∈\R^3 urR3,以及pivot point是在axis上的点 v r ∈ R 3 v^r∈\R^3 vrR3,运动参数 φ φ φ是一个带正负值的旋转角度,沿着轴 u r u^r ur顺时针或逆时针旋转。

3. 方法

利用Cart实现对铰接物体的理解,以及通过语言指令的控制。由两个神经网络:Seg-Net和Art-Net组成。前者预训练以实现部件分割和铰接状态建模;后者使用前者的预测信息预测铰接模型。

给定用户指令情况下,Art-Net利用分割信息定位需要操纵的物体部件,将指令信息合并到视觉embedding中。混合部件的特征包含几何特征和指令含义,用其推理铰接模式和指令相关的运动参数。利用TTSA(类似于A-SDF中的TTA,多的一个S表示状态State)算法来不断改变铰接状态,在指令的监督下,应用Seg-Net的状态模型来优化运动参数。

2.1 Seg-Net

网络将物体分割成多个刚性部件,并预测每个部件的铰接状态。

在这里插入图片描述

如图3a所示,第一个分支预测逐点类 c ^ i ∈ { 0 , 1 } \hat{c}_i∈\{0,1\} c^i{0,1}以分辨其属于移动/静止部件。第二个分支预测可移动部件的逐点值 s ^ i ∈ R \hat{s}_i∈\R s^iR,被定义为相对预定义静止状态的归一化姿势(角度或平移值,如完全关闭为0,完全打开为1)。第三个分支产生逐点偏移向量 o ^ i ∈ R 3 \hat{o}_i∈\R^3 o^iR3,应用这个偏移向量将点向部件质心移动,实现聚类,更好地通过聚类区分不同的点。

SegNet监督学习:在这里插入图片描述

L c L_c Lc是标准的交叉熵损失, L s L_s Ls是L1距离损失, L o L_o Lo包括点位移的 L 1 L_1 L1距离和方向:

在这里插入图片描述

训练Art-Net时将不更新Seg-Net的参数。当移动部件的某个点被二进制分类选择后,将移动offset以构建更加紧凑的3D分布 { ( p i + o ^ i ) } \{(p_i+\hat{o}_i)\} {(pi+o^i)}。每个部件的铰接状态是由每个点的预测投票决定的。

3.2 Art-Net

如图3b所示,输入是点云 P P P和用户指令,目标是根据指令中指定的目标铰接状态来操纵部件(输出是运动参数)。

部件感知的编码: 该模块找到操纵的部件,如图4a所示,用户提供物体部件内的点坐标,使用Seg-Net的分割算法来定位匹配于该点的部件,表示为 l ^ j \hat{l}_j l^j。从指令中通过 K K K维的one-hot编码来表示目标状态 T j k T^k_j Tjk。为使其可学习,这个code将会由MLP层传播到部件级,来构建指令特征 h j ∈ R N j × d h_j∈\R^{N_j×d} hjRNj×d N j N_j Nj是部件 l ^ j \hat{l}_j l^j的点数量。同时,应用PointNet++提取逐点几何特征,部件 l ^ j \hat{l}_j l^j的特征表示为 f j ∈ R N j × d f_j∈\R^{N_j×d} fjRNj×d h j , f j h_j,f_j hj,fj被连接成 f ‾ j ∈ R N j × 2 d \overline{f}_j∈\R^{N_j×2d} fjRNj×2d

在这里插入图片描述


铰接模型估计: 使用 f ‾ j \overline{f}_j fj来估计交接模型,即关节类型 τ \tau τ,关节参数 ψ ψ ψ,指令相关的运动参数 φ φ φ。Points of f ‾ j \overline{f}_j fj are from the same object part, which share the consistent articulation attributes and are naturally suitable for predicting global articulation joint. Compared with alternative strategies, this module yields superior performance.

每个点都预测上述参数,通过投票方式决定最终结果。 τ j ∈ { 0 , 1 } N j \tau_j∈\{0,1\}^{N_j} τj{0,1}Nj表示铰接关节类型,平移和旋转轴 u j p , u j r ∈ R N j × 3 u^p_j,u^r_j∈\R^{N_j}×3 ujp,ujrRNj×3,运动参数表示为 φ j ∈ R N j φ_j∈\R^{N_j} φjRNj。为估计旋转关节 u r u^r ur的位置,预测每个点到其相关轴上的投影,因此 u j r u^r_j ujr表示为 [ z j r ∈ R N j × 3 , d j r ∈ R N j ] [z^r_j∈\R^{N_j×3},d^r_j∈\R^{N_j}] [zjrRNj×3,djrRNj]表示投影方向和投影距离。使用不同解码头来解码上述参数:

在这里插入图片描述


训练目标: 铰接关节类型,应用二进制交叉熵损失 L t y p e L_{type} Ltype,距离损失 L m o t L_{mot} Lmot最小化运动参数差异。平移关节使用余弦距离损失 L p a r a p L^p_{para} Lparap,旋转关节损失为:

在这里插入图片描述

第一项表示axis的方向,第二项表示投影方向和投影距离,最后一项是pivot point的距离损失。

在部件 l ^ j \hat{l}_j l^j上通过加上 ( d ^ j r ⋅ z ^ j r ) (\hat{d}^r_j·\hat{z}^r_j) (d^jrz^jr)来沿着旋转轴移动原始点坐标。距离上应用L1 loss。 L r o t r = ∣ ∣ I 3 , 3 − R ^ j ⋅ R j ∣ ∣ L^r_{rot}=||I_{3,3}-\hat{R}_j·R_j|| Lrotr=∣∣I3,3R^jRj∣∣是一个确保为一个正交旋转矩阵,两个 R R R分别是预测旋转矩阵和真是旋转矩阵。这是基于关节方向和旋转角从Rodirgues的旋转公式计算的。整体损失为:

在这里插入图片描述

3.3 推理

基础推理: Seg-Net首先将物体点聚类为独立的运动部件,Art-Net收到命令并通过part-aware encoding模块定位要操纵的部件。使用部件级的点特征来投票产生关节类型、关节参数、命令相关的运动参数。运动参数是包括移动幅度和方向的有方向值,参考 ψ , φ ψ,φ ψ,φ来平移或旋转选择的部件。


TTSA: 预测的运动参数 φ φ φ可能不精准,操纵后的物体状态可能并不满足用户指令。设计TTSA在测试时调整运动参数。

如图4b所示,将点云从 P P P操纵成 P ′ P' P,将 P ′ P' P重新送入到Seg-Net中再一次估计真实部件状态 s ^ ′ \hat{s}' s^。对于第 j j j个部件,比较 s ^ j ′ \hat{s}'_j s^j和目标状态节点 T j k {T^k_j} Tjk,它可以转换成归一化的状态通过 s j ′ = k / ( K − 1 ) s'_j=k/(K-1) sj=k/(K1)。运用差异来更新运动参数解码器来校正运动预测:

在这里插入图片描述

M ′ M' M是操纵物体部件数量。迭代优化多步以达到目标状态。

在这里插入图片描述

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

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

相关文章

Flutter 旋转动画 线性变化的旋转动画

直接上代码 图片自己添加一张就好了 import dart:math;import package:flutter/material.dart;import package:flutter/animation.dart;void main() > runApp(MyApp()); //旋转动画 class MyApp extends StatelessWidget {overrideWidget build(BuildContext context) {re…

docker学习笔记 三-----docker安装部署

我使用的部署环境是centos 7.9 1、安装依赖工具 yum install -y yum-utils device-mapper-persistent-data lvm2 安装完成如下图 2、添加docker的软件信息源 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo url地址为如…

如何启动极狐GitLab 静态网站Pages功能

本文作者&#xff1a;徐晓伟 GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 本文主要讲述了如何使用极狐GitLa…

MySQL进阶45讲【35】什么时候会使用内部临时表?

1 前言 在MySQL进阶45讲【15】“order by“是怎么工作的&#xff1f;和MySQL进阶45讲【32】到底可不可以使用join&#xff1f;文章中&#xff0c;分别介绍了sort buffer、内存临时表和join buffer。这三个数据结构都是用来存放语句执行过程中的中间数据&#xff0c;以辅助SQL语…

BSV区块链的应用开发前景——通过标准化来促进创新

​​发表时间&#xff1a;2024年3月5日 近年来区块链领域的发展日新月异&#xff0c;各种全新的技术和方法论正在迅猛涌现。在这个瞬息万变的环境之中&#xff0c;标准化不仅仅会为开发者们带来便利&#xff0c;同时也促进了应用之间的互操作性&#xff0c;并且推动着生态系统的…

天地图-坐标拾取

在网页使用高德&#xff0c;百度地图这些时&#xff0c;会因为没有购买他们的使用版权&#xff0c;从而出现以下水印&#xff0c;因此需要换一个地图-天地图 天地图官方文档&#xff1a;http://lbs.tianditu.gov.cn/ 然而天地图并不像其他地图一样这么方便&#xff0c;比如没有…

MyBatis题库详解

1、介绍下MyBatis中的工作原理 介绍MyBatis的基本情况&#xff1a;ORM&#xff0c;对象关系映射&#xff08;英语&#xff1a;Object Relational Mapping&#xff0c;简称ORM&#xff0c;或O/RM&#xff0c;或O/R mapping&#xff09;&#xff0c;是一种程序技术 MyBatis框架的…

2015年认证杯SPSSPRO杯数学建模D题(第一阶段)城市公共自行车全过程文档及程序

2015年认证杯SPSSPRO杯数学建模 D题 城市公共自行车 原题再现&#xff1a; 城市交通问题直接影响市民的生活和工作。在地形平坦的城市&#xff0c;公共自行车出行系统是一种很好的辅助手段。一般来说&#xff0c;公共自行车出行系统由数据中心、驻车站点、驻车桩、自行车&…

openlayers 入门教程(五):sources 篇

还是大剑师兰特&#xff1a;曾是美国某知名大学计算机专业研究生&#xff0c;现为航空航海领域高级前端工程师&#xff1b;CSDN知名博主&#xff0c;GIS领域优质创作者&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;canvas&#xff0c;webgl&#xff0c;ech…

Memcached分布式内存对象数据库

一 Memcached 概念 Memcached 是一个高性能的分布式内存对象缓存系统&#xff0c;用于动态 Web 应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数&#xff0c;从而提高动态、数据库驱动网站的速度。 二 在架构中的位置 Memcached 处于前端或中间件后…

Vue 发送Ajax请求多种方式

1. 发送ajax请求的方式 方案一&#xff1a;jq 的ajax&#xff08;在 vue 中不推荐同时使用&#xff09;方案二&#xff1a;js 原始官方 fetch方法方案三&#xff1a;axios 第三方 2. 方案一 后端视图函数 from rest_framework.viewsets import ViewSet from rest_framework…

UE4 根据任意多个点,生成最近的线条

1.计算所有线条的组合 2.Clear0宏&#xff1a;清除掉数组Distance0的值。注意这里是设置成最大值&#xff0c;而不是使用Clear&#xff01; 3.清除掉数组中的最小值&#xff0c;避免重复生成相同长度的线条。注意这里是设置成最大值&#xff0c;而不是使用Clear&#xff01; …

python爬虫基础-----运算符(第三天)

&#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; &#x1f388;&#x1f388;所属专栏&#xff1a;python爬虫学习&#x1f388;&#x1f388; ✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天…

GitHub加速访问最简单的方法

Github是全球最大的代码开源平台&#xff0c;对于编程的小伙伴来说&#xff0c;这是一个巨大的宝库&#xff0c;也是编程学习的圣地。很对小伙伴在使用GitHub时会经常出现无法访问Github的情况。 一、解决方法——>修改hosts文件 通过 IP查询工具来获取当前Github网站的真实…

全民采矿石赚钱小程序源码,附带详细搭建教程

安装教程 1、环境用宝塔Nginxphp7.0或者以下版本 2、可以更换各种模板&#xff0c;懂代码和标签的可以改模板&#xff0c;不懂的可以直接上站 3、上站前记得添加关键词和内容库 4、伪静态在绑定完百度站长之后再添加 目录说明&#xff1a; data/keyword 放关键词 标签&#xff…

【扩散模型】论文精读:Denoising Diffusion Probabilistic Models(DDPM)

文章目录 前言Abstract1 Introduction2 Background3 Diffusion models and denoising autoencoders3.1 Forward process and LT3.2 Reverse process and L1:T −13.3 Data scaling, reverse process decoder, and L03.4 Simplified training objective 4 Experiments4.1 Sample…

C语言: 指针讲解

为什么需要指针? &#xff08;1&#xff09;指针的使用使得不同区域的代码可以轻易的共享内存数据。当然你也可以通过数据的复制达到相同的效果&#xff0c;但是这样往往效率不太好&#xff0c;因为诸如结构体等大型数据&#xff0c;占用的字节数多&#xff0c;复制很消耗性能…

Linux-进程控制(进程创建、进程终止、进程等待)

一、进程创建 1.1 fork函数介绍 在命令行下我们可以通过 ./ exe文件 来创建一个进程&#xff0c;通过fork函数&#xff0c;我们可以通过代码的形式从一个进程中创建一个进程&#xff0c;新进程为子进程&#xff0c;原进程为父进程&#xff0c;子进程在创建时&#xff0c;会与…

软件项目-详细设计说明书范文参考(46页Word原件)

一、 关于本文档 &#xff08;一&#xff09; 编写目的 &#xff08;二&#xff09; 预期读者 二、 项目概要 &#xff08;一&#xff09; 建设背景 &#xff08;二&#xff09; 建设目标 &#xff08;三&#xff09; 建设内容 三、 总体设计 &#xff08;一&#xff0…

git基础-撤销操作

撤销操作 在任何阶段&#xff0c;我们都可能希望撤消某些操作。在这里&#xff0c;我们将回顾一些基本工具&#xff0c;用于撤消之前所做的更改。操作要谨慎&#xff0c;因为这些撤销可能无法修复。这是 Git 中为数不多的几个领域之一由于操作不当&#xff0c;导致丢失一些工作…