当前位置: 首页 > news >正文

UMPNet: Universal Manipulation Policy Network for Articulated Objects

1. 摘要

UMPNet是一个基于图像的策略网络,能够推理用于操纵铰接物体的闭环动作序列。该策略支持6DoF动作表示和可变长度轨迹。

为处理多种类的物体,该策略从不同的铰接结构中学习,并泛化到未见过的物体或类别上。该策略是以自监督探索的方式进行学习的,无需任何注释、脚本或预定义的目标。

为了支持多步交互,引入了一个新的Arrow-of-Time动作属性,用以指示某个动作是否会使得物体状态倒退(到过去的状态)或前进(到未来的状态)。通过在每一个交互步中使用这个Arrow-of-Time推理,学习到的策略能够选择朝向/远离给定的状态,实现高效的状态探索和基于目标的操纵。

这应该比VAT-MART还要早,因为是基于目标的,所以相对于Where2Act的改进就是可以生成动作轨迹,而不是单一的动作执行朝向。

2. 引言

UMPNet (Universal Manipulation Policy Network)通用操作策略网络,是一个简单的策略网络,通过视觉观测来探索铰接结构物体的可能的操作策略。由策略网络推断的行动轨迹有如下属性:

2.1. 通用动作表示

使用SE(3)变换来表示一个铰接的动作。

2.2. 闭环行为序列

预测单步的动作是比较简单的,本文关注的是一个序列的动作。但是,由于误差累积和部分观测的原因,这是很有挑战的。所以用闭环的方式来解决这一难题,即每次都使用初始状态和当前状态来预测一步的动作。

2.3. 时间箭头意识

大部分动作都是双向有效的。例如,对门来说,下一时刻既可能是开门(开合角度变大)或关门(开合角度变小),所以需要把历史信息记录下来(称之为时间箭头),它能够指引下一步动作是向前(开门)还是向后(关门)。

3. 方法

操纵策略π的目标是生成与随机铰接物体交互的动作序列,得到未见过的新状态。

以图2为例,为了高效探索物体(马桶为例)的新状态,算法如下:

  • 选择物体上正确的位置进行交互(即,与马桶盖交互而不是基);
  • 选择正确的动作方向(即,拉起来,而不是向下推);
  • 在接下来的动作中选择一致的动作,以探索新的状态(即,保持向上拉盖子,而不是上下移动盖子);

这三个需求对应算法中的3个关键部分:(1)运动位置选择;(2)运动距离;(3)Arrow-of-Time推理用于动作方向选择。

结合这三个部分,最后的系统能够通过自引导的探索过程来学习,而不需要显式的人类注释、脚本策略或预定义的目标情况。

3.1. 问题定义

输入是处于当前状态o_0的一张RGBD图像o_0 \in R^{W \times H \times 4},智能体通过策略 π \pi π生成每一步的动作a_t : \pi(o_t,o_0) \rightarrow a_t。该动作是在SE(3)空间中表示的,参数化为end-effector位置(吸式夹持器)和移动方向:a_t=(a^{pos}_t,a^{dir}_t)a^{pos}_t \in R^3是一个3D坐标,a^{dir}_t \in R^3, (||a^{dir}_t||=1)是一个单位向量,用于指示end-effector的移动方向。

在第一个交互步骤,策略选择一个3D位置a^{pos}_0以应用动作。为了执行动作,智能体移动它的end-effector到这个位置,方向垂直于物体表面。注意,gripper方向(由表面法线确定)可以不同于动作方向a^{dir}_t(这个动作方向由方向推理网络确定)。

在接下来的步骤中,智能体选择3D方向a^{dir}_t并沿着方向移动0.18(m),位置相对于物体表面固定。吸力是吸盘和选定物体位置之间的力约束。end-effector的方向在交互过程中总是与表面法线对齐。

3.2. 位置推理

开始的时候,策略需要选择一个3D位置a^{pos}_0应用动作。为了找到这个为止,算法需要去从观察图像o_0中选择一个像素,并应用动作。选择的像素将被使用深度值投影至3D空间中。

这个问题以给图像打标签的方式进行处理,位置网络(如图2a)的输入是RGB-D图像,预测逐像素的position affordance score P \in [0,1]^{W \times H}。Affordance分数P(w, h)表示在该位置上应用动作时,物体的移动概率。位置网络通过执行动作的输出进行监督。当且仅当物体对象在未来任何步骤中改变时,GT标签为1,使用二分类交叉熵损失训练。

但还需要注意,如果选择了那些接近于axis的位置,无法应用足够的力来移动物体部件。此外,这个标签还受到方向选择的质量影响,若预测了错误的方向,则物体的状态不会发生改变,则会标记为负例。

