论文笔记(一百三十五)Learning Object-Centric Spatial Reasoning... in Cluttered Environments(一)
Learning Object-Centric Spatial Reasoning for Sequential Manipulation in Cluttered Environments
文章概括
引用:
@article{eze2026learning,
title={Learning Object-Centric Spatial Reasoning for Sequential Manipulation in Cluttered Environments},
author={Eze, Chrisantus and Julian, Ryan C and Crick, Christopher},
journal={arXiv preprint arXiv:2603.02511},
year={2026}
}
Eze, C., Julian, R.C. and Crick, C., 2026. Learning Object-Centric Spatial Reasoning for Sequential Manipulation in Cluttered Environments. arXiv preprint arXiv:2603.02511.
主页: <>
原文: https://arxiv.org/pdf/2603.02511
代码、数据和视频: <>
系列文章:
请在 《 《 《文章 》 》 》 专栏中查找
宇宙声明!
引用解析部分属于自我理解补充,如有错误可以评论讨论然后改正!
ABSTRACT
杂乱环境中的机器人操作是自动化领域面临的一个关键挑战。 近年来的大规模端到端模型展现出了令人印象深刻的能力,但它们通常缺乏在密集杂乱环境中取回目标物体所需要的数据效率和模块化能力。 在这项工作中,我们主张采用一种专门化、解耦式系统的范式,并提出了 Unveiler,这是一个明确将高层空间推理与低层动作执行分离开的框架。 Unveiler 的核心是一个轻量级的、基于 Transformer 的空间关系编码器,Spatial Relationship Encoder,SRE,它会按顺序识别最关键、最需要被移除的障碍物。 随后,这个离散决策会被传递给一个具有旋转不变性的动作解码器,Action Decoder,用于执行具体动作。 我们证明,这种解耦架构不仅在参数数量和推理时间方面具有更高的计算效率,而且在从密集杂乱环境中取回目标物体的任务上,也显著优于经典端到端策略和现代基于大模型的基线方法。 SRE 的训练分为两个阶段:首先,通过从启发式示范中进行模仿学习,获得具有样本效率的初始化;之后,再通过 PPO 微调,使策略能够在密集杂乱环境中发现超过启发式方法本身的移除策略。 我们的结果表明,在仿真中,系统在部分遮挡场景下最高达到 97.6% 的成功率,在完全遮挡场景下达到 90.0% 的成功率,这证明了专门化的、以物体为中心的推理能力在复杂操作任务中的有效性。 此外,我们还证明,SRE 的空间推理能力可以零样本迁移到真实场景中,并且在真实物理机器人上验证了完整系统;整个过程只需要进行几何工作空间标定,不需要重新训练任何已学习的组件。
I. INTRODUCTION
从密集杂乱环境中取出一个被遮挡的物体,需要解决两个不同的子问题:首先,要决定移除哪些物体以及按照什么顺序移除;然后,要决定如何在物理上移除每一个物体。 那些将这两个问题混在一起的方法,也就是把像素直接映射到抓取动作的方法 [1]–[4],迫使单个模型同时解决物体选择和动作执行问题;随着场景复杂度增加,这种方式的扩展性较差。 大规模端到端方法和视觉-语言-动作,Vision-Language-Action,VLA 方法 [5]–[7] 具有令人印象深刻的通用性,但它们要么成本高到难以承受,要么每次决策的推理延迟超过 6,000 毫秒,见表 I;这两种情况都不符合真实机器人操作系统对资源和时间的严格要求。
我们认为,对于这个问题来说,显式分解是一种合适的归纳偏置。 通过将用于识别下一个障碍物的轻量级空间推理模块,与用于移除该障碍物的专门执行模块分离开来,每个组件只需要学习一个更简单的问题,系统故障也可以被独立诊断,同时整个系统仍然能够部署在资源受限的硬件上。 Unveiler 的空间关系编码器,Spatial Relationship Encoder,SRE,和动作解码器,Action Decoder,总共只使用 83.03M 个参数,却在部分遮挡场景中达到了 97.6% 的成功率,并且比参数量显著更大的模型,例如 [8]–[10],高出 20% 以上,见表 I 和表 II。 此外,我们还表明,VLA 模型能够在简单场景中进行空间推理,但在密集杂乱场景中性能会下降。
我们的主要贡献如下:
-
我们提出了一种用于杂乱环境操作的分解式架构,将空间推理与动作执行分离,使 SRE 能够专注于障碍物依赖关系建模,而 Action Decoder 负责鲁棒的推-抓执行。 在不同杂乱程度的场景中,这种分解方式相比整体式方法带来了 15% 到 40% 的成功率提升。
-
我们提出了一种基于 Transformer 的空间关系编码器,它能够从启发式示范中学习识别最优的障碍物移除顺序,并在仿真的密集杂乱场景中最高达到 97.6% 的准确率。
-
我们提出了一种两阶段的 SRE 训练流程:首先,通过从启发式示范中进行模仿学习,以样本高效的方式初始化策略;随后,通过 PPO 微调,使 SRE 能够在密集且完全遮挡的场景中发现超过启发式方法的移除顺序。
我们完全使用 PyBullet [11] 中的仿真示范来训练该框架,并在多种场景复杂度,物体数量从 2 到 12 个不等,不同目标遮挡程度,以及仿真和真实世界环境中对其进行评估。 我们的结果表明,Unveiler 在任务完成率和规划效率方面显著优于强基线方法。 通过聚焦于“揭示”目标物体这一具体问题,我们的工作证明了在大规模模型时代,专门为特定任务设计的系统仍然具有持续的重要性,并且可以作为大模型的补充。
图 1. 通过策略性移除障碍物来显露被遮挡的目标物体。 给定一个包含形状和颜色相似物体的杂乱场景,我们的方法会识别必须移除哪些障碍物,以及应按照什么顺序移除,才能接近目标物体,即蓝色物体;在动作执行之前,先解决空间推理问题。
II. RELATED WORK
我们的工作建立在现有机器人操作研究的基础之上,并对其进行了扩展,尤其关注推-抓协同、以物体为中心的表示学习,以及机器人基础模型等领域。
A. Push-Grasping Synergy 推-抓协同
通过协调推动和抓取动作来处理杂乱场景并提高抓取成功率,这一思想已经是一个较为成熟的研究方向 [1], [12]–[14]。 早期工作,例如 [12],提出了使用自监督深度强化学习,deep RL,来学习推动和抓取之间协同关系的思想。 TransporterNet 架构 [2] 是一个重要进展,它使用全卷积网络来学习用于推动和抓取的视觉运动策略,并在杂乱环境中展现出了令人印象深刻的性能。 然而,TransporterNet 及其后续方法通常依赖一种两阶段过程:先通过推动清理空间,然后再进行抓取,而缺少一种更加一体化的操作方式。
较新的方法试图在这种两阶段范式的基础上进行改进 [3], [4]。 例如,MPGNet [4] 提出了一种网络,该网络学习协同“移动”、“推动”和“抓取”动作,从而在遮挡场景中实现更高效的目标导向抓取。 这项工作以及其他相关研究,体现了一种趋势:研究正在朝着更加一体化、更加动态的动作选择方向发展。 我们的工作通过提出一种新的以物体为中心的表示方式,为这一研究方向做出了贡献;这种表示方式能够支持更加细致的空间推理,以及更加灵活的序列操作方法。 不同于那些主要关注清理杂乱物体的方法,我们的方法会推理物体之间的空间关系,并利用这些关系来指导一系列动作,从而在高度杂乱的场景中实现更加高效、更加成功的操作。
B. Object-centric Representation Learning 以物体为中心的表示学习
机器人操作中的一个核心挑战,是学习能够捕捉物体属性及其相互关系的表示。 早期方法,例如 VIMA [15] 和 VIOLA [16],使用带有语言提示和物体候选区域的模仿学习,但它们的效果受到示范数据多样性和质量的限制。 较新的研究更加强调以物体为中心的世界模型,以提升泛化能力和探索能力。 例如,[17] 构建了三维的以物体为中心的表示,使操作策略能够对视角变化和新物体保持鲁棒性;而 FOCUS [18] 则学习了一个以物体为中心的世界模型,用于指导探索和规划。
我们的方法与这些工作不同,它将以物体为中心的推理专门针对密集杂乱环境中的序列操作进行定制。 我们并不是主要关注泛化能力,而是显式编码长时程空间依赖关系和遮挡关系,从而产生具有可解释性的决策过程。 这种设计不仅有助于建立信任并进行验证,因为选择概率可以让人检查模型优先选择了哪个物体以及为什么选择它;同时,它还增强了多步规划中的鲁棒性,例如在抓取目标物体之前先清除障碍物。
C. Vision-Language Models for Robotic Manipulation 用于机器人操作的视觉-语言模型
大语言模型,Large Language Models,LLMs,和视觉-语言模型,Vision-Language Models,VLMs [19] 的融合,为机器人学开辟了新的前沿方向。 ThinkGrasp [10]、OVGNet [20] 和 VILG [8] 等模型利用 VLM 的语义理解能力,使机器人抓取更加直观和灵活。 例如,ThinkGrasp 使用 VLM 对杂乱环境中的抓取进行推理,从而实现更具策略性和上下文感知能力的操作。 OVGNet 为开放词汇机器人抓取提供了一个统一框架,使机器人能够根据自然语言描述来抓取物体。 与此同时,VILG 提出了一种用于杂乱环境中语言条件抓取的框架,并使用 CLIP [9] 来对视觉信息和语言提示进行对齐与 grounding。
虽然这些模型展示了 VLM 在高层推理方面的能力,但它们通常带来显著的计算开销,并且可能不够关注鲁棒低层运动控制所必需的细粒度空间理解。 我们的工作通过提出一种轻量级且专门化的架构,对这些进展形成补充。 我们的模型并不依赖一个整体式 VLM 同时完成高层规划和低层控制,而是使用一种聚焦的、以物体为中心的表示来实现精确的物理交互。 这种方法不仅计算效率更高,而且增强了操作层面的鲁棒性和可解释性。 通过弥合高层指令与执行这些指令所需的精确低层动作之间的差距,我们的模型为复杂真实场景中的序列操作提供了一种更加完整且实用的解决方案。
III. 问题形式化与分解
它研究的是一个机器人任务:
桌子上有很多杂乱堆在一起的物体,机器人要把指定目标物体取出来。
比如桌子上有杯子、盒子、香蕉、积木,目标是“拿出香蕉”。 但香蕉可能被其他物体挡住,机器人不能直接抓它,所以它要先推开或抓走一些障碍物。 所以任务不是简单的:
看见目标 → 直接抓。
而是:
看见一堆东西 → 判断哪个东西挡路 → 先移除它 → 再继续观察 → 最后取出目标。
这就是 sequential target retrieval,中文可以理解为: 按顺序移除障碍物,最后取回目标物体。
我们研究的是:利用自上而下的 RGB-D 感知系统和推-抓动作 primitive,从密集杂乱环境中按顺序取回目标物体。 给定一张 RGB 场景图像 I I I,以及由融合后的 RGB-D 点云构建得到的对应深度高度图 I g I_g Ig,实例分割会生成一组物体掩码 M = { M 1 , . . . , M N } M = \{M_1,...,M_N\} M={M1,...,MN} 和一个目标索引 t t t。 我们使用高度图而不是原始深度图像,因为高度图提供了一种以机器人为中心的自上而下表示,能够减少透视畸变,并提供一致的动作参考坐标系。
论文说给机器人两个主要视觉输入:
第一,RGB 图像 I I I: 这就是普通彩色图片。 机器人看到桌面场景,例如:
红色杯子、黄色盒子、蓝色瓶子等。
第二,深度高度图 I g I_g Ig: RGB-D 相机不仅看到颜色,还能看到深度。 但是论文不直接用原始深度图,而是把 RGB-D 点云变成 heightmap,高度图。 可以把高度图理解成:
从桌子正上方往下看,每个位置记录“这里有多高”。
比如:
- 桌面高度是 0;
- 一个盒子高度是 8 cm;
- 一个杯子高度是 12 cm。
所以高度图不是普通照片,而像一张“地形图”。
高度图让机器人更容易把“图像里的位置”变成“真实世界里的动作位置”。
实例分割就是把图像里的每个物体单独抠出来。 比如桌面上有 4 个物体:
M 1 M_1 M1:杯子的 mask;
M 2 M_2 M2:盒子的 mask;
M 3 M_3 M3:瓶子的 mask;
M 4 M_4 M4:目标香蕉的 mask。所以 M = { M 1 , . . . , M N } M = \{M_1,...,M_N\} M={M1,...,MN} 表示当前检测到的所有物体掩码。 这里的 N N N 是当前分割模型预测出来的物体数量。 注意,是预测出来的,不一定等于真实数量。
目标索引 t t t 是什么? 假设分割出了 5 个物体: M 1 M_1 M1, M 2 M_2 M2, M 3 M_3 M3, M 4 M_4 M4 和 M 5 M_5 M5,其中 M 3 M_3 M3 是目标物体。 那么目标索引就是: t = 3 t=3 t=3。也就是说, t t t 告诉机器人: 当前这些物体里面,哪一个是最终要拿出来的目标。
Segmentation mismatch. 分割不匹配问题。 在杂乱环境中,检测到的实例数量可能与真实物体数量不同。 我们用 N N N 表示当前步骤中预测出的掩码数量;Unveiler(揭幕者) 每一步预测并执行一个动作,因此每移除一个物体,通常都会改善场景可见性,并随着时间推移减少分割错误。
Action primitive and constraints. 动作 primitive 及其约束。 遵循 Kiatos 等人 [3] 的设置,机器人在以下约束下执行推-抓动作 primitive:
- (i) 执行过程中末端执行器高度固定;
- (ii) 推动阶段夹爪开口保持恒定;
- (iii) 高度图边界与工作空间边界对齐;
- (iv) 桌面工作空间大小为 0.5m × 0.5m。
primitive 在机器人里通常指: 一个预先定义好的基础动作模式。
在每一个决策步骤中,机器人必须:
- (a) 选择下一个要移除的可见物体;
- (b) 执行一个连续的推-抓动作来移除该物体。
Unveiler 将这个问题分解为一个离散的物体选择策略,即 SRE,以及一个条件动作执行策略,即 Action Decoder:
π ( a ∣ s ) = ∑ i ∈ { 1 , . . . , N } π SRE ( i ∣ s , t ) π AD ( a ∣ s , i ) , ( 1 ) π(a | s) = ∑_{i∈\{1,...,N\}} π_\text{SRE}(i | s,t) π_\text{AD}(a | s,i), \quad (1) π(a∣s)=i∈{1,...,N}∑πSRE(i∣s,t)πAD(a∣s,i),(1)
这个公式表示:整体策略 π ( a ∣ s ) π(a | s) π(a∣s) 被分解成两部分,一部分是 SRE 选择物体 i i i 的概率,另一部分是 Action Decoder 在选定物体 i i i 后生成动作 a a a 的概率。
其中,状态 s s s 包含场景观测,包括 I I I 和/或 I g I_g Ig,以及带有目标索引 t t t 的实例掩码/裁剪图集合 M M M;离散选择 i i i 表示某一个物体实例的索引;而 a ∈ R 4 a ∈ \mathbb{R}^4 a∈R4 用于参数化推-抓动作 primitive,包括位置、方向和夹爪开口。 这种分解使 SRE 能够专注于以物体为中心的空间推理,也就是判断哪个障碍物最关键;而 Action Decoder 则专注于对被选中物体进行鲁棒的、具有旋转不变性的动作执行。
论文没有让一个大模型直接从图像输出完整动作,而是把任务分成两个模块:
模块 1:SRE
先把 SRE 理解为:
负责选择哪个物体应该先被移除的模块。
它回答的问题是:
当前场景里,哪个物体最关键?哪个物体最挡目标?
所以 SRE 做的是物体级别的空间推理。 它不关心夹爪怎么具体运动。 它只关心:
选谁?
模块 2:Action Decoder
Action Decoder 负责:
对选中的物体生成具体推抓动作。
它回答的问题是:
既然已经决定要移除这个物体,那我应该怎么推、怎么抓?
所以 Action Decoder 做的是动作执行。 它不负责判断哪个物体最重要。 它只负责:
怎么操作这个物体?
这个公式看着复杂,其实意思是: 最终动作策略 = 先选择物体的策略 × 再生成动作的策略。
π ( a ∣ s ) \pi(a|s) π(a∣s) 是什么?
这是整体策略。 意思是:
在当前状态 s s s 下,机器人选择动作 a a a 的概率。
s s s 是当前观察到的场景状态。 a a a 是机器人最终要执行的推抓动作。
π SRE ( i ∣ s , t ) \pi_{\text{SRE}}(i|s,t) πSRE(i∣s,t) 是什么?
这是 SRE 模块。 意思是:
在当前状态 s s s 和目标索引 t t t 已知的情况下,选择第 i i i 个物体的概率。
比如场景里有 4 个物体: 选择 M 1 M_1 M1 的概率是 0.1; 选择 M 2 M_2 M2 的概率是 0.7; 选择 M 3 M_3 M3 的概率是 0.1; 选择 M 4 M_4 M4 的概率是 0.1。 那么 SRE 最可能选择 M 2 M_2 M2。 这说明它认为 M 2 M_2 M2 是当前最应该移除的物体。
π AD ( a ∣ s , i ) \pi_{\text{AD}}(a|s,i) πAD(a∣s,i) 是什么?
这是 Action Decoder。 意思是:
在当前状态 s s s 下,如果已经选中了第 i i i 个物体,那么生成动作 a a a 的概率。
也就是说,Action Decoder 的输入包括:
- 当前场景;
- 被选中的物体编号 i i i。
然后它输出具体动作。
为什么公式里面有求和 ∑ i \sum_i ∑i?
因为理论上,每个物体都有可能被选择。 整体动作概率要考虑所有可能的物体选择路径。 比如机器人最终做出动作 a a a,可能来自: 先选 M 1 M_1 M1,再生成动作 a a a; 先选 M 2 M_2 M2,再生成动作 a a a; 先选 M 3 M_3 M3,再生成动作 a a a。 所以要把所有物体选择的可能性加起来。 但在实际执行时,通常可以理解成: SRE 先选一个最关键的物体,然后 Action Decoder 针对它生成动作。
这种因式分解将学习问题简化为多类别物体选择问题,并给出了一个可解释的界限,用于将最终任务性能与 SRE 的选择错误联系起来,见 Section V。
IV. PROPOSED APPROACH
它想解决的问题是: 在一堆杂乱物体里,机器人不能只看“哪个物体离目标最近”,而要学会判断“应该按什么顺序移除障碍物”,最后才能安全取出目标物体。
传统方法通常只关注识别距离目标物体最近的障碍物 [1], [13], [21]–[24],而我们的方法处理的是一个更复杂的任务:识别一条最优的障碍物移除顺序,从而接近并取回目标物体;这需要远超“只看障碍物是否靠近目标物体”的空间推理能力。
为什么“只看离目标近”不够?
举个例子。 假设目标物体在一堆东西中间,旁边有一个很靠近目标的物体,但是它也被其他物体压住了。 如果机器人直接去移除这个靠近目标的物体,可能会发生:
- 机器人不好抓;
- 推它会碰到一堆其他物体;
- 整个堆可能被扰乱;
- 目标反而被挡得更严重。
所以论文认为,机器人需要更强的空间推理能力。 它不只是问:
哪个障碍物离目标最近?
而是问:
现在这个场景里,先移走哪个物体最合理? 移走它之后,目标会不会更容易暴露? 这个顺序是不是更稳定、更安全?
这就是所谓的 障碍物移除顺序,obstacle removal sequence。
我们的框架根据两个空间标准来决定下一个要移除的物体:
- (i) 该物体到工作空间边界,也就是外围区域的距离,这可以作为抓取可达性的近似指标,因为位于外围的物体通常遮挡更少,也更容易被机器人触及;
- (ii) 该物体到目标物体的距离,这会优先考虑最接近被阻挡区域的物体。
标准 1:物体到工作空间边界的距离
物体越靠近桌面外围,通常越容易被机器人抓到或推走。
靠边的物体一般:
- 遮挡少;
- 周围空间更空;
- 机器人夹爪更容易接近;
- 移除时不容易碰到很多其他物体。
可以理解成:
先清理外围物体,就像先从一堆杂物的边缘开始收拾,而不是直接从最中间硬拽。
所以“到边界的距离”是一个近似指标,用来估计:
这个物体是不是容易被机器人操作?
论文里叫 grasp accessibility,也就是抓取可达性。
标准 2:物体到目标物体的距离
优先考虑那些接近目标、可能挡住目标的物体。
比如目标是胡萝卜。 一个碗离胡萝卜很近,可能挡住胡萝卜。 另一个杯子离胡萝卜很远,虽然也在桌上,但不影响抓胡萝卜。 那么机器人应该更关注这个碗,而不是远处的杯子。 所以第二个标准是在判断: 这个物体是不是和目标取回任务有关?
场景稳定性是通过隐式方式得到提升的:通过优先移除外围物体,该方法可以尽量减少对堆叠深处物体的扰动,从而降低连锁反应发生的可能性。
为了有效应对这些挑战,我们将方法分解为两个互补的组件:一个是空间关系编码器,Spatial Relationship Encoder,见 Section IV-A,它用于识别需要被移除的关键物体;另一个是动作解码器,Action Decoder,见 Section IV-B,它用于执行清理路径并取回目标物体所需的物理操作。 这种分解使我们能够分别优化任务中的感知部分和操作部分,同时仍然保持二者之间天然存在的相互依赖关系。
A. Spatial Relationship Encoder 空间关系编码器
空间关系编码器,是一个“选物体模块”。 它不负责控制机械臂怎么动。 它只回答一个问题:
当前这些可见物体里,下一步应该先移除哪一个?
比如桌面上有 8 个物体,目标物体被挡住。SRE 的任务就是从这 8 个物体里选出一个:
先移走它,后面才更容易拿到目标。
虽然启发式方法,见 Algorithm 1,能够在中等杂乱场景中提供有效的示范,但它依赖的是几何 primitive,例如质心位置和到边界的距离;在严重遮挡和分割不完美的情况下,这些几何信息会变得不可靠。 SRE 的设计目标是把同样的空间逻辑内化到学习得到的视觉表示中,从而获得对分割噪声的鲁棒性,并具备捕捉更高阶物体依赖关系的能力,而这些关系是启发式方法的加性评分无法建模的。

这里的 启发式方法 heuristic,你可以理解成: 人写死的一套规则。 比如: 物体离目标近,分数高; 物体靠近边缘,分数高; 分数最高的物体就先移除。 这种方法简单、直观,但是有一个大问题: 它非常依赖分割和几何计算是否准确。
什么叫“几何 primitive”?
这里的 primitive 不是机器人动作 primitive,而是基础几何量。 比如:
质心位置 centroid
就是一个物体 mask 的中心点。 如果一个杯子的 mask 是一片区域,那么质心就是这片区域的中心。到边界的距离
比如桌面是一个正方形工作空间。 某个物体离桌子边缘越近,就越容易从外侧推走或抓走。
到目标物体的距离
某个障碍物离目标越近,越可能挡住目标。 这些都是简单几何特征。
为什么严重遮挡时这些几何信息会不可靠?
因为遮挡会让分割结果错。 比如真实场景中有两个物体: 红色碗; 黄色胡萝卜。 但是红色碗挡住了胡萝卜一半。 分割模型可能出现几种错误:
- 漏检:胡萝卜被挡住太多,模型没检测出来;
- 合并:碗和胡萝卜被分成一个整体;
- 切错:只分割出胡萝卜露出来的一小部分;
- 质心偏移:因为只看到一部分,所以算出来的中心点不是真实中心。
这时候你再用质心、距离、边界这些几何规则,就会出错。
SRE 想解决什么?
SRE 想做的是: 不再只依赖手工几何规则,而是让神经网络从图像中学习空间关系。 原文说:
把同样的空间逻辑内化到学习得到的视觉表示中。
这句话很重要。 “同样的空间逻辑”指的是前面的规则: 靠边的物体更容易移除; 靠近目标的物体更可能挡住目标; 应该按照合理顺序清理障碍物。 “内化到学习得到的视觉表示中”意思是: 不再手动计算几个距离分数,而是让模型从图像特征中自己学会这些规律。 所以 SRE 的目标是: 学会像启发式方法一样进行空间判断,但比启发式方法更鲁棒。
什么叫“更高阶物体依赖关系”?
简单说,低阶关系是:
A 离目标近不近?
高阶关系是:
A 挡住 B,B 又挡住目标,所以 A 虽然不直接靠近目标,但它间接影响目标。
举个例子: 目标是胡萝卜。 前面有一个碗挡住胡萝卜。 碗前面又有一个杯子挡住碗。 那么杯子不一定离胡萝卜最近,但它可能是第一步应该移走的物体。 这就叫 间接遮挡 indirect occlusion。 传统加性评分方法可能只会算:
score=边界分数+目标距离分数
这种简单加法很难表达:
A 挡住 B,B 挡住目标,所以先移 A。
而 Transformer 的注意力机制可以学习这种物体之间的复杂依赖关系。
在杂乱环境中的物体操作任务里,关键挑战是识别应该移除哪些障碍物,才能接近目标物体。 我们将这个问题形式化为空间依赖建模问题,让模型学习理解并利用目标物体与周围物体之间的关系。 我们的方法使用完全学习得到的表示,来预测最优的物体移除顺序。
SRE 是一个 Transformer encoder 模型 [25],它的输入包括场景的顶部相机视角图像、目标物体的裁剪图像,以及场景中所有可见物体的裁剪图像。
SRE 的输入: 输入包括三类东西:
第一,顶部相机视角图像
也就是从上往下看的整个场景图。 它提供全局信息:
- 所有物体在哪里;
- 物体之间怎么排列;
- 目标大概在哪个区域;
- 哪些地方拥挤,哪些地方空。
第二,目标物体的裁剪图像
目标 crop 就是把目标物体从图像里单独裁出来。 它告诉模型:
你最终要取回的是这个东西。
比如目标是黄色胡萝卜,那么目标 crop 就是胡萝卜的小图。
第三,所有可见物体的裁剪图像
每个检测到的物体都有一个 crop。 比如当前检测到 5 个物体:
- 物体 0:杯子 crop;
- 物体 1:碗 crop;
- 物体 2:盒子 crop;
- 物体 3:胡萝卜 crop;
- 物体 4:瓶子 crop。
SRE 要从这些候选物体里选一个作为下一步移除对象。
该架构被设计为输出一个离散决策:下一个应该被移除的物体索引。 这些索引直接对应于分割模型检测到的 N N N 个物体边界框,其中每个检测到的物体都会被分配一个从 0 0 0 到 N − 1 N-1 N−1 的连续索引。 然后,SRE 会在这 N N N 个索引上输出一个概率分布,并选择移除概率最高的物体。 在推理过程中,无效索引,也就是超过当前物体数量的索引,会被自动过滤掉。
输入会先进行归一化,并复制到三个通道,以匹配模型所期望的输入格式。 随后,模型使用在 ImageNet [27] 上预训练的 ResNet18 [26] 骨干网络来提取视觉特征,将目标物体图像和 N N N 个物体裁剪图像中每一个 1 × 144 × 144 1 × 144 × 144 1×144×144 的图像转换为一个 1 × 1024 1 × 1024 1×1024 的特征图。 这些特征会被展平,并输入到多层感知机,multi-layer perceptrons,MLPs,中,从而得到 1024 维的潜在表示。 多头注意力机制会计算目标物体,作为 query,场景图像,作为 key,以及周围物体,作为 value,之间的注意力分数。 之后,一个 MLP 会进一步处理得到的 N × 512 注意力输出,为每个物体生成 1 × N 的移除权重。
网络结构第一步:归一化和复制到三个通道
原文说:
输入会先进行归一化,并复制到三个通道,以匹配模型所期望的输入格式。
这句话意思是: 原始输入可能是单通道图像,比如高度图: 1 × 144 × 144 1×144×144 1×144×144,但是 ResNet18 通常是在 ImageNet 上训练的,它期望输入是 RGB 三通道图像: 3 × H × W 3×H×W 3×H×W。所以如果输入是单通道,就复制三份: 1 × 144 × 144 → 3 × 144 × 144 1×144×144→3×144×144 1×144×144→3×144×144。不是增加新信息,只是为了让输入格式匹配 ResNet。 归一化就是把像素值调整到模型更容易处理的范围,比如减均值、除方差。
网络结构第二步:ResNet18 提取视觉特征
原文说:
使用在 ImageNet 上预训练的 ResNet18 骨干网络来提取视觉特征。
ResNet18 是一个经典 CNN 图像特征提取网络。 它的作用是: 把原始图像变成一串更抽象的视觉特征。 比如输入是一个物体 crop: 1 × 144 × 144 1×144×144 1×144×144,经过 ResNet18 后变成: 1 × 1024 1×1024 1×1024。你可以理解成: 原来是图片,现在变成了一个 1024 维向量。 这个向量里面包含了物体的视觉信息,比如: 形状; 大小; 纹理; 可能的位置特征; 与周围结构相关的视觉模式。
网络结构第三步:MLP 得到潜在表示
原文说:
这些特征会被展平,并输入到 MLP 中,从而得到 1024 维的潜在表示。
MLP 就是多层感知机,也就是普通全连接神经网络。 它的作用是进一步处理 ResNet 提取出来的特征。 你可以理解为: ResNet 负责看图,MLP 负责把图像特征整理成后面 Transformer 更好用的表示。 这个“潜在表示 latent representation”就是模型内部使用的向量,不是人直接看的东西。
网络结构第四步:注意力机制怎么理解?
原文说:
多头注意力机制会计算目标物体作为 query,场景图像作为 key,周围物体作为 value 之间的注意力分数。
这一句是最难的。 SRE 要回答:
对于目标物体来说,周围哪些物体最重要?
所以它需要比较:
- 目标物体;
- 整个场景;
- 每个候选障碍物。
注意力机制就是让模型学会:
目标应该重点关注哪些物体?
Query 是什么? Query 可以理解成“提问者”。 这里目标物体是 query。 它在问:
谁和我有关?谁挡住我?谁影响我被取出来?
Key 是什么? Key 可以理解成“匹配线索”。 这里场景图像是 key。 它提供整体上下文:
当前桌面布局是什么样的?
Value 是什么? Value 可以理解成“被提取的信息”。 这里周围物体是 value。 模型最后要从这些物体里提取信息,判断哪个物体应该被移除。
为什么用多头注意力?
“多头”意思是模型不是只用一种角度看关系,而是用多个角度同时看。 比如一个注意力头可能关注:
谁离目标近?
另一个注意力头可能关注:
谁靠近边界?
另一个注意力头可能关注:
谁挡在目标前方?
再一个注意力头可能关注:
谁移除后会打开路径?
所以多头注意力可以让模型同时学习多种空间关系。
为了建模物体之间的依赖关系以及物体与目标之间的相关性,我们使用了一组堆叠的 Transformer block。 这些层使模型能够捕捉更高阶的关系,例如间接遮挡,也就是说,一个物体位于另一个障碍物前方,从而间接阻挡了目标物体。
Transformer block 在这里干什么?
Transformer 的核心能力是处理“关系”。 在这里,它不是用来处理语言,而是用来处理物体之间的关系。 它要学习:
- 目标和障碍物之间的关系;
- 障碍物和障碍物之间的关系;
- 直接遮挡关系;
- 间接遮挡关系;
- 哪个物体先移除更合理。
比如:
物体 A 不直接挡目标,但 A 挡住了物体 B,B 挡住目标,所以 A 也重要。
这种关系就适合用 Transformer 学。
该模块的输出是一个选择掩码,用于突出显示哪个物体应该被传递给 Action Decoder 进行操作。 这种离散选择机制支持序列决策:每一步只移除一个物体,使机器人能够逐步减少遮挡和场景杂乱程度。
什么叫选择掩码 selection mask?
SRE 最后输出一个选择结果。 比如当前有 5 个物体,它选择第 2 个。 那么选择 mask 可以写成: [ 0 , 0 , 1 , 0 , 0 ] [0,0,1,0,0] [0,0,1,0,0]
意思是: 第 2 个物体被选中,其他物体不选。 这个选择结果会传给 Action Decoder。 Action Decoder 接下来只需要针对这个被选中的物体生成动作。 所以 SRE 和 Action Decoder 的关系是: SRE 选谁,Action Decoder 操作谁。
这种机制支持序列决策?
因为机器人不是一次把所有障碍物都移走,而是每次只移除一个。
流程是:
- 看当前场景;
- SRE 选择一个物体;
- Action Decoder 生成推抓动作;
- 机器人移除这个物体;
- 场景变得更清楚;
- 再重新观察;
- 再选下一个物体。
所以它是一步一步清理杂乱场景。 这就是 sequential decision-making,序列决策。
SRE 训练: SRE 分两个阶段进行训练。 在第一阶段,策略通过模仿学习,imitation learning,IL,进行初始化;这些示范由 Algorithm 1 中的评分启发式方法生成。 这一步把几何移除逻辑,也就是外围可达性和目标邻近性,编码进学习得到的视觉表示中,从而提供一个强大且样本效率高的起点,并且该起点已经能够在中等杂乱场景中较好地泛化。
第一阶段:IL 模仿学习
模仿学习的意思是:
先给模型一些示范,让模型模仿这些示范。
这里的示范不是人手动标注的,而是由 Algorithm 1 的启发式评分方法生成的。 也就是说,Algorithm 1 会根据几何规则判断:
当前应该先移除哪个物体。
然后 SRE 学习这个判断结果。 比如 Algorithm 1 认为第 3 个物体应该被移除,那么训练 SRE 时就让它输出第 3 个物体。
为什么先用 IL?
因为如果直接用强化学习,搜索空间太大。 机器人一开始什么都不会,随机选物体,可能经常失败。 IL 可以先给它一个比较靠谱的起点。
原文说:
把几何移除逻辑编码进学习得到的视觉表示中。
意思是:
让 SRE 先学会启发式方法里那些基本规律,比如靠边、靠近目标、容易移除。
这样模型一开始就不是乱选,而是有基本空间常识。
在第二阶段,我们使用近端策略优化,proximal policy optimization,PPO [28],对经过 IL 预训练的权重进行微调,并将障碍物选择形式化为一个离散的马尔可夫决策过程,Markov Decision Process,MDP。 状态 s t s_t st 是 SRE 的视觉输入,包括场景高度图、目标裁剪图和物体裁剪图;动作 a t ∈ { 1 , . . . , N } a_t ∈ \{1,...,N\} at∈{1,...,N} 是被选中障碍物的索引。 由于 IL 阶段使策略在一个结构良好的动作空间中完成初始化,因此强化学习探索会被引导到密集且完全遮挡的场景区域;在这些场景中,启发式方法的性能会下降。 训练完全在仿真中进行,不需要额外的真实机器人数据。
第二阶段:PPO 微调
PPO 是一种强化学习算法。 在这里,PPO 的作用是:
在 IL 的基础上继续改进 SRE,让它在更复杂、更密集、更严重遮挡的场景中表现更好。
为什么需要 PPO? 因为 IL 学的是启发式方法。 但启发式方法本身有缺陷。 如果只模仿启发式方法,SRE 最多学到启发式方法的水平。 所以第二阶段要用强化学习,让模型通过任务成功率自己优化。
这里的 MDP 是什么?
原文说:
将障碍物选择形式化为一个离散的 MDP。
MDP,Markov Decision Process,马尔可夫决策过程,就是强化学习里的标准问题形式。 在这里它包含:
- 状态 s t s_t st
当前时刻机器人看到的视觉输入:
场景高度图;
目标裁剪图;
物体裁剪图。也就是:
当前场景长什么样。
- 动作 a t a_t at
选择一个障碍物索引: a t ∈ { 1 , . . . , N } a_t ∈ \{1,...,N\} at∈{1,...,N}
也就是:当前要移除哪个物体。
注意,这里的动作不是机械臂底层动作,而是高层动作:
选择物体。
真正的推抓动作由 Action Decoder 负责。
- 奖励 r t r_t rt
机器人做出选择之后,环境给一个分数。 如果选择有利于取出目标,奖励高。 如果乱选、动作太多、没用,奖励低。
每个 episode 会从 N ∈ [ 2 , 12 ] N ∈ [2,12] N∈[2,12] 的范围内均匀采样物体数量,并设置规划时域 H H H 和折扣因子 γ γ γ。
随机采样为了让模型见过不同复杂程度的场景。 有时候场景简单,只有 2 个物体。 有时候场景复杂,有 12 个物体。 这样训练出来的 SRE 不会只适应固定数量的物体。
H H H 可以理解成最多允许多少步。 比如 H = 6 H = 6 H=6,意思是: 最多允许机器人做 6 次选择/移除动作。 如果 6 步内还没取出目标,就失败。
折扣因子 γ \gamma γ 是强化学习里用来计算长期奖励的参数。 它控制模型重视未来奖励的程度。 简单说:
- γ \gamma γ 越大,模型越重视长期结果;
- γ \gamma γ 越小,模型越只看眼前奖励。
在这个任务里,机器人不能只看当前一步舒服不舒服,还要考虑: 这一步移除之后,后面是不是更容易拿到目标? 所以需要折扣因子。
每一步的奖励为:
r t = α ⋅ 1 [ success ] ⋅ ( 1 + β H − t H ) + r access ( a t , s t ) + r occl ( a t , s t ) ⋅ 1 [ a t ≠ tgt ] + r step , (2) r_t = \alpha \cdot \mathbf{1}[\text{success}] \cdot \left( 1 + \beta \frac{H - t}{H} \right) + r_{\text{access}}(a_t, s_t)\\ + r_{\text{occl}}(a_t, s_t) \cdot \mathbf{1}[a_t \neq \text{tgt}] + r_{\text{step}}, \tag{2} rt=α⋅1[success]⋅(1+βHH−t)+raccess(at,st)+roccl(at,st)⋅1[at=tgt]+rstep,(2)
这个奖励函数想表达:
成功取出目标要奖励;越早成功奖励越高;如果动作让目标更可达,也奖励;如果动作减少遮挡,也奖励;但是每多做一步都要惩罚。
其中, r access r_\text{access} raccess 会在目标物体可达时奖励对目标的抓取;遮挡塑形项 r occl r_{\text{occl}} roccl 会根据直接暴露目标物体和间接清理路径的效果来奖励障碍物移除;而 r step < 0 r_\text{step} < 0 rstep<0 则用于惩罚不必要的动作。
第一项:成功奖励
α ⋅ 1 [ success ] ⋅ ( 1 + β H − t H ) \alpha \cdot \mathbf{1}[\text{success}] \cdot \left( 1 + \beta \frac{H - t}{H} \right) α⋅1[success]⋅(1+βHH−t)1 [ success ] \mathbf{1}[\text{success}] 1[success] 是指示函数。
如果任务成功:
- 1 [ success ] = 1 \mathbf{1}[\text{success}]=1 1[success]=1
如果任务失败:
- 1 [ success ] = 0 \mathbf{1}[\text{success}]=0 1[success]=0
所以这项只有在成功时才有奖励。
α \alpha α 是成功奖励的权重。
它控制: 成功这件事有多重要。 α \alpha α 越大,模型越重视最终成功。
( 1 + β H − t H ) \left(1 + \beta \frac{H - t}{H}\right) (1+βHH−t) 是“越早成功奖励越高”。
其中:
- H H H 是最大步数;
- t t t 是当前第几步;
- H − t H - t H−t 表示还剩多少步。
如果很早成功, t t t 小,那么 H − t H-t H−t 大,奖励更高。 如果拖到很晚才成功,奖励就小一些。 所以这项鼓励机器人: 不要磨蹭,用更少步骤取出目标。
第二项:可达性奖励
r access ( a t , s t ) r_{\text{access}}(a_t, s_t) raccess(at,st)原文说:
当目标物体可达时,奖励对目标的抓取。
意思是:
如果目标已经暴露出来,而且机器人能够抓它,那么选择抓目标就是好行为。
这个奖励鼓励模型: 目标能抓的时候,就别继续清理无关障碍物了,直接取目标。 否则机器人可能会一直清理旁边无关物体,效率低。
第三项:遮挡塑形奖励。
r occl ( a t , s t ) ⋅ 1 [ a t ≠ tgt ] r_{\text{occl}}(a_t, s_t)\cdot \mathbf{1}[a_t \neq \text{tgt}] roccl(at,st)⋅1[at=tgt]它奖励那些能够减少遮挡的动作。 比如:
- 移除某个物体后,目标露出来更多;
- 移除某个物体后,到目标的通路更清楚;
- 移除某个物体后,后续抓目标更容易。
这项很重要,因为如果只给最终成功奖励,训练会很难。 机器人可能做了一个好动作,但还没有立刻成功。 如果没有中间奖励,模型不知道这个动作其实是有帮助的。 所以 r occl r_{\text{occl}} roccl 是一种 reward shaping,奖励塑形。 它告诉模型: 即使还没最终成功,只要你减少了遮挡,也应该得到一些奖励。
1 [ a t ≠ tgt ] \mathbf{1}[a_t \neq \text{tgt}] 1[at=tgt]
意思是: 只有当你选择的不是目标物体,而是障碍物时,才给遮挡清理奖励。 如果你选择的是目标物体,那就不是“清理遮挡”了,而是直接尝试取目标。 这时候应该看 r access r_{\text{access}} raccess 或成功奖励,而不是遮挡奖励。 所以这个指示函数是在区分两种情况:
选择对象 应该奖励什么 选择目标物体 抓取目标、任务成功 选择障碍物 减少遮挡、清理路径
第四项:步数惩罚。
r step r_{\text{step}} rstep原文说:
r step < 0 r_\text{step} < 0 rstep<0 用于惩罚不必要的动作。
也就是说,每走一步都扣一点分。 为什么? 因为机器人不能无限清理。 如果没有步数惩罚,机器人可能会慢慢清理所有物体,虽然最后也能成功,但效率很低。 r step r_{\text{step}} rstep 鼓励机器人: 用尽量少的动作完成任务。
此外,我们在消融实验中,见 Section VI-F,表明移除该编码器会导致任务成功率和规划效率显著下降,这突出了它在 Unveiler 系统中的关键作用。
B. Action Decoder 动作解码器
一旦 SRE 识别出应该被移除的物体,Action Decoder 就会生成执行该移除操作所需的低层动作。 该模块负责确定一个鲁棒的推-抓动作,包括动作的位置和旋转方向,并且这个动作会根据被选中的物体以及当前场景布局进行调整。
图 2. Unveiler 系统架构。 SRE 和 Action Decoder 的独立训练,使每个组件都能够专注于各自对应的任务,同时在推理阶段共享一个离散的物体索引。 SRE 通过 Transformer 处理场景视觉输入和以物体为中心的视觉输入,从而选择最优的障碍物;而 Action Decoder 则为被选中的物体生成具有旋转不变性的推-抓参数。
Action Decoder 是一个全卷积网络,Fully Convolutional Network,FCN,它接收两个输入:完整场景的深度高度图 I g I_g Ig,以及从深度高度图中提取出来的被选中物体裁剪图 O i O_i Oi。 这些输入会分别通过不同的卷积路径进行处理,见 Figure 2。 随后,这些特征流会被融合,用于生成覆盖 16 个离散方向的抓取热力图,每个方向间隔为 22.5°,从而实现旋转不变性。
Action Decoder 是干什么的?
前面的 SRE 负责:
选出“下一个应该移除哪个物体”。
但是 SRE 只会说:
移除第 3 个物体。
它不会告诉机器人:
机械臂应该从哪里下手、往哪个方向推、夹爪怎么摆。
所以需要 Action Decoder,动作解码器。 Action Decoder 的作用是:
当 SRE 已经选中一个物体后,Action Decoder 负责生成具体的推-抓动作参数。
简单说:
模块 负责什么 SRE 选哪个物体 Action Decoder 怎么操作这个物体 所以 Action Decoder 是低层动作模块。
什么叫“低层动作”?
这里的低层动作不是最底层的电机控制,也不是每个关节的力矩。 它指的是推-抓 primitive 的动作参数,比如:
- 在哪里开始操作;
- 从哪个方向推;
- 夹爪旋转角度是多少;
- 抓取点在哪里。
你可以理解成:
Action Decoder 不直接控制每个电机,而是输出一个机器人可以执行的推-抓动作方案。
什么是“鲁棒的推-抓动作”?
鲁棒就是:
场景稍微变化、物体位置稍微不同、角度稍微不同,动作仍然有较大概率成功。
比如 SRE 选中了一个红色草莓。 Action Decoder 要判断:
- 从左边推更好,还是从右边推更好?
- 夹爪应该横着夹,还是斜着夹?
- 从哪个像素位置下手最容易成功?
- 会不会撞到旁边物体?
所以它不是死板地输出一个固定动作,而是根据:
- 被选中的物体;
- 当前完整场景布局;
来生成合适动作。
Action Decoder 的输入是什么?
它有两个输入。
输入 1:完整场景的深度高度图 I g I_g Ig
这个是整个桌面的高度图。 它告诉模型:
当前所有物体在桌面上怎么摆放。
它包含全局信息,例如:
- 其他物体在哪里;
- 哪些地方被挡住;
- 哪些地方可以推;
- 哪些区域空间比较空。
输入 2:被选中物体的裁剪图 O i O_i Oi
这个是从高度图中裁出来的单个物体区域。 比如 SRE 选中了第 i i i 个物体,那么就把这个物体对应的局部区域裁出来,得到 O i O_i Oi。 它告诉模型:
这次具体要操作的是哪个物体。
所以两个输入的作用不同:
输入 作用 完整高度图 I g I_g Ig 看整个场景布局 目标物体裁剪图 O i O_i Oi 看被选中物体的局部形状和位置
为什么既要完整场景,又要物体裁剪图?
因为只看局部不够,只看全局也不够。
只看物体裁剪图的问题: 如果只看被选中物体,模型不知道旁边有没有障碍物。 比如它想从右边推,但右边刚好有另一个物体挡着。 那这个动作可能失败。
只看完整场景的问题: 如果只看完整场景,模型可能不够清楚:
当前到底要操作哪个物体?
特别是场景里有很多物体时,容易混淆。 所以作者让 Action Decoder 同时看:
全局场景 + 被选物体局部。
这样它既知道“操作谁”,也知道“周围环境怎么样”。
Action Decoder 为什么用 FCN?
Action Decoder 是一个 Fully Convolutional Network,FCN,全卷积网络。 FCN 的特点是:
它主要由卷积层组成,可以对图像的每个位置输出预测结果。
在这里,FCN 很适合生成 heatmap,热力图。 热力图可以理解成:
图像上每个位置有一个分数,分数越高,越适合在那里执行动作。
比如高度图是 224 × 224 224 \times 224 224×224,Action Decoder 可以给每个像素位置一个抓取分数:
- 这里适合抓,分数高;
- 那里容易撞,分数低;
- 另一个地方物体太厚,也分数低。
所以 FCN 的作用不是输出一个单独分类结果,而是输出一张或多张动作评分图。
什么叫“两个输入分别通过不同卷积路径处理”?
Action Decoder 有两个输入:
- 完整场景高度图;
- 被选物体裁剪图。
这两个输入的信息类型不同,所以论文让它们先走不同的卷积分支。 可以理解成两条路:
第一条路:处理完整场景
它学习:
- 场景整体布局;
- 周围障碍物;
- 空闲区域;
- 可能的碰撞风险。
第二条路:处理被选物体
它学习:
- 被选物体的形状;
- 被选物体的局部高度;
- 被选物体适合从哪里推或抓。
之后两条路的特征会被融合。
“特征流融合”是什么意思?
两个输入经过卷积网络后,会变成两组特征。 一组代表完整场景信息。 一组代表被选物体信息。 融合就是把这两组信息合在一起,让模型同时利用它们。 简单说:
Action Decoder 既考虑“这个物体本身怎么操作”,也考虑“周围环境允不允许这样操作”。
比如: 物体本身适合从左边抓,但左边被另一个物体挡住了。 融合全局场景信息后,模型可能选择从右边推抓。
什么是抓取热力图?
抓取热力图就是:
每个位置对应一个抓取或推抓成功概率。
你可以想象一张桌面俯视图,上面每个点都有一个分数:
- 红色区域:很适合下手;
- 蓝色区域:不适合下手。
论文说 Action Decoder 生成的是覆盖多个方向的抓取热力图。 这意味着它不仅判断:
哪个位置适合抓?
还判断:
以哪个旋转方向抓更好?
为什么是 16 个离散方向?
论文说:
覆盖 16 个离散方向,每个方向间隔 22.5°。
因为完整一圈是:
360 ∘ 360^\circ 360∘
分成 16 份:
360 ∘ / 16 = 22.5 ∘ 360^\circ / 16 = 22.5^\circ 360∘/16=22.5∘
所以模型会考虑 16 个方向:
- 0°
- 22.5°
- 45°
- 67.5°
- …
- 337.5°
每个方向都有一张热力图。 你可以理解为:
模型同时预测“从 16 个角度看,哪里最适合抓”。
这为什么能实现“旋转不变性”?
这里要稍微准确一点。 严格说,它不是完全数学意义上的旋转不变性,而是通过枚举多个离散角度,让模型对旋转变化更鲁棒。 比如一个长条形物体横着放,最适合横向抓。 如果它斜着放 45°,最适合的抓取方向也要跟着变。 如果模型只预测一个固定方向,就很容易失败。 所以作者让模型预测 16 个方向的热力图。 这样物体怎么旋转,模型都有机会在对应方向上找到合适动作。 简单说:
16 个方向让 Action Decoder 不怕物体角度变化。
Action Decoder 最后输出什么?
它输出的是推-抓动作参数。 可以理解为从热力图里选出:
- 最好的位置;
- 最好的方向;
- 对应的推-抓动作。
比如输出结果可以理解成:
在高度图的某个像素位置,以 45° 方向执行推-抓。
再把这个像素位置转换成真实机器人坐标,机械臂就能执行。
它和 SRE 怎么连接?
SRE 输出一个物体索引:
i i i
这个索引表示:
当前应该移除第 i i i 个物体。
然后系统根据这个索引,从高度图中裁出该物体:
O i O_i Oi
再把:
I g 和 O i I_g \quad \text{和} \quad O_i Ig和Oi
输入 Action Decoder。
所以流程是:
- SRE 看场景,选物体 i i i;
- 根据 i i i 裁剪出物体图 O i O_i Oi;
- Action Decoder 看 I g I_g Ig 和 O i O_i Oi;
- 输出推-抓动作;
- 机器人执行动作。
Action Decoder 怎么训练?
原文说:
使用抓取图上的监督式交叉熵损失进行训练。
这说明它是 supervised learning,监督学习。 监督学习需要标签。 这里的标签来自专家方法 Algorithm 2。 也就是说,对于一个训练场景,专家会告诉模型:
哪个位置、哪个方向是正确的推-抓动作。
然后模型输出一组热力图。 训练时比较:
- 模型预测的热力图
- 专家给出的正确抓取标签
如果模型预测错了,就用交叉熵损失更新网络。
什么是交叉熵损失?
交叉熵损失常用于分类问题。 在这里,可以把它理解成:
在所有候选位置和方向里,模型要把最高概率分配给专家认为正确的动作。
比如 16 个方向,每个方向又有很多像素位置。 每个“方向 + 位置”都可以看成一个候选动作。 专家标签说:
正确动作是第 5 个方向、第 120 行、第 80 列。
那么训练时就希望模型在这个位置输出高分,其他位置输出低分。 如果模型把高分给了错误位置,损失就大。 如果模型把高分给了正确位置,损失就小。
为什么 SRE 和 Action Decoder 可以独立训练?
因为它们的任务不同。 SRE 学的是:
当前应该选哪个物体?
Action Decoder 学的是:
给定一个物体,应该怎么操作它?
这两个问题可以分别构造训练标签。 SRE 的标签是物体索引。 Action Decoder 的标签是推-抓动作热力图。 所以它们可以独立训练。 但是在真实推理时,它们又必须配合:
SRE 选错物体,Action Decoder 再强也没用;
SRE 选对物体,Action Decoder 动作不好也会失败。
用一个例子串起来
假设桌面上有:
- 物体 0:红色草莓;
- 物体 1:橙色碗;
- 物体 2:黄色胡萝卜,目标;
- 物体 3:蓝色杯子。
目标是抓取黄色胡萝卜。
第一轮:
- SRE 判断红色草莓最挡路,输出索引 0;
- 系统裁剪草莓区域,得到 O 0 O_0 O0;
- Action Decoder 输入完整高度图 I g I_g Ig 和草莓 crop O 0 O_0 O0;
- 输出一个推-抓动作,比如“从左上角以 45° 推开草莓”;
- 机器人执行,草莓被移除。
第二轮:
- 重新观察场景;
- SRE 判断橙色碗还挡住胡萝卜,输出索引 1;
- Action Decoder 生成推开碗的动作;
- 机器人执行。
第三轮:
- 胡萝卜暴露;
- SRE 可能选择目标胡萝卜;
- Action Decoder 生成抓取胡萝卜动作;
- 任务成功。
Action Decoder 使用抓取图上的监督式交叉熵损失进行训练。 在评估阶段,我们使用抓取成功率以及取回目标所需的动作数量,或步骤数量,等指标来评估其性能。 用于获得监督标签的专家方法展示在 Algorithm 2 中。