3.3. 方向推理

给定抓取点a^{pos}_0​的信息,基于这个条件,策略需要选择3D方向a^{dir}_t。为了选择动作方向,算法需要采样一组动作候选,评估每个动作候选的效率,“效率”指的是物体关节位置的移动距离r_{dist}(a_t^{dir})和Arrow-of-Time属性r_{AoT}(a^{dir}_t),如下定义:

其中,\vec{j_t}​指的是在每一步t时的物体关节状态,δ是确定状态是否发生高效改变的阈值。第一个式子表示该阶段状态和上一阶段状态的差异,第二个式子确定是否\vec{j_t}​是朝向未来状态的,而不是回到过去的状态。

为生成候选状态{\hat{a}^{dir}},一个简单的方法是在SO(3)空间中均匀采样。受限于采样数量,采样方向只能覆盖不包括最优方向的连续动作空间的一小部分。为解决这个问题引入启发式的方法,迭代交叉熵方法(CEM, Cross-Entropy Method),减轻采样空间以获得高效率方向采样。

这个算法首先在SO(3)空间中均匀采样N个样例。接着基于预测的动作分数评估采样动作:s(\hat{a})=\widetilde{r}_{dist}(\hat{a}^{dir})·\widetilde{r}_{AoT}(\hat{a}^{dir})。在下一个迭代过程中,算法重新采样与分数相关的候选:p(\hat{a}) \propto e^{T*s(\hat{a})}(∝表示A与B成正比例),=20是一个临时量(我理解因为指数函数是恒大于0的,通过AoT可以筛除掉那些=0或<0的不合理动作方向,从而对那些正确的方向进行重新采样)。添加了随机噪声(添加随机噪声的目的应该是获得与第一次交互存在差异的交互行为),它们被认为是第二次交互的候选。通过这种方法,第二次迭代采样的样本将更多集中在具有“潜力”的区域,使得同样的采样数量下,获得更好的表现。

为了推理动作候选的移动距离\widetilde{r}_{dist}(\hat{a}^{dir}),网络需要考虑物体当前状态和抓取位置,二者被编码在当前的观测o_t​中。当前状态的RGB-D图像作为输入,DistNet输出embedding向量\psi(o_t)。接着DistDecoder将\psi(o_t)和动作a作为输入,输出一个标量作为距离预测\widetilde{r}_{dist}(\hat{a}^{dir})。DistNet是一个卷积神经网络,将输出展开为一个embedding向量。Dist-Decoder是一个全连接神经网络,使用MSE损失L_{dist}进行训练。

\widetilde{r}_{dist}(\hat{a}^{dir})不同,Arrow-of-Time \widetilde{r}_{AoT}(\hat{a}^{dir})的推理基于当前视觉状态和初始视觉状态。在单步交互中,任何动作都会改变物体的状态,使得物体进入一个新的状态。但对于多步交互来说并不是这样的,策略可以移动物体向前向后,而不探索更多新的状态,为了解决这个问题引入了Arrow-of-Time(AoT),用于指示物体究竟是返回了初始状态还是朝向了未来的状态。通过AoT将当前和初始的观察作为输入,输出另外一个embedding向量\phi(o_t,o_0)。该embedding连接动作embedding来推理最终的AoT标签\widetilde{r}_{AoT}(\hat{a}^{dir})。AoT网络结构和Dist的类似,只是输入输出维度有差异。模型使用交叉熵损失训练。L=\lambda L_{dist}+L_{AOT}

3.4. 训练

所有数据来自从头开始的策略训练进行的交互尝试。使用FIFO replay buffer来存储训练数据。为了搜集正例和负例,在一个序列内的方向上应用矛盾的策略用于方向推理(没有特别理解)。在每个序列的前半部分,选择那些具有正AoT的预测进行执行,使物体远离初始状态;在后半部分,执行那些具有负AoT的预测,鼓励物体向回执行。每个epoch搜集16个策略。序列长度一开始是4,在1000 epochs后,每400个epochs增长2,直到到达20为止。

位置模块和方向模块在每个epoch训练8个迭代。对于每一轮位置训练,从replay buffer中采样一个batch(大小=16),其中具有1:1的正负比率。对于方向迭代,一个batch中正、负、不移动数据比率为1:1:1。

3.5. 使用逆AoT进行的以目标为条件的操纵

大部分操纵任务都是都是基于目标的,这就需要能够生成一些策略,使得这些策略能够在给定随机目标状态的情况下,生成朝向这一目标的动作。(注意,需要给定目标状态)。尽管文章策略是在开-关的探索下进行训练,但学习到的策略仍然可以直接在无需额外训练的情况下,直接应用到基于目标的动作生成上。