C. 数据收集
我们的策略完全通过在 PyBullet [11] 仿真环境中收集的示范数据进行训练。 我们设计了一组启发式函数,用于在每一个决策步骤中同时识别最优的待移除障碍物,以及与该障碍物对应的抓取配置,见 Algorithms 1 and 2。 为了确保数据质量,我们会对示范数据进行筛选,只保留成功的操作尝试。
为了保持训练阶段和部署阶段之间的一致性,我们在示范数据收集和策略评估中都采用严格的成功标准。 只有当一次抓取满足两个关键条件时,才会被认为是成功抓取:
-
1)单物体交互:夹爪必须准确抓住一个物体,以确保操作稳定性。
-
2)抓取稳定性:被抓取的物体在被抬起时必须保持稳定夹持,不会掉落。
这些严格标准确保我们的策略能够学习到鲁棒且可靠的操作策略,并能够有效迁移到真实世界场景中。 此外,在训练和评估过程中使用相同的成功指标,可以更真实地评估策略的性能。
V. PROPERTIES OF THE DECOMPOSED POLICY 分解式策略的性质
Section III 中定义的因式分解公式,Eqn. 1,并不仅仅是为了架构设计上的方便。 它带来了两个性质,这两个性质会直接影响系统如何学习,以及系统失败时如何进行诊断。
1)以物体为中心的归纳偏置: 以物体为中心的归纳偏置:SRE 架构编码了一种结构,而这种结构如果放在整体式策略中,就必须由模型自己隐式地发现。 目标物体始终作为 cross-attention 中的 query,这使得学习到的表示从第一次梯度更新开始,就被锚定在相对于目标物体的空间上下文中。 逐物体裁剪图使模型对实例顺序具有等变性,因此相同的选择行为可以泛化到训练中没有见过的物体数量和场景配置中。
性质一:以物体为中心的归纳偏置
原文说:
object-centric inductive bias,以物体为中心的归纳偏置。
这个词很吓人,其实可以拆开理解。
什么是归纳偏置?
归纳偏置就是:
模型在学习之前,架构本身就带有某种“倾向”或“先验假设”。
比如你用 CNN 处理图像,其实就是给模型一个先验:
图像中相邻像素关系很重要。
这里的 SRE 给模型的先验是:
机器人应该以“物体”为单位理解场景,而不是把整张图像当成一堆像素乱看。
这就是 以物体为中心的归纳偏置。
为什么说整体式策略没有这种结构?
整体式策略,end-to-end policy,通常是:
输入整张图像,直接输出机器人动作。
这种模型必须自己学会:
- 哪些区域是物体;
- 哪个物体是目标;
- 哪个物体挡住目标;
- 哪个物体应该先移除;
- 怎么操作这个物体。
也就是说,模型要从零发现“物体”这个概念。 而 SRE 不一样。 SRE 一开始就接收:
- 目标物体 crop;
- 每个候选物体 crop;
- 场景图像。
所以模型从结构上就被迫按“目标物体—候选障碍物—场景关系”来思考。 简单说:
整体式策略是让模型自己从像素里找规律; SRE 是一开始就告诉模型:你要围绕目标物体和其他物体之间的关系来判断。
“目标物体始终作为 query”是什么意思?
在 SRE 里面,目标物体被放在 cross-attention 的 query 位置。 你可以把 query 理解成“提问者”。 目标物体作为 query,就等于目标在问:
哪些物体和我有关?
谁挡住我?
谁应该先被移除,才能让我暴露出来?这很重要。 因为从训练一开始,模型的注意力就围绕目标物体展开。 所以原文说:
学习到的表示从第一次梯度更新开始,就被锚定在相对于目标物体的空间上下文中。
人话就是:
模型不是随便看场景,而是从一开始就围绕“目标物体在哪里、谁影响目标”来学习。
什么叫“逐物体裁剪图使模型对实例顺序具有等变性”?
这句话也很抽象。 假设场景里有 3 个物体:
- 物体 0:杯子;
- 物体 1:碗;
- 物体 2:胡萝卜。
如果换一种编号:
- 物体 0:碗;
- 物体 1:胡萝卜;
- 物体 2:杯子。
模型不应该因为编号变了就乱掉。 它应该根据物体本身和空间关系判断,而不是死记:
物体 0 总是该移除。
等变性 equivariance 的意思是:
输入物体的顺序变了,输出对应的选择顺序也跟着变,但决策逻辑不变。
简单说:
物体列表怎么排序不重要,模型应该仍然能选出正确物体。
这让模型可以泛化到不同物体数量和不同场景布局。
比如训练时最多见过 6 个物体,测试时见到 9 个物体,只要结构相似,SRE 仍然有机会工作。
性质一总结
第一条性质说的是:
SRE 的结构天然适合杂乱物体操作,因为它不是直接从整图输出动作,而是围绕目标物体,逐个比较候选物体之间的空间关系。
所以它更容易学到:
- 谁挡目标;
- 谁靠近目标;
- 谁应该先移除;
- 物体数量变化时怎么处理。
2)加性误差分解: 加性误差分解:由于物体选择和动作执行是分开的,因此它们的失败模式也是分开的。 如果 SRE 在比例为 ε SRE ε_\text{SRE} εSRE 的步骤中选择了次优物体,并且每一次错误选择在期望进展上的代价最多为 ∆ ∆ ∆,那么实际 SRE 策略 J ( π ) J(π) J(π) 与理想策略 J ( π ∗ ) J(π^∗) J(π∗) 之间的总性能差距可以被如下上界约束:
J ( π ∗ ) − J ( π ) ≤ H ⋅ Δ ⋅ ε SRE + ε exec (3) J(\pi^*) - J(\pi) \leq H \cdot \Delta \cdot \varepsilon_{\text{SRE}} + \varepsilon_{\text{exec}} \tag{3} J(π∗)−J(π)≤H⋅Δ⋅εSRE+εexec(3)
其中, H ≤ N H ≤ N H≤N 是 episode 的时域长度,也就是每次移除对应一步;∆ 是单次错误选择物体所造成的最坏情况代价; ε SRE ε_\text{SRE} εSRE 是 SRE 的物体误分类率,也就是在留出测试集上测得的 top-1 错误率; ε exec \varepsilon_{\text{exec}} εexec 是在给定正确物体的情况下,Action Decoder 的执行误差。 这种最终性能对逐步分类错误呈线性时域依赖的关系,是模仿学习规约分析中的标准形式 [29], [30]。 这两个误差项是相加关系,而不是相乘关系,这意味着其中一个误差来源不会与另一个误差来源相互放大。
性质二:加性误差分解
第二条性质是:
因为物体选择和动作执行被分开了,所以失败原因也可以分开分析。
这句话很关键。 在这个系统里,失败大体有两种:
第一种:SRE 选错物体
比如应该先移走碗,但 SRE 选了无关的杯子。 这叫物体选择错误。
第二种:Action Decoder 执行失败
比如 SRE 选对了碗,但是 Action Decoder 生成的推抓动作不好,机器人没把碗移走。 这叫执行错误。
因为两个模块分开,所以错误也可以分开度量。
公式在说什么?
论文给了这个上界: J ( π ∗ ) − J ( π ) ≤ H ⋅ Δ ⋅ ε SRE + ε exec J(\pi^*) - J(\pi) \leq H \cdot \Delta \cdot \varepsilon_{\text{SRE}} + \varepsilon_{\text{exec}} J(π∗)−J(π)≤H⋅Δ⋅εSRE+εexec
这个公式意思是:
实际策略比理想策略差多少,可以被两部分误差控制:SRE 的选择错误 + Action Decoder 的执行错误。
左边:
J ( π ∗ ) − J ( π ) J(\pi^*) - J(\pi) J(π∗)−J(π)
表示:
理想策略的性能 − 当前实际策略的性能。
如果这个差距越大,说明实际系统越差。
每个符号是什么意思?
J ( π ∗ ) J(\pi^*) J(π∗):是理想策略的性能。 可以理解成:
如果每一步都选对物体、动作也执行得很好,系统能达到的表现。
J ( π ) J(\pi) J(π): 是当前实际策略的性能。
也就是实际的 SRE + Action Decoder 跑出来的表现。
H H H: 是 episode 的时域长度,也就是最多执行多少步。
在这个任务里,每一步通常移除一个物体,所以:H ≤ N H \leq N H≤N
因为最多也就是把物体一个个移走。
Δ \Delta Δ: 是单次错误选择造成的最坏代价。
比如某一步 SRE 选错了物体,导致任务进展变慢或更困难。 这个错误最多损失多少,就用 Δ \Delta Δ 表示。
ε SRE \varepsilon_{\text{SRE}} εSRE: 是 SRE 的物体误分类率。
也就是:
SRE 有多少比例的步骤选错了物体。
原文说它是在测试集上测得的 top-1 错误率。 top-1 错误率就是:
模型概率最高的那个选择不是正确答案。
ε exec \varepsilon_{\text{exec}} εexec:是 Action Decoder 的执行误差。
意思是:
在 SRE 已经选对物体的情况下,Action Decoder 仍然可能因为动作不好而失败。
为什么是 H ⋅ Δ ⋅ ε SRE H \cdot \Delta \cdot \varepsilon_{\text{SRE}} H⋅Δ⋅εSRE?
这一项表示 SRE 错误造成的累计损失。 你可以这样理解:
- 一个 episode 最多有 H H H 步;
- 每一步 SRE 都有一定概率选错;
- 错一次最多损失 Δ \Delta Δ;
- 错误比例是 ε SRE \varepsilon_{\text{SRE}} εSRE。
所以累计起来,SRE 造成的性能损失最多大概是:
步数 × 单次错误代价 × 错误率。
这就是:
H ⋅ Δ ⋅ ε SRE H \cdot \Delta \cdot \varepsilon_{\text{SRE}} H⋅Δ⋅εSRE
为什么还要加 ε exec \varepsilon_{\text{exec}} εexec?
因为就算 SRE 选对了物体,Action Decoder 也可能失败。 比如:
- SRE 正确选择了挡住目标的碗;
- 但 Action Decoder 预测的抓取角度不好;
- 机器人没有成功移除碗。
所以最终性能差距还要加上动作执行误差:
ε exec \varepsilon_{\text{exec}} εexec
“相加关系,而不是相乘关系”是什么意思?
这个非常重要。 公式右边是:
SRE误差项 + 执行误差项 \text{SRE误差项} + \text{执行误差项} SRE误差项+执行误差项
也就是两个误差是相加的。 它不是:
SRE误差 × 执行误差 \text{SRE误差} \times \text{执行误差} SRE误差×执行误差
这说明:
物体选择错误和动作执行错误不会互相指数式放大。
人话说:
系统性能差,可以分别怪 SRE 或 Action Decoder,而不是两个错误混在一起完全看不清。
这对诊断很有用。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)