核心想法就是交换输入时的初始obs和目标状态obs,然后作为策略生成的输入,通过执行逆AoT的动作,策略尝试去将物体移动回“过去”,从而高效地实现目标。如果AoT所有方向的预测都是非负的,则策略停止。

除了选择正确的动作方向,另一个问题是基于目标的操纵需要选择正确的部件进行操纵,因为有时候物体上可能会有很多个可操纵部件(如冰箱有两个门)

参考文献

【计算机图形学】Universal Manipulation Policy Network for Articulated Objects-CSDN博客

相关文章:

UMPNet: Universal Manipulation Policy Network for Articulated Objects

1. 摘要 UMPNet是一个基于图像的策略网络&#xff0c;能够推理用于操纵铰接物体的闭环动作序列。该策略支持6DoF动作表示和可变长度轨迹。 为处理多种类的物体&#xff0c;该策略从不同的铰接结构中学习&#xff0c;并泛化到未见过的物体或类别上。该策略是以自监督探索的方式…...

高通 Android 12/13冻结屏幕

冻结屏幕很多第一次听到以为是Android一种异常现象&#xff0c;实则不然&#xff0c;就是防止用户在做一些非法操作导致问题防止安全漏洞问题。 1、主要通过用户行为比如禁止下拉状态栏和按键以及onTouch事件拦截等&#xff0c;不知道请看这篇文章&#xff08;Touch事件传递流…...

C++实现图的存储和遍历

前言 许多新手友友在初学算法和数据结构时&#xff0c;会被图论支配过。我这里整理了一下图论常见的存储和遍历方式&#xff0c;仅供参考。如有问题&#xff0c;欢迎大佬们批评指正。 存储我将提到四种方式&#xff1a;邻接矩阵、vector实现邻接表、数组模拟单链表实现的前向星…...

AI--构建检索增强生成 (RAG) 应用程序

LLM 所实现的最强大的应用之一是复杂的问答 (Q&A) 聊天机器人。这些应用程序可以回答有关特定源信息的问题。这些应用程序使用一种称为检索增强生成 (RAG) 的技术。 典型的 RAG 应用程序有两个主要组件 索引&#xff1a;从源中提取数据并对其进行索引的管道。这通常在线下…...

QT7_视频知识点笔记_4_文件操作,Socket通信:TCP/UDP

1.事件分发器&#xff0c;事件过滤器&#xff08;重要程度&#xff1a;一般&#xff09; event函数 2.文件操作&#xff08;QFile&#xff09; 实现功能&#xff1a;点击按钮&#xff0c;弹出对话框&#xff0c;并且用文件类读取出内容输出显示在控件上。 #include <QFi…...

智慧社区管理系统:打造便捷、安全、和谐的新型社区生态

项目背景 在信息化、智能化浪潮席卷全球的今天&#xff0c;人们对于生活品质的需求日益提升&#xff0c;期待居住环境能与科技深度融合&#xff0c;实现高效、舒适、安全的生活体验。在此背景下&#xff0c;智慧社区管理系统应运而生&#xff0c;旨在借助现代信息技术手段&…...

CustomTkinter:便捷美化Tkinter的UI界面(附模板)

CustomTkinter是一个基于Tkinter的Python用户界面库。 pip3 install customtkinter它提供了各种UI界面常见的小部件。这些小部件可以像正常的Tkinter小部件一样创建和使用&#xff0c;也可以与正常的Tkinter元素一起使用。 它的优势如下&#xff1a; CustomTkinter的小部件和…...

使用MicroPython和pyboard开发板(15):使用LCD和触摸传感器

使用LCD和触摸传感器 pybaord的pyb对LCD设备也进行了封装&#xff0c;可以使用官方的LCD显示屏。将LCD屏连接到开发板&#xff0c;连接后。 使用LCD 先用REPL来做个实验&#xff0c;在MicroPython提示符中输入以下指令。请确保LCD面板连接到pyboard的方式正确。 >>…...

c++20 std::jthread 源码简单赏析与应用

std::jthread 说明&#xff1a; std::jthread 是 C20 中引入的一个新特性&#xff0c;它是线程库中的一个类&#xff0c;专门用于处理 std::thread 与 std::stop_token 和 std::stop_source 之间的交互&#xff0c;以支持更优雅和安全的线程停止机制。 std::stop_source控制…...

自动化测试里的数据驱动和关键字驱动思路的理解

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 初次接触自动化测试时&#xff0c;对数据驱动和关键字驱动不甚理解&#xff0c;觉得有点故弄玄须…...

【30天精通Prometheus:一站式监控实战指南】第6天:mysqld_exporter从入门到实战:安装、配置详解与生产环境搭建指南,超详细

亲爱的读者们&#x1f44b;   欢迎加入【30天精通Prometheus】专栏&#xff01;&#x1f4da; 在这里&#xff0c;我们将探索Prometheus的强大功能&#xff0c;并将其应用于实际监控中。这个专栏都将为你提供宝贵的实战经验。&#x1f680;   Prometheus是云原生和DevOps的…...

浅析智能体开发(第二部分):智能体设计模式和软件架构

大语言模型&#xff08;LLM&#xff09;驱动的智能体&#xff08;AI Agent&#xff09;展现出许多传统软件所不具备的特征。不仅与传统软件的设计理念、方法、工具和技术栈有显著的差异&#xff0c;AI原生&#xff08;AI Native&#xff09;的智能体还融入了多种新概念和技术。…...

Unity学习笔记---Transform组件

组件介绍 Transform组件在每个游戏对象中都存在&#xff0c;且只存在一个。该组件保存了游戏对象的位置、平移、旋转、缩放等信息。 组件相关方法 //获取当前游戏对象的Transform组件this.transform; getObject.transform; GetComponent<Transform>();//属性 gameObje…...

springboot+jsp校园理发店美容美发店信息管理系统0h29g

前台管理:会员管理、会员预定、开单点单、收银结帐、技师提成 后台管理:数据维护、物料管理、数据查询、报表分析、系统设置等 灵活的付款方式&#xff0c;支持现金、挂帐、会员卡&#xff0c;同时支持多种折扣方式并可按用户要求设置多种结帐类型善的充值卡管理模块:支持优惠卡…...

css - sass or scss ?

总的来说&#xff0c;Sass 和 SCSS 提供的功能是一样的&#xff0c;选择哪种语法主要取决于你的个人或团队的偏好。...

html5 笔记01

01 表单类型和属性 input的type属性 单行文本框: typetext 电子邮箱 : typeemail 地址路径 : type url 定义用于输入数字的字段: typenumber 手机号码: typetel 搜索框 : typesearch 定义颜色选择器 : typecolor 滑块控件 : typerange 定义日期 :typedate 定义输入时间的控件…...

E5063A是德科技e5063a网络分析仪

181-2461-8938产品概述&#xff1a; 简  述&#xff1a; E5063A 是低成本网络分析仪&#xff0c;可提供优化的性能和功能&#xff0c;适用于测试简单的无源器件&#xff0c;例如天线、电缆、滤波器和 PCB 等。它利用工业标准 ENA 系列始终如一的测量架构&#xff0c;能够极…...

【星海随笔】微信小程序(二)

WXML 模板语法 - 数据绑定 在data中定义页面的数据 在页面对应的 .js 文件中&#xff0c;把数据定义到 data 对象中即可&#xff1a; Page({data: {// 字符串类型的数据info: init data,// 数据类型的数据msgList: [{msg: hello},{msg: world}]} })Mustache 语法的格式 把 …...

Python采集安居客租房信息

Python采集安居客租房信息 一、需求介绍二、完整代码一、需求介绍 本次采集的需求就是获取到页面中的所有信息: 将数据采集好之后保存为如下csv文件: 爬取的流程不再展开分析,完整代码附后。 二、完整代码 import csvimport requests from lxml import etreeclass Anju…...

Rust构造JSON和解析JSON

目录 一、Rust构造JSON和解析JSON 二、知识点 serde_json JSON 一、Rust构造JSON和解析JSON 添加依赖项 cargo add serde-json 代码&#xff1a; use serde_json::{Result, Value};fn main() -> Result<()>{//构造json结构 cpu_loadlet data r#"{"…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

02.运算符

目录 什么是运算符 算术运算符 1.基本四则运算符 2.增量运算符 3.自增/自减运算符 关系运算符 逻辑运算符 &&&#xff1a;逻辑与 ||&#xff1a;逻辑或 &#xff01;&#xff1a;逻辑非 短路求值 位运算符 按位与&&#xff1a; 按位或 | 按位取反~ …...

从零开始了解数据采集(二十八)——制造业数字孪生

近年来&#xff0c;我国的工业领域正经历一场前所未有的数字化变革&#xff0c;从“双碳目标”到工业互联网平台的推广&#xff0c;国家政策和市场需求共同推动了制造业的升级。在这场变革中&#xff0c;数字孪生技术成为备受关注的关键工具&#xff0c;它不仅让企业“看见”设…...