Shelving, Stacking, Hanging: Relational Pose Diffusion for Multi-modal Rearrangement(一)
文章概括
引用:
@inproceedings{simeonov2023shelving,
title={Shelving, Stacking, Hanging: Relational Pose Diffusion for Multi-modal Rearrangement},
author={Simeonov, Anthony and Goyal, Ankit and Manuelli, Lucas and Lin, Yen-Chen and Sarmiento, Alina and Garcia, Alberto Rodriguez and Agrawal, Pulkit and Fox, Dieter},
booktitle={Conference on Robot Learning},
pages={2030--2069},
year={2023},
organization={PMLR}
}
Simeonov, A., Goyal, A., Manuelli, L., Lin, Y.C., Sarmiento, A., Garcia, A.R., Agrawal, P. and Fox, D., 2023, December. Shelving, Stacking, Hanging: Relational Pose Diffusion for Multi-modal Rearrangement. In Conference on Robot Learning (pp. 2030-2069). PMLR.
主页:https://anthonysimeonov.github.io/rpdiff-multi-modal/
原文: https://arxiv.org/abs/2307.04751
代码、数据和视频: https://github.com/anthonysimeonov/rpdiff
系列文章:
请在
《
《
《文章
》
》
》 专栏中查找
宇宙声明!
引用解析部分属于自我理解补充,如有错误可以评论讨论然后改正!
摘要
我们提出了一个系统,用于重新排列场景中的物体,以实现所需的物体–场景放置关系,例如将书插入书架的一个开放槽中。 该流程能够推广到新的几何形状、姿态以及场景和物体的布局,并通过示范进行训练,直接在3D点云上运行。我们的系统克服了给定场景存在许多在几何上相似的重排解决方案所带来的挑战。通过利用迭代姿态去噪训练过程,我们能够拟合多模态示范数据并产生多模态输出,同时保持精确和准确。我们还展示了在条件于相关的局部几何特征、同时忽略那些损害泛化性和精确性的不相关全局结构时的优势。我们在仿真和现实世界中,通过三个不同的重排任务验证了我们的方法,这些任务都需要处理多模态并在物体形状与姿态上实现泛化。项目网站、代码和视频: https://anthonysimeonov.github.io/rpdiff-multi-modal
关键词: 物体重排、多模态、操作、点云
1 引言
参见图 1,该图示例说明了(1)将一本书放置在部分被填满的书架上,以及(2)将一个杯子挂在桌子上多个挂钩之一上。这些任务涉及对物体与场景之间的几何交互进行推理,以实现目标,这是机器人学社区关注的许多清理和整理任务中的关键需求[1]。在本工作中,我们使机器人系统能够执行这一重要任务家族之一:刚体物体的六自由度重排[2]。我们的系统使用从深度相机获取的点云,使其能够在具有未知三维几何结构的真实环境中运行。这种重排行为是从一组示例数据中学习得到的,这些示例展示了所需的物体–场景关系:系统观测场景点云和(分割后的)物体点云,然后演示者将物体转换到最终的配置。
图 1:通过从一组重排任务示范中学习,例如将书放入书架 (A) 和将杯子挂在挂钩上 (B),Relational Pose Diffusion (RPDiff) 可以为新的物体/场景对生成多种变换,这些变换都能够实现相同的物体–场景关系。
现实场景通常由形状和姿态可以独立变化的物体组成。这种组合导致场景具有(i)几何外观和布局的组合式变化(例如,各个挂钩可能放置在桌子的任意位置)和(ii)提供了许多用于物体–场景交互的位置和几何特征(例如,放置书籍的多个插槽以及挂杯子的多个挂钩)。现实场景的这些特征带来了两个密切相关的学习挑战:多模态放置和对多样化场景布局的泛化能力。
- 多模态性出现在重排输出中。可能存在许多场景位置可供放置物体,这些多种可能性在学习和部署过程中都会带来困难。也就是说,从示例中学习的一个著名挑战是拟合包含相似输入却具有不同关联目标(模式)的数据集。此外,在部署过程中,预测多个候选重排方案可以帮助机器人选择满足其他约束(例如工作空间限制和碰撞避免)的方案。因此,系统必须预测覆盖尽可能多不同重排方案的多模态输出。
一、多模态输出的挑战
什么是多模态输出?
- 对同一个输入场景,可能存在多种“合理的”物体摆放顺序或布局方案。
- 例如:给定一张桌子和三本书,你既可以先放书 A,再放书 B,最后放书 C,也可以先放 B→C→A……多种排序都合法。
为什么学习多模态输出困难?
- 训练时:模型要“记住”同样的输入(场景点云)对应的多个不同目标(多种重排方案),而不是只学一个“最常见”的答案。
- 这就好比让模型同时拟合几条平行的关系曲线——若只用单一损失函数,很可能只能学出它们的“平均”方案,偏离任何一个真实模式。
为什么部署时也要多模态?
- 机器人执行:现实中还会有各种额外约束,比如手臂能到达的位置、周围空间大小、避免与其他物体碰撞等等。
- 如果模型只给一个方案,当这个方案在具体环境中不适用(比如放书的位置太远、碰到其他物体),机器人就陷入“无可执行”状态。
- 而如果模型能够输出多种候选方案,机器人就可以在这些候选中挑选一个最符合当前约束的,从而保证更高的成功率。
- 在处理系统输入时,必须解决泛化问题。一个场景由许多在形状和布局上都可变的元素组成。例如,书架可以位于环境的任何位置,并且在书架内可能存在多种书籍排列方式。呈现给模型的点云反映了这种多样性。由于场景在组合上具有多种排列和布局,因此对这种输入可变性的泛化要比对单个物体的形状和姿态变化的泛化更加困难。此外,系统还必须对物体的任何可能初始配置具备泛化能力。
二、输入泛化的挑战
什么是输入泛化?
- 场景输入不仅包含“单个物体”的信息(形状、姿态),还包含一大堆元素的组合、布局、相对位置等。
- 例如:一个书架可能在房间的任意角落;书架里的书也可能随意地前后、上下、左右摆放。
为何组合多样性更难?
- 当模型只需要识别“一个物体”的形状和姿态变化时,输入的变动主要是局部的、连续的(比如:旋转几个角度)。
- 可是一旦是“场景”——同一类物体的数量、种类、排列方式都可变,变动空间和模式指数级增加。
- 换句话说,从单个物体到多个物体的排列组合,输入维度和分布都大幅膨胀,模型要学会在这种巨大多样性中提取有用特征,难度显著提升。
系统还要对任何初始配置泛化
- 不仅“组合方式”多,连最开始的初始状态也可能千差万别。
- 比如:桌面上可能已有一些杂物,或者书架里已有半排书,机器人要把目标书排进去,就要能适应各种预先存在的布局。
- 这意味着模型不仅要“看到”各种布局,还要对它们都能给出合理的重排建议。
给定一组最终的物体–场景点云数据集(通过将观测到的物体点云在示范结束时变换到其结果配置获得),我们可以将许多初始物体配置合成视为对最终点云的扰动。利用这些数据,我们可以自然而然地将重排预测表述为点云姿态去噪。从一个最终的物体–场景点云出发,我们通过随机变换物体来创建一个“带噪声”的点云,并训练一个神经网络去预测如何将该带噪声点云变换回原始配置(利用已知扰动作为监督的真实标签)。在部署时,我们同样预测一个去噪的物体变换,该变换满足与场景的学习到的关系,并将此预测变换作为重排动作。机器人结合抓取采样、逆运动学和运动规划来执行预测出的重排动作。
不幸的是,从一次大扰动中学习去噪在考虑多模态时效果不佳[3]——创建外观相似却对应不同预测目标的带噪点云,可能导致模型学习出对数据拟合很差的平均解。我们通过将预测器训练成扩散模型[4, 5]来执行迭代式去噪,从而克服这一困难。通过构建一个多步加噪过程,扩散模型被训练为一步步地增量逆转该过程。直观地看,该逆过程的初期步骤更接近真实值,且相关的预测目标在不同样本间更可能是唯一的——对模型而言,这时的预测“看起来更像单峰”。模型同样以迭代方式生成测试时的输出。通过从多样化的初始猜测集启动此推理过程,预测结果可以收敛到多种不同的最终解。
尽管迭代去噪有助于处理多模态问题,我们还必须考虑如何支持对新颖场景布局的泛化。为此,我们提出通过裁剪靠近物体的区域来对场景点云进行局部编码。局部裁剪输入有助于模型泛化,因为它聚焦于局部邻域内的细节,同时忽略无关且遥远的干扰项。用于表示更小尺度补丁的特征也可以在不同空间区域和场景实例间重用[6–9]。在初始迭代中,我们使用较大的裁剪尺寸,因为推理过程从可能远离良好解的随机猜测开始。随着解在多次迭代中逐渐收敛,我们也逐步减小裁剪尺寸,以强调更加局部的场景上下文。
总之,我们提出了 Relational Pose Diffusion (RPDiff),一种基于物体与场景点云执行 6 6 6 自由度关系重排的方法,该方法(1)在形状、姿态和场景布局上具有泛化能力;(2)能够优雅地处理多模态场景。我们在仿真和真实环境中的三个任务上评估了我们的方法:(i)与现有方法比较,这些方法要么在多模态和复杂场景中表现不佳,要么无法实现精确重排;(ii)对整体流程的各个组成部分进行了消融研究。
2 问题设置
我们的目标是给定场景 S \text{S} S 和物体 O \text{O} O (分别表示为3D点云 P S ∈ R M × 3 \text{P}_\text{S}∈ℝ^{M×3} PS∈RM×3 和 P O ∈ R N × 3 \text{P}_\text{O}∈ℝ^{N×3} PO∈RN×3 ),预测一组 SE(3) \text{SE(3)} SE(3)变换 { T k } k = 1 K \{\text{T}_k\}_{k=1}^K {Tk}k=1K,以完成物体重排任务。通过从该集合中选择(即通过学习的评分函数)并应用某一变换,我们可以以满足与场景所需几何关系的方式放置物体。我们假设物体点云已从整体场景中分割出来,场景中不包含其他已分割的物体(例如,无法分割出书架上的每一本书)。我们还假设存在训练数据集 D = ( P O , P S ) l = 1 L \mathcal{D}={(\text{P}_{\text{O}},\text{P}_{\text{S}})}_{l=1}^L D=(PO,PS)l=1L ,其中每个数据点表示物体被放置在所需配置下的点云。例如, D \mathcal{D} D可以包含不同形状、姿态及书架上书本配置的书和书架点云,以及将书本放入某一可用插槽的 SE(3) \text{SE(3)} SE(3)变换。这些示范可以来自人类演示,也可以来自在仿真中访问真实物体状态的脚本算法。
1. 问题目标
输入
- 场景点云 P S ∈ R M × 3 \displaystyle \mathrm{P}_{S}\in\mathbb{R}^{M\times3} PS∈RM×3:表示整个环境中所有可见的三维点。
- 物体点云 P O ∈ R N × 3 \displaystyle \mathrm{P}_{O}\in\mathbb{R}^{N\times3} PO∈RN×3:表示我们要放置(或重排)的单个物体的三维点。
- (假设这两段点云已经过分割,场景中不再包含其它被分割出的物体。)
输出
- 一组 { T k } k = 1 K \{\mathsf{T}_k\}_{k=1}^K {Tk}k=1K 的 S E ( 3 ) \mathrm{SE}(3) SE(3) 变换(刚体位姿),
- 每个 T k \mathsf{T}_k Tk 都是把物体从“当前模板坐标系”移动到“某个合理放置位置”的位姿变换。
- S E ( 3 ) \mathrm{SE}(3) SE(3) 意味着同时包含平移( R 3 \mathbb{R}^3 R3)和旋转( S O ( 3 ) \mathrm{SO}(3) SO(3))。
目的
- 给模型一组候选放置方案,后续可以根据抓取方式、机器人臂可达性、碰撞检测等额外约束,选出“可执行”的那一个进行动作规划和执行。
2. 训练数据集 D \mathcal{D} D
数据集形式:
D = { ( P O ( l ) , P S ( l ) , T ( l ) ) } l = 1 L . \mathcal{D} = \{(\mathrm{P}_{O}^{(l)},\,\mathrm{P}_{S}^{(l)},\,\mathsf{T}^{(l)})\}_{l=1}^L. D={(PO(l),PS(l),T(l))}l=1L.
对于每一个样本 l l l:
- P O ( l ) \mathrm{P}_{O}^{(l)} PO(l):示范中物体的点云(物体在“原始”坐标系下的点)。
- P S ( l ) \mathrm{P}_{S}^{(l)} PS(l):示范中对应的“场景”点云(环境中其它物体或支撑面)。
- T ( l ) ∈ S E ( 3 ) \mathsf{T}^{(l)}\in\mathrm{SE}(3) T(l)∈SE(3):将物体从原始位置“正确放置”到目标位置的变换。
来源
- 人类示范:由人手动摆放物体并用传感器录入点云、位姿。
- 脚本或仿真:在模拟环境中编程控制物体放置,得到地面真实状态。
关键在于,系统必须能够生成多模态的输出变换,以满足其他系统组件(例如可用抓取方式、机器人可达性、碰撞障碍)所施加的约束。预测多样化的输出有助于搜索可行的放置方案。在机器人执行阶段,机器人可利用抓取采样器[10]、逆运动学(IK)求解器和运动规划器来生成并执行抓取–放置轨迹。
3. 多模态输出的必要性
为什么要输出多于 1 种变换?
同一个场景 可能对应多种合理的放置方式:
- 书可以放入书架的不同插槽。
- 盒子可以朝不同方向旋转后再放进台面上的凹槽。
只输出单一“最优”方案,可能因为机器人臂的可达性限制或碰撞检测失败,而无法执行。
多模态输出的好处
- 给执行系统(抓取采样器、IK 求解器、运动规划器)更多“候选”去尝试,提高成功率和鲁棒性。
- 如果一种方案在现场行不通,可以快速切换到下一个备选,而无需重新感知或训练。
4. 从候选集合到最终执行
评分函数(Scoring)
- 模型除了生成 { T k } \{\mathsf{T}_k\} {Tk},还可以给每个候选打分,表示“放置质量”或“可行性”。
- 执行时先挑分高的几种方案,再做碰撞检测、IK 求解。
机器人执行流程
- 抓取采样器:从物体表面生成若干抓取点和姿态。
- 应用候选变换 T k \mathsf{T}_k Tk:模拟物体放到目标位置后的姿态。
- 逆运动学(IK)求解:检查机器人臂能否到达抓取和放置姿态。
- 运动规划:在环境中规划一条无碰撞的轨迹并执行。
3 方法
主要思想是对物体的 6 自由度姿态进行迭代去噪,直到其满足与场景点云的期望几何关系。框架概览如图 2 所示。
图 2:方法概览。(A) 从物体和场景点云
P
O
\text{P}_\text{O}
PO 和
P
S
\text{P}_\text{S}
PS 开始,我们将
P
O
\text{P}_\text{O}
PO 变换到一组多样化的初始姿态。RPDiff 将这些初始的物体–场景点云作为输入,迭代更新物体姿态,并输出一组满足所需场景关系的物体配置。这使得可以将 RPDiff 与规划器集成,以在满足额外系统约束的同时搜索并执行放置方案。(B) 模型被训练为执行迭代式姿态去噪。从满足所需任务的物体–场景点云开始,我们对物体施加一系列扰动,并训练模型预测能够一步步消除噪声的
SE
(
3
)
\text{SE}(3)
SE(3) 变换。(C) 为了促进对新颖场景布局的泛化,我们将场景点云裁剪到靠近物体点云的区域。
3.1 通过迭代姿态去噪实现物体–场景点云扩散
我们将一次重排动作 T \text{T} T 表示为对组合的物体–场景点云执行多步去噪过程的输出,该过程由离散时间变量 t = 0 , … , T t=0,\dots,T t=0,…,T 索引。该过程反映了物体点云从初始带噪配置 P O ( T ) \text{P}_\text{O}^{(T)} PO(T) 到满足与场景点云 P S \text{P}_\text{S} PS 所需关系的最终配置 P O ( 0 ) \text{P}_\text{O}^{(0)} PO(0) 的变换,即
P O ( 0 ) = T P O ( T ) . \text{P}_\text{O}^{(0)} = \text{T}\text{P}_\text{O}^{(T)}. PO(0)=TPO(T).
为此,我们训练神经网络
f θ : R N × 3 × R M × 3 → SE(3) f_\theta:\mathbb{R}^{N\times3}\times\mathbb{R}^{M\times3}\to \text{SE(3)} fθ:RN×3×RM×3→SE(3)
以在每一步预测组合物体–场景点云的 SE(3) \text{SE(3)} SE(3) 变换。该网络作为扩散模型[4,5]训练,用来增量逆转一个手工构建的加噪过程,该过程逐步扰动物体点云,直至它们匹配条件分布
P O ( T ) ∼ p O ( T ) ( ⋅ ∣ P S ) , \text{P}_\text{O}^{(T)}\sim p_{\text{O}}^{(T)}(\cdot\mid \text{P}_\text{S}), PO(T)∼pO(T)(⋅∣PS),
该分布可在部署时高效采样,以在测试时刻开始去噪。
1. 用多步去噪来表示一次重排动作
我们把一次完整的“物体放到场景里”的动作 T \displaystyle T T 看成是一系列小的、可逆的刚体变换( S E ( 3 ) \mathrm{SE}(3) SE(3) 变换)的复合:
T = T 1 ∘ T 2 ∘ ⋯ ∘ T T . T \;=\; T_1 \circ T_2 \circ \cdots \circ T_T. T=T1∘T2∘⋯∘TT.
在离散时刻 t = 0 , 1 , 2 , … , T t=0,1,2,\dots,T t=0,1,2,…,T 上,引入一组中间状态的物体点云
P O ( t ) ∈ R N × 3 , P_O^{(t)}\;\in\;\mathbb{R}^{N\times3}, PO(t)∈RN×3,
其中:
- P O ( 0 ) P_O^{(0)} PO(0) 是最终想要的“正确放置”状态。
- P O ( T ) P_O^{(T)} PO(T) 是经过“加噪”后的初始状态,看起来像随机打乱过的版本。
关系写成:
P O ( 0 ) = T P O ( T ) . P_O^{(0)} \;=\; T \, P_O^{(T)}. PO(0)=TPO(T).
换句话说,如果你从一个随机的、有噪声的物体姿态 P O ( T ) P_O^{(T)} PO(T) 开始,依次应用这些小变换,就能一步步“还原”到符合场景要求的最终姿态 P O ( 0 ) P_O^{(0)} PO(0)。
2. 每一步由网络预测一个小变换
我们定义一个神经网络
f θ : R N × 3 ⏟ 当前物体点云 P O ( t ) × R M × 3 ⏟ 场景点云 P S ⟶ S E ( 3 ) , f_\theta : \underbrace{\mathbb{R}^{N\times3}}_{\text{当前物体点云 }P_O^{(t)}} \;\times\; \underbrace{\mathbb{R}^{M\times3}}_{\text{场景点云 }P_S} \;\longrightarrow\; \mathrm{SE}(3), fθ:当前物体点云 PO(t) RN×3×场景点云 PS RM×3⟶SE(3),
它的功能是:
- 读取当前的“被噪声扰动”物体点云 P O ( t ) P_O^{(t)} PO(t) 和固定的场景点云 P S P_S PS。
- 预测一个刚体变换 Δ T t = f θ ( P O ( t ) , P S ) \Delta T_t = f_\theta(P_O^{(t)},\,P_S) ΔTt=fθ(PO(t),PS),将 P O ( t ) P_O^{(t)} PO(t) 向更接近目标 P O ( 0 ) P_O^{(0)} PO(0) 的方向移动一点点。
这样,反向更新就写成:
P O ( t − 1 ) = Δ T t P O ( t ) , t = T , … , 1. P_O^{(t-1)} \;=\; \Delta T_t \, P_O^{(t)}, \quad t=T,\dots,1. PO(t−1)=ΔTtPO(t),t=T,…,1.
最终把所有 Δ T t \Delta T_t ΔTt 按顺序拼起来,就是完整的重排变换 T T T。
3. “加噪”过程与条件分布
在训练里,我们需要先定义一个手工构造的加噪过程,把干净的物体姿态 P O ( 0 ) P_O^{(0)} PO(0) 逐步扰动到 P O ( T ) P_O^{(T)} PO(T)。
这个加噪过程设计得越简单,在实际部署时就越容易反向采样。
通过这样的过程,我们得到了一个条件噪声分布
P O ( T ) ∼ p O ( T ) ( ⋅ ∣ P S ) . P_O^{(T)} \;\sim\; p_O^{(T)}\bigl(\cdot\mid P_S\bigr). PO(T)∼pO(T)(⋅∣PS).
也就是说,在给定场景 P S P_S PS 的情况下,可以高效地从 p O ( T ) p_O^{(T)} pO(T) 中抽样一个“高度扰动”的点云 P O ( T ) P_O^{(T)} PO(T),作为去噪的起点。
4. 训练:以扩散模型框架来学习去噪
整个网络 f θ f_\theta fθ 就是在扩散模型(DDPM/Score-based Model) 4 , 5 4,5 4,5的框架下训练的:
- 前向(加噪):从真实已放置的 P O ( 0 ) P_O^{(0)} PO(0) 出发,逐步注入随机扰动,得到一系列 P O ( t ) P_O^{(t)} PO(t)。
- 逆向(去噪):用 f θ f_\theta fθ 学习在每一步“向原始样本还原”应该做怎样的小变换。
损失函数通常是让 f θ f_\theta fθ 的预测 Δ T t \Delta T_t ΔTt 能尽量准确地抵消前向加噪所引入的扰动。
5. 部署时的去噪与重排
- 采样初始化:先根据场景 P S P_S PS 从噪声分布 p O ( T ) ( ⋅ ∣ P S ) p_O^{(T)}(\cdot\mid P_S) pO(T)(⋅∣PS) 抽一个 P O ( T ) P_O^{(T)} PO(T)。
- 迭代去噪:反向运行 t = T , … , 1 t=T,\dots,1 t=T,…,1,每一步用 f θ f_\theta fθ 预测一个小的 Δ T t \Delta T_t ΔTt,不断把物体点云拉回到合理位置。
- 得到最终输出:最后产出的 P O ( 0 ) P_O^{(0)} PO(0) 就是一个和场景对齐、满足几何关系的物体姿态;复合的小变换就是整体重排动作 T T T。
测试时评估
从 P O \text{P}_\text{O} PO 和 P S \text{P}_\text{S} PS 出发,我们采样 K K K 个初始变换 { T ^ k ( I ) } k = 1 K \{\hat{\text{T}}_k^{(I)}\}_{k=1}^K {T^k(I)}k=1K(初始旋转从 SO(3) \text{SO(3)} SO(3) 上的均匀网格抽取,平移在场景点云的边界框内均匀抽样),并将其应用于 P O \text{P}_\text{O} PO,生成初始物体点云
{ P ^ O , k ( I ) } k = 1 K , P ^ O , k ( I ) = T ^ k ( I ) P O . \{\hat{\text{P}}_{\text{O},k}^{(I)}\}_{k=1}^K,\quad \hat{\text{P}}_{\text{O},k}^{(I)}=\hat{\text{T}}_k^{(I)}\text{P}_\text{O}. {P^O,k(I)}k=1K,P^O,k(I)=T^k(I)PO.
1. 采样 K K K 个初始候选放置
初始变换的目的 在实际部署时,我们并不只从一个随机姿态开始,而是同时生成 K K K 个不同的“猜测”放置姿态,增加命中正确方案的概率。
如何采样
- 旋转:从 S O ( 3 ) \mathrm{SO}(3) SO(3)(所有可能的三维旋转)上取一个“均匀网格”上的 K K K 个样本。
- 平移:在场景点云 P S \mathrm{P}_S PS 的边界框(bounding box)内,均匀地随机采样 K K K 个平移向量。
- 合起来就是 K K K 个初始刚体变换:
{ T ^ k ( I ) } k = 1 K . \{\hat T_k^{(I)}\}_{k=1}^K. {T^k(I)}k=1K.
应用到物体点云 把每个 T ^ k ( I ) \hat T_k^{(I)} T^k(I) 作用到原始物体点云 P O P_O PO 上,得到 K K K 个“被打乱”的初始物体点云:
P ^ O , k ( I ) = T ^ k ( I ) P O , k = 1 , … , K . \hat P_{O,k}^{(I)} = \hat T_k^{(I)} \, P_O, \quad k=1,\dots,K. P^O,k(I)=T^k(I)PO,k=1,…,K.
这个 P O P_O PO是在执行重排前必须知道的、物体在地面(或其它初始位置)上的真实三维点云。
对于每个 K K K初始变换,我们执行 I I I 步更新(记 SE(3) \text{SE(3)} SE(3) 变换 T = ( R , t ) \text{T}=(\text{R},\text{t}) T=(R,t) 作用于三维点 x \text{x} x 为 Tx = Rx + t \text{Tx}=\text{Rx} + \text{t} Tx=Rx+t)。在第 i i i 次迭代时:
2. 多步迭代去噪更新
我们总共做 I I I 步迭代,每一步都用网络去“稍微修正”当前姿态。下面以第 i i i 步为例说明。
你一开始有 K K K 个“初始放置猜测” { T ^ k ( I ) } \{\hat T_k^{(I)}\} {T^k(I)}(每个都是一个刚体变换),然后要对每一个猜测连续做 I I I 步细化(更新)操作。
这里说的 “ S E ( 3 ) \mathrm{SE}(3) SE(3) 变换 T = ( R , t ) T=(R,t) T=(R,t)” 指的就是三维空间里的刚体运动,它由一个 3 × 3 3\times3 3×3 的旋转矩阵 R R R 和一个三维平移向量 t t t 组成。
当你把这样的变换 T T T 作用到一个三维点 x x x 上时,计算方式就是
T x = R x + t , T\,x \;=\; R\,x \;+\; t, Tx=Rx+t,
先用 R R R 把点 x x x 旋转,再加上平移 t t t。
所以“执行 I I I 步更新” 就是指:在第 i i i 步,你会计算一个小的刚体变换 Δ T ( i ) = ( R ( i ) , t ( i ) ) \Delta T^{(i)}=(R^{(i)},t^{(i)}) ΔT(i)=(R(i),t(i)),然后把它按上面的公式作用到当前点云上,把点云和累计的变换都更新一次,一共做 I I I 次,逐步把点云从“乱”变“整齐”。
-
计算去噪更新
T Δ ( i ) = T Δ R a n d f θ ( P ^ O ( i ) , P S , p o s _ e m b ( t ) ) , t = i _ t o _ t ( i ) (1) \text{T}_\Delta^{(i)} = \text{T}^{\mathrm{Rand}}_\Delta\;f_\theta\bigl(\hat{\text{P}}_\text{O}^{(i)},\,\text{P}_\text{S},\,\mathtt{pos\_emb}(t)\bigr),\quad t = \mathtt{i\_to\_t}(i) \tag{1} TΔ(i)=TΔRandfθ(P^O(i),PS,pos_emb(t)),t=i_to_t(i)(1)
2.1 预测去噪变换 T Δ ( i ) \,T_\Delta^{(i)} TΔ(i)
公式 (1) 写成:
T Δ ( i ) = T Δ R a n d f θ ( P ^ O ( i ) , P S , p o s _ e m b ( t ) ) , t = i _ t o _ t ( i ) . T_\Delta^{(i)} = T_\Delta^{\mathrm{Rand}}\;\, f_\theta\bigl(\hat P_O^{(i)},\,P_S,\,\mathtt{pos\_emb}(t)\bigr), \quad t = \mathtt{i\_to\_t}(i). TΔ(i)=TΔRandfθ(P^O(i),PS,pos_emb(t)),t=i_to_t(i).
f θ ( ⋅ ) f_\theta(\cdot) fθ(⋅)
- 是我们训练好的神经网络,输入是“当前的物体点云 P ^ O ( i ) \hat P_O^{(i)} P^O(i)”和“场景点云 P S P_S PS”,再加上一个时间步位置编码 p o s _ e m b ( t ) \mathtt{pos\_emb}(t) pos_emb(t)。
- 它输出一个 S E ( 3 ) \mathrm{SE}(3) SE(3) 变换,告诉我们“按哪种小位移+小旋转”能让点云更靠近最终、正确的放置状态。
位置编码 p o s _ e m b ( t ) \mathtt{pos\_emb}(t) pos_emb(t)
- 用正弦-余弦函数把离散的“去噪步数” t t t 映射到一个向量,帮助网络分辨“现在是在第几步”上工作。
映射函数 i _ t o _ t ( i ) \mathtt{i\_to\_t}(i) i_to_t(i)
- 网络只在有限的离散时间 t = 1 , 2 , … , 5 t=1,2,\dots,5 t=1,2,…,5 上训练过,但我们可能想跑更多次迭代 i ≫ 5 i\gg5 i≫5。
- 所以引入一个映射 i ↦ t i\mapsto t i↦t,把任意迭代索引 i i i 对应到网络训练过的“时间步” t t t 上(见论文附录 A3 的具体规则)。
随机扰动 T Δ R a n d T_\Delta^{\mathrm{Rand}} TΔRand
- 在纯粹靠网络预测的 S E ( 3 ) \mathrm{SE}(3) SE(3) 变换前,再乘上一个小的随机变换。
- 这相当于给去噪过程加了“噪声项”,类似于“随机朗之万动力学”中的随机力,能让不同样本“跑”到不同的多模态解附近,增强多样性。
- 随着迭代推进( i → 0 i\to0 i→0),这个随机扰动会逐渐缩小,最终趋近于单位变换(即不再加扰动)。
-
更新整体变换与点云
T ^ ( i − 1 ) = T Δ ( i ) T ^ ( i ) P ^ O ( i − 1 ) = T Δ ( i ) P ^ O ( i ) . (2) \hat{\text{T}}^{(i-1)} = \text{T}_\Delta^{(i)}\,\hat{\text{T}}^{(i)}\qquad \hat{\text{P}}_\text{O}^{(i-1)} = \text{T}_\Delta^{(i)}\,\hat{\text{P}}_\text{O}^{(i)}. \tag{2} T^(i−1)=TΔ(i)T^(i)P^O(i−1)=TΔ(i)P^O(i).(2)
更新 T Δ ( i ) \text{T}_\Delta^{(i)} TΔ(i) 由将模型 f θ f_θ fθ 预测的去噪变换与从一个迭代条件下的正态分布中采样的扰动变换 T Δ Rand \text{T}^{\text{Rand}}_{\Delta} TΔRand 相乘构成,该分布在 i → 0 i→0 i→0 时收敛到确定性生成单位变换。在去噪过程中, T Δ Rand \text{T}^{\text{Rand}}_{\Delta} TΔRand 帮助每个样本收敛到不同的多模态姿态盆地(类似于随机朗之万动力学[11]中的扰动项)。函数 p o s _ e m b \mathtt{pos\_emb} pos_emb 表示正弦位置嵌入。由于 f θ f_θ fθ 只在有限的 t t t 值(即 t = 1 , … , 5 t=1,…,5 t=1,…,5)上训练,但我们可能希望对式 (2) 中的更新执行更多步,因此我们使用映射函数 i → t i→t i→t 将迭代次数 i i i 转换到模型已训练过的时间步 t t t。有关外部噪声调度和 i → t i→t i→t 映射的详细信息,请参见附录 A3。
2.2 更新姿态与累计变换
公式 (2):
T ^ ( i − 1 ) = T Δ ( i ) T ^ ( i ) , P ^ O ( i − 1 ) = T Δ ( i ) P ^ O ( i ) . \hat T^{(i-1)} = T_\Delta^{(i)} \,\hat T^{(i)},\qquad \hat P_O^{(i-1)} = T_\Delta^{(i)}\, \hat P_O^{(i)}. T^(i−1)=TΔ(i)T^(i),P^O(i−1)=TΔ(i)P^O(i).
T ^ ( i ) \hat T^{(i)} T^(i)
- 表示从最初采样到第 i i i 步这一串累积下来的整体变换。
累积更新
- 把本步的去噪变换 T Δ ( i ) T_\Delta^{(i)} TΔ(i) 乘到当前的整体变换 T ^ ( i ) \hat T^{(i)} T^(i) 上,得到新的整体变换 T ^ ( i − 1 ) \hat T^{(i-1)} T^(i−1)。
- 再把这个小变换作用到点云上,得到更新后的物体点云 P ^ O ( i − 1 ) \hat P_O^{(i-1)} P^O(i−1)。
每迭代一步,物体点云就会往“场景中正确摆放”的目标再靠近一点。
通常,我们在 K K K 个解 { T ^ k ( 0 ) } k = 1 K \{\hat{\text{T}}_k^{(0)}\}_{k=1}^K {T^k(0)}k=1K 中搜索一个既可执行又满足所有其他约束(例如碰撞自由轨迹)的方案。然而,我们也需要在假设没有其他约束的情况下选出一个单一输出进行执行,并可能拒绝那些无法完成任务的“局部最优”解。为此,我们使用一个独立的分类器 h ϕ h_ϕ hϕ 对预测姿态评分(即 s k = h ϕ ( P O k ( 0 ) , P S ) s_k = h_ϕ(\text{P}_{\text{O}_k}^{(0)},\text{P}_\text{S}) sk=hϕ(POk(0),PS), s ∈ [ 0 , 1 ] s∈[0,1] s∈[0,1]),并选择得分最高的索引
k e x e c = a r g m a x { s k } k = 1 K k_{exec} = \mathtt{argmax} \{s_k\}_{k=1}^K kexec=argmax{sk}k=1K
进行执行(见附录 A7,结果表明用 h ϕ h_ϕ hϕ 评分优于例如均匀采样等方法)。
3. 最终候选与执行选择
得到 K K K 个末态
- 对每个初始候选,都执行完 I I I 步去噪后,会得到一组最终变换和最终点云: { T ^ k ( 0 ) , P ^ O , k ( 0 ) } k = 1 K \{\hat T_k^{(0)},\,\hat P_{O,k}^{(0)}\}_{k=1}^K {T^k(0),P^O,k(0)}k=1K。
可执行性与单一输出
部分候选可能会因为机器人臂的可达性、碰撞检测等失败;但也可能多个方案都合法。
为了在“假设无其他外部约束”的情况下,还能挑出一个最好的方案,论文使用了一个独立的评分器:
s k = h ϕ ( P ^ O , k ( 0 ) , P S ) ∈ [ 0 , 1 ] . s_k = h_\phi\bigl(\hat P_{O,k}^{(0)},\,P_S\bigr)\,\in[0,1]. sk=hϕ(P^O,k(0),PS)∈[0,1].
最后选出分数最高的下标 k exec = arg max k s k , k_{\text{exec}} = \arg\max_k s_k, kexec=argkmaxsk, 把对应的 T ^ k exec ( 0 ) \hat T_{k_{\text{exec}}}^{(0)} T^kexec(0) 交给机器人去执行。
小结
- 并行多候选:先采 K K K 个不同的初始姿态,保证覆盖更多可能。
- 迭代去噪:每步由网络预测的“小变换”加上随机扰动,不断逼近正确放置。
- 多模态与分支:随机扰动帮助不同样本收敛到不同的“姿态盆地”,实现输出多样性。
- 评分与执行:用一个独立分类器给每个最终候选打分,挑最有把握、最可行的那一个来执行。
训练
给定数据集样本 ( P O , P S ) (\text{P}_\text{O},\text{P}_\text{S}) (PO,PS),我们以最终“放置”物体点云 P O ( 0 ) = P O \text{P}_\text{O}^{(0)}=\text{P}_\text{O} PO(0)=PO 和随机采样的时间步 t ∈ [ 1 , T ] t∈[1,T] t∈[1,T]开始。然后我们从一个时间步条件分布(具有适当缩放方差)中获取扰动变换 T noise ( t ) \text{T}_{\text{noise}}^{(t)} Tnoise(t),并创建带噪点云 P O ( t ) = T noise ( t ) P O \text{P}_\text{O}^{(t)}=\text{T}_{\text{noise}}^{(t)}\text{P}_\text{O} PO(t)=Tnoise(t)PO。
Q:这句话中 “ P O ( 0 ) = P O \text{P}_\text{O}^{(0)}=\text{P}_\text{O} PO(0)=PO”。我理解的意思 P O ( 0 ) \text{P}_\text{O}^{(0)} PO(0)不应该等于 P O \text{P}_\text{O} PO。 P O ( 0 ) \text{P}_\text{O}^{(0)} PO(0)是物体应该放在书架中的位置, P O \text{P}_\text{O} PO则应该是物体初始在地上的位置。我理解的有错误吗?
A:你的理解没错——在 部署(inference) 阶段, P O \;P_O PO 确实是“物体在地上”或其它初始观测到的点云,而你最终想要把它放到书架上,这时目标点云应该记作 P O ( 0 ) P_O^{(0)} PO(0)。不过在这一段描述中,作者是在讲 训练 流程,他们约定:
- 训练集中给定的 P O P_O PO 就是 “示范中物体已正确放置” 的那个点云,也就是你理解的 P O ( 0 ) P_O^{(0)} PO(0)——目标姿态。
- 接着他们从这个“干净的”放置点云 P O P_O PO 开始,加噪得到不同 P O ( t ) \;P_O^{(t)} PO(t),然后训练网络去预测如何一步步把它“去噪”回 P O P_O PO(也就是 P O ( 0 ) P_O^{(0)} PO(0))。
所以在训练里,他们直接写成
P O ( 0 ) = P O P_O^{(0)} = P_O PO(0)=PO
表示“第 0 步的干净点云”就等于训练集里的 P O P_O PO。
换个角度看训练 vs 推理
训练阶段 推理/部署阶段 P O P_O PO 目标——示范中已放好的物体点云 初始——相机/传感器观测到的物体点云(地面或其它地方) 噪声标号 t t t 从 t = 0 t=0 t=0(干净)到 t = T t=T t=T(强噪声) 从 t = T t=T t=T(由采样得到的初始打乱)向 t = 0 t=0 t=0 迭代去噪 训练目标 让网络学会把 P O ( t ) → P O ( 0 ) P_O^{(t)}\to P_O^{(0)} PO(t)→PO(0) 用学到的网络把观测的 P O ( T ) P_O^{(T)} PO(T) 逐步去噪到 P O ( 0 ) P_O^{(0)} PO(0)
- 训练时:你已有“正确放置”点云 P O P_O PO,所以直接令它等同于 P O ( 0 ) P_O^{(0)} PO(0)。
- 推理时:你反而要从观测到的 初始 P O P_O PO(这时它相当于 P O ( T ) P_O^{(T)} PO(T))开始,最终恢复到同样意义上的 P O ( 0 ) P_O^{(0)} PO(0)。
任务是预测一次去噪步骤所需的变换 T ^ Δ ( t ) = f θ ( P O ( t ) , P S , p o s _ e m b ( t ) ) \hat{\text{T}}_Δ^{(t)}=f_θ(\text{P}_\text{O}^{(t)},\text{P}_\text{S},\mathtt{pos\_emb}(t)) T^Δ(t)=fθ(PO(t),PS,pos_emb(t))。网络参数 θ θ θ 通过最小化预测 T ^ Δ ( t ) \hat{\text{T}}_Δ^{(t)} T^Δ(t) 与真实目标 T Δ , GT ( t ) \text{T}_{Δ,\text{GT}}^{(t)} TΔ,GT(t) 之间的损失来训练。该损失由均方位移误差、测地旋转距离误差[12,13]以及应用预测变换后得到的点云与真实下一个点云之间的Chamfer距离组成。
1. 训练目标概览
我们要让网络学会,从“带噪声”的物体点云逐步去噪,恢复到干净、正确放置的点云。为了做到这一点,训练流程包括:
- 随机挑一个时间步 t ∈ { 1 , … , T } t\in\{1,\dots,T\} t∈{1,…,T}。
- 人为给干净的点云加噪,得到“带噪点云” P O ( t ) P_O^{(t)} PO(t)。
- 让网络 f θ f_\theta fθ 读入 ( P O ( t ) , P S ) (P_O^{(t)},P_S) (PO(t),PS)(再加一个位置编码),预测一个小的变换 T ^ Δ ( t ) \hat T_\Delta^{(t)} T^Δ(t),希望它能把带噪点云“拉回”一小步,朝向干净点云的方向。
- 通过比较网络预测 T ^ Δ ( t ) \hat T_\Delta^{(t)} T^Δ(t) 和“真实应该做的那一步” T Δ , G T ( t ) T^{(t)}_{\Delta,\mathrm{GT}} TΔ,GT(t) 之间的误差,来更新网络参数 θ \theta θ。
2. 如何“给点云加噪”
记最终正确放置的点云为
P O ( 0 ) = P O . P_O^{(0)} = P_O. PO(0)=PO.
我们预先定义了一个手工构造的噪声变换序列分布(和扩散模型里常见的噪声调度类似),在时间步 t t t 上,随机抽取
T n o i s e ( t ) ∼ (某个条件分布,带有随 t 扩散的方差) . T_{\mathrm{noise}}^{(t)}\sim\text{(某个条件分布,带有随 }t\text{ 扩散的方差)}. Tnoise(t)∼(某个条件分布,带有随 t 扩散的方差).
用这个刚体变换把点云打扰一下:
P O ( t ) = T n o i s e ( t ) P O . P_O^{(t)} = T_{\mathrm{noise}}^{(t)}\,P_O. PO(t)=Tnoise(t)PO.
这样 t t t 越大、扰动越强烈; t t t 越小, P O ( t ) P_O^{(t)} PO(t) 越接近日常要恢复的目标 P O ( 0 ) P_O^{(0)} PO(0)。
一个自然的目标是预测扰动的逆,即 T Δ , GT ( t ) = T noise , inv ( t ) = [ T noise ( t ) ] − 1 \text{T}_{Δ,\text{GT}}^{(t)}=\text{T}_{\text{noise},\text{inv}}^{(t)}=[\text{T}_{\text{noise}}^{(t)}]^{-1} TΔ,GT(t)=Tnoise,inv(t)=[Tnoise(t)]−1 ,以鼓励恢复原始样本。然而,由于扰动幅度随时间步而变化,这要求对不同时间步输出不同尺度的预测。在神经网络的监督学习中,为了最小化样本间梯度幅度的大幅波动,建议保持输入和输出信号幅度一致[14]。因此,一种替代方法是鼓励网络在原始样本方向上采取更短的“单位步长”。我们通过将完整的逆扰动平均插值为 { T interp ( s ) } s = 1 t = i n t e r p ( T noise, inv ( t ) , t ) \{\text{T}_{\text{interp}}^{(s)}\}_{s=1}^t=\mathtt{interp}(\text{T}_{\text{noise, inv}}^{(t)},t) {Tinterp(s)}s=1t=interp(Tnoise, inv(t),t),并训练网络预测该插值集中的一个区间,即 T Δ , GT ( t ) = [ T interp ( t − 1 ) ] − 1 T interp ( t ) \text{T}^{(t)}_{Δ,\text{GT}}=[\text{T}_{\text{interp}}^{(t-1)}]^{-1}\text{T}_{\text{interp}}^{(t)} TΔ,GT(t)=[Tinterp(t−1)]−1Tinterp(t)(详见附录A2和A7)。
3. 网络要预测哪一步“去噪”?
网络输出:
T ^ Δ ( t ) = f θ ( P O ( t ) , P S , p o s _ e m b ( t ) ) . \hat T_\Delta^{(t)} = f_\theta\bigl(P_O^{(t)},\,P_S,\,\mathtt{pos\_emb}(t)\bigr). T^Δ(t)=fθ(PO(t),PS,pos_emb(t)).
这是一个 S E ( 3 ) \mathrm{SE}(3) SE(3) 变换,期望能“补偿”掉部分噪声,让点云往干净状态靠近。
真正的“地面真值”是什么?
最简单想法:理想上“应该”做的去噪变换就是噪声的逆
T Δ , G T ( t ) = [ T n o i s e ( t ) ] − 1 . T_{\Delta,\mathrm{GT}}^{(t)} = \bigl[T_{\mathrm{noise}}^{(t)}\bigr]^{-1}. TΔ,GT(t)=[Tnoise(t)]−1.
但由于不同 t t t 步的噪声幅度差异很大,直接让网络“输出全量逆变换”会导致它要同时学习大尺度和小尺度的目标,梯度尺度差异大,不利于训练稳定。
4. 插值逆扰动:让网络只学“小步子”
解决办法:把一次完整的逆扰动分成 t t t 小步平均插值:
{ T i n t e r p ( s ) } s = 1 t = i n t e r p ( T n o i s e , i n v ( t ) , t ) , \{\;T_{\mathrm{interp}}^{(s)}\}_{s=1}^t = \mathtt{interp}\bigl(T_{\mathrm{noise,inv}}^{(t)},\,t\bigr), {Tinterp(s)}s=1t=interp(Tnoise,inv(t),t),
这样每一步都只是“原始逆变换”的 1 / t 1/t 1/t 缩放版。
T noise,inv ( t ) = [ T noise ( t ) ] − 1 . T_{\text{noise,inv}}^{(t)} = \bigl[T_{\text{noise}}^{(t)}\bigr]^{-1}. Tnoise,inv(t)=[Tnoise(t)]−1.
{ T i n t e r p ( s ) } s = 0 t , T i n t e r p ( 0 ) = I d , T i n t e r p ( t ) = T noise,inv ( t ) . \{T_{\mathrm{interp}}^{(s)}\}_{s=0}^t, \quad T_{\mathrm{interp}}^{(0)}=\mathrm{Id},\; T_{\mathrm{interp}}^{(t)}=T_{\text{noise,inv}}^{(t)}. {Tinterp(s)}s=0t,Tinterp(0)=Id,Tinterp(t)=Tnoise,inv(t).
T i n t e r p ( t ) = [ T noise ( t ) ] − 1 T_{\mathrm{interp}}^{(t)} = \bigl[T_{\text{noise}}^{(t)}\bigr]^{-1} Tinterp(t)=[Tnoise(t)]−1
网络学习的标准去噪目标就改成相邻两步之间的“短距离”变换:
T Δ , G T ( t ) = [ T i n t e r p ( t − 1 ) ] − 1 T i n t e r p ( t ) . T_{\Delta,\mathrm{GT}}^{(t)} = \bigl[T_{\mathrm{interp}}^{(t-1)}\bigr]^{-1} \;T_{\mathrm{interp}}^{(t)}. TΔ,GT(t)=[Tinterp(t−1)]−1Tinterp(t).
这样,无论 t t t 大小,网络的目标都是“单位步长”量级,输出信号的尺度保持一致,训练更稳定。
这里可以用变换矩阵的思想进行理解
对于成功分类器,我们生成正负重排示例:正例使用最终示范点云 P O ( 0 ) \text{P}_\text{O}^{(0)} PO(0) ,负例通过对 P O ( 0 ) \text{P}_\text{O}^{(0)} PO(0) 进行多样化扰动采样获得。分类器权重 ϕ ϕ ϕ(独立于 θ θ θ )通过最小化预测成功概率与真实成功标签之间的二元交叉熵损失来训练。
5. 损失函数构成
首先:
预测的去噪变换:
T ^ Δ ( t ) = ( R ^ ( t ) , t ^ ( t ) ) , \hat T_\Delta^{(t)} = (\,\hat R^{(t)},\,\hat t^{(t)}), T^Δ(t)=(R^(t),t^(t)),
其中 R ^ ( t ) ∈ S O ( 3 ) \hat R^{(t)}\in\mathrm{SO}(3) R^(t)∈SO(3) 是预测的旋转矩阵, t ^ ( t ) ∈ R 3 \hat t^{(t)}\in\mathbb R^3 t^(t)∈R3 是预测的平移向量。
“地面真值”变换:
T Δ , G T ( t ) = ( R G T ( t ) , t G T ( t ) ) . T_{\Delta,\mathrm{GT}}^{(t)} = \bigl(R_\mathrm{GT}^{(t)},\,t_\mathrm{GT}^{(t)}\bigr). TΔ,GT(t)=(RGT(t),tGT(t)).
训练时,我们最小化网络预测去噪变换 T ^ Δ ( t ) \hat T_\Delta^{(t)} T^Δ(t) 与“地面真值” T Δ , G T ( t ) T_{\Delta,\mathrm{GT}}^{(t)} TΔ,GT(t) 之间的综合误差,由三部分组成:
5.1 平移的均方误差(MSE in translation)只比较两个 3D 平移向量:
L trans = ∥ t ^ ( t ) − t G T ( t ) ∥ 2 = ∑ i = 1 3 ( t ^ i ( t ) − t G T , i ( t ) ) 2 . L_{\text{trans}} = \bigl\|\hat t^{(t)} \;-\; t_\mathrm{GT}^{(t)}\bigr\|^2 = \sum_{i=1}^3\bigl(\hat t^{(t)}_i - t_{\mathrm{GT},i}^{(t)}\bigr)^2. Ltrans= t^(t)−tGT(t) 2=i=1∑3(t^i(t)−tGT,i(t))2.
5.2 旋转的测地(geodesic)距离误差
在旋转群 S O ( 3 ) \mathrm{SO}(3) SO(3) 上,两个旋转矩阵之间的“最短角度”可以用以下公式计算:
L rot = d S O ( 3 ) ( R ^ ( t ) , R G T ( t ) ) = ∥ log ( R G T ( t ) T R ^ ( t ) ) ∥ F 2 , L_{\text{rot}} = d_{\mathrm{SO}(3)}\bigl(\hat R^{(t)},\,R_\mathrm{GT}^{(t)}\bigr) = \bigl\|\log\bigl(R_\mathrm{GT}^{(t)\,T}\,\hat R^{(t)}\bigr)\bigr\|_F^2, Lrot=dSO(3)(R^(t),RGT(t))= log(RGT(t)TR^(t)) F2,
这里
- log ( ⋅ ) \log(\cdot) log(⋅) 是矩阵对数(把旋转矩阵映射到李代数 s o ( 3 ) \mathfrak{so}(3) so(3))。
- ∥ ⋅ ∥ F \|\cdot\|_F ∥⋅∥F 是 Frobenius 范数。
等价地,你也常见到用“旋转角度”表示:
θ = arccos ( tr ( R G T T R ^ ) − 1 2 ) , L rot = θ 2 . \theta = \arccos\!\Bigl(\tfrac{\operatorname{tr}\bigl(R_\mathrm{GT}^{\,T}\hat R\bigr)-1}{2}\Bigr), \quad L_{\text{rot}} = \theta^2. θ=arccos(2tr(RGTTR^)−1),Lrot=θ2.
5.3 Chamfer 距离(点云对齐误差)
令
X = { T ^ Δ ( t ) x ∣ x ∈ P O ( t ) } 和 Y = P O ( t − 1 ) , X = \bigl\{\hat T_\Delta^{(t)}\,x\mid x\in P_O^{(t)}\bigr\} \quad\text{和}\quad Y = P_O^{(t-1)}, X={T^Δ(t)x∣x∈PO(t)}和Y=PO(t−1),
即 X X X 是用预测变换作用后的点云, Y Y Y 是“真实”去噪一步后的点云。Chamfer 距离定义为
L Chamfer = ∑ x ∈ X min y ∈ Y ∥ x − y ∥ 2 + ∑ y ∈ Y min x ∈ X ∥ y − x ∥ 2 . L_{\text{Chamfer}} = \sum_{x\in X}\min_{y\in Y}\|x-y\|^2 \;+\; \sum_{y\in Y}\min_{x\in X}\|y-x\|^2. LChamfer=x∈X∑y∈Ymin∥x−y∥2+y∈Y∑x∈Xmin∥y−x∥2.
它衡量了两组点云在空间中的重合程度,保证网络不仅学会对齐中心和朝向,还要对齐形状细节。
5.4 总损失
通常就是三者的加权和:L = λ trans L trans + λ rot L rot + λ Chamfer L Chamfer , L = \lambda_{\text{trans}}\,L_{\text{trans}} \;+\; \lambda_{\text{rot}}\,L_{\text{rot}} \;+\; \lambda_{\text{Chamfer}}\,L_{\text{Chamfer}}, L=λtransLtrans+λrotLrot+λChamferLChamfer,
其中各 λ \lambda λ 控制不同项的重要性。
6. 成功分类器的训练
除了主去噪网络,我们还要训练一个独立的二分类网络 h ϕ h_\phi hϕ,用来给最后的重排结果打“可执行性”分数。训练过程如下:
- 正例:用真实的、示范中的最终点云 P O ( 0 ) P_O^{(0)} PO(0)(即无噪声的正确放置)。
- 负例:对同一正确点云 P O ( 0 ) P_O^{(0)} PO(0) 添加各种随机扰动(多样化采样),生成一批“不正确的”放置点云。
- 用二元交叉熵损失,让 h ϕ h_\phi hϕ 学会区分“好放置”(标签 1)和“坏放置”(标签 0)。
总结
- 加噪:先把干净点云 P O P_O PO 按 时间步 t t t 随机扰动得到 P O ( t ) P_O^{(t)} PO(t)。
- 去噪目标:网络学会预测一个“小步长”的逆变换,把点云往前一步恢复。
- 插值设计:把全逆变换拆成 t t t 段插值,保持每一步目标尺度一致,训练更平滑。
- 综合损失:平移 MSE、旋转测地误差、Chamfer 距离三部分共同优化。
- 分类器:独立训练一个二分类网络,给最终预测打分,挑出最可执行的方案。
3.2 架构
我们使用 Transformer [15] 来处理点云并进行姿态预测。之所以选用 Transformer,是因为它能够 (i) 识别物体与场景中重要的几何部分,以及 (ii) 捕捉物体与场景重要部分之间的关系。
1. 为什么选 Transformer?
自注意力优势
- 识别重要几何部分:Transformer 的自注意力机制(self-attention)能让网络学会“从一大堆点里挑重点”,比如场景中的桌面边缘、书架的插槽边缘等。
- 捕捉跨对象关系:它还能让网络把“物体”点和“场景”点之间的对应关系建立起来(cross-attention),例如“杯子的底面要靠在桌面上”。
首先,对 P O \text{P}_\text{O} PO 和 P O \text{P}_\text{O} PO 进行分词(tokenize)以获得输入特征。这一步可以通过点云编码器[16, 17] 完成,但我们简单地对点云下采样,并在每个点上附加一个 one-hot 特征,用以指示该点属于物体还是场景。
2. 如何把点云“分词”(tokenize)?
下采样
- 原始点云可能有几十万点,直接送入会太重。
- 于是先“抽稀”到一个可控数量,比如几千个点。
附加 one-hot 标记
对每个保留下来的点,除了 ( x , y , z ) (x,y,z) (x,y,z) 三维坐标,还拼接一个长度为 2 的 one-hot 向量:
- [ 1 , 0 ] [1,\,0] [1,0] 表示“这是物体点”;
- [ 0 , 1 ] [0,\,1] [0,1] 表示“这是场景点”。
这样每个“token” 就是一个 R 5 \mathbb R^5 R5(或更多维)向量,网络知道这是“哪个”点。
接着,将这些输入 token 输入到 Transformer 的编码器和解码器中:编码器对场景点云执行自注意力(self-attention),解码器在场景与物体之间执行交叉注意力(cross-attention)。这样会为每个点生成输出特征,再通过均值池化(mean-pool)得到全局特征向量。
3. 编码-解码架构
编码器(Encoder)
只对场景点云做自注意力:
- 输入是所有“场景”点的 token。
- 自注意力层让网络在场景内部识别结构轮廓、边界、支撑面等。
解码器(Decoder)
跨注意力(Cross-Attention):
- 查询(query)来自“物体”点的 token,键值(key/value)来自编码器输出的“场景”特征。
- 这样物体点可以“看”到场景中哪些位置最适合它们贴合、放置,比如杯底需要对齐到桌面某个平面。
生成全局特征向量
- 解码器的最终输出会是每个点对应一个特征向量。
- 对这些向量做均值池化(mean-pool),聚合成一个全局上下文向量 ∈ R d \in\mathbb R^d ∈Rd,代表“整个物体–场景”的综合信息。
将全局特征传递到一组 MLP,以预测旋转 R ∈ SO ( 3 ) \text{R}∈\text{SO}(3) R∈SO(3) 和平移 t ∈ R 3 \text{t}∈\mathbb{R}^3 t∈R3。与[10, 18] 中的方法类似,我们通过预测向量 a ∈ R 3 a∈\mathbb{R}^3 a∈R3 和 b ∈ R 3 b∈\mathbb{R}^3 b∈R3 来表示旋转,先提取 b b b 中与 a a a 正交的分量,并归一化得到 a ^ \hat{a} a^ 和 b ^ \hat{b} b^,再计算叉乘
c ^ = a ^ × b ^ \hat{c} = \hat{a} × \hat{b} c^=a^×b^
最后构造
R = [ a ^ b ^ c ^ ] \text{R} = [\hat{a}\quad \hat{b}\quad \hat{c}] R=[a^b^c^]
以形成旋转矩阵。
4. 从全局特征到位姿预测
平移预测 t ∈ R 3 \displaystyle t\in\mathbb R^3 t∈R3
- 用一个小型的 MLP(多层感知机)把全局向量映射到一个 3 维平移向量。
旋转预测 R ∈ S O ( 3 ) \displaystyle R\in\mathrm{SO}(3) R∈SO(3)
直接输出旋转矩阵很难保证正交性和行列式 = +1。于是用“两个向量”参数化技巧:
网络先预测两个任意向量 a , b ∈ R 3 a,b\in\mathbb R^3 a,b∈R3。
把 b b b 在剩余空间里去掉投影到 a a a 上的成分,得到正交向量
b → b ^ 使得 b ^ ⊥ a . b \;\to\; \hat b \quad\text{使得}\quad \hat b\perp a. b→b^使得b^⊥a.
分别归一化 a a a 和 b ^ \hat b b^:
a ^ = a ∥ a ∥ , b ^ = b ^ ∥ b ^ ∥ . \hat a = \frac{a}{\|a\|},\quad \hat b = \frac{\hat b}{\|\hat b\|}. a^=∥a∥a,b^=∥b^∥b^.
用叉乘得到第三列向量
c ^ = a ^ × b ^ . \hat c = \hat a \times \hat b. c^=a^×b^.
最终把三个正交单位向量拼成旋转矩阵
R = [ a ^ b ^ c ^ ] . R = [\,\hat a\;\;\hat b\;\;\hat c\,]. R=[a^b^c^].
这样既能保证 R R R 真正属于 S O ( 3 ) \mathrm{SO}(3) SO(3),又让网络学习和优化更容易。
为了引入迭代步 t t t,我们将 p o s _ e m b ( t ) \mathtt{pos\_emb}(t) pos_emb(t) 作为一个全局 token 输入到解码器,并将其加到全局输出特征中。在预测成功概率时,我们对点云使用相同的 Transformer 架构,但输出一个标量并接一个 sigmoid。
5. 引入迭代位置编码 p o s _ e m b ( t ) \mathtt{pos\_emb}(t) pos_emb(t)
- 我们在多步去噪时,有一个当前迭代步 t ∈ [ 1 , T ] t\in[1,T] t∈[1,T]。
- 把 p o s _ e m b ( t ) \mathtt{pos\_emb}(t) pos_emb(t)(常见的正弦-余弦位置编码)作为一个额外的“全局 token” 注入到解码器里。
- 它会被加到全局池化后的特征向量上,让最终的 MLP 知道“现在是第几步”,从而在不同步骤输出不同尺度的去噪变换。
6. 成功分类器 h ϕ h_\phi hϕ
跟姿态网络用同样的 Transformer 架构,只是最后输出不是 ( R , t ) (R,t) (R,t),而是一个标量 s ∈ [ 0 , 1 ] s\in[0,1] s∈[0,1]:
s = σ ( M L P ( m e a n _ p o o l ( D e c o d e r _ o u t ) ) ) , s = \sigma\bigl(\mathrm{MLP}\bigl(\mathrm{mean\_pool}(\mathrm{Decoder\_out})\bigr)\bigr), s=σ(MLP(mean_pool(Decoder_out))),
其中 σ \sigma σ 是 sigmoid。
这个分数 s s s 表示“放置这次预测的姿态是否有高成功概率”,后续用来在多个候选中排序和筛选。
小结
- 点云下采样 + one-hot → 得到“物体/场景” token。
- Encoder 只看场景;Decoder 在物体和场景之间做 cross-attention。
- 全局特征 → MLP → 平移 t t t 和旋转矩阵 R R R(用 two-vector → orthonormal → cross-product 参数化)。
- pos_emb 注入,让多步迭代的网络分辨不同的去噪阶段。
- 独立分类器 用同样结构输出一个成功概率标量。
3.3 局部条件
上述方法在变换回归中同时以物体和场景为条件。然而,遥远的全局信息可能成为干扰,降低精度和泛化能力。先前工作也注意到这一点,并建议在输入观测上采用硬注意力机制,例如裁剪任务相关区域,以通过忽略无关干扰提升泛化 [8,9]。
基于这种直觉,我们通过裁剪 P S \text{P}_\text{S} PS 来修改场景点云,只保留靠近当前物体点云 P O ( i ) \text{P}_\text{O}^{(i)} PO(i) 的点。我们的修改后姿态预测因此变为
T ^ Δ ( i ) = f θ ( P ^ O ( i ) , P ˉ S ( i ) , p o s _ e m b ( i _ t o _ t ( i ) ) ) \hat{\text{T}}_{\Delta}^{(i)} = f_θ\bigl(\,\hat{\text{P}}_\text{O}^{(i)},\,\bar{\text{P}}_\text{S}^{(i)},\,\mathtt{pos\_emb}(\mathtt{i\_to\_t}(i))\bigr) T^Δ(i)=fθ(P^O(i),PˉS(i),pos_emb(i_to_t(i)))
其中 P ˉ S ( i ) = c r o p ( P ^ O ( i ) , P S ) \bar{\text{P}}_\text{S}^{(i)} = \mathtt{crop}\bigl(\hat{\text{P}}_\text{O}^{(i)},\text{P}_\text{S}\bigr) PˉS(i)=crop(P^O(i),PS)。函数 c r o p \mathtt{crop} crop 返回 P S \text{P}_\text{S} PS 中位于以 P ^ O ( i ) \hat{\text{P}}_\text{O}^{(i)} P^O(i) 均值为中心的轴对齐包围盒内的点。我们尝试了一种返回固定大小裁剪的 crop 变体,以及另一种根据迭代变量 i i i 调整裁剪大小的变体(裁剪尺寸在初始迭代时较大,并在后续迭代中逐渐减小)。
1. 问题动机:全局信息的干扰
- 在前面的方法里,网络每一步都把整个场景点云 P S \,P_S PS 和整个物体点云 P O ( i ) \,P_O^{(i)} PO(i) 一起送进去预测下一个去噪变换。
- 但当场景很大、很复杂时,离物体很远的点(例如房间的另一端、天花板、远处的家具)对“把物体放到合适位置”并没有帮助,反而可能“干扰”网络,让它注意力分散、精度下降。
2. 方案简介:只看“局部”——裁剪场景点云
核心思想:只保留与当前物体姿态最相关的那一小块场景点云,让网络“聚焦”在物体附近的环境细节上。
具体做法:在每一次迭代 i i i 里,
先计算当前物体点云 P ^ O ( i ) \hat P_O^{(i)} P^O(i) 的中心位置(比如取所有点坐标的平均值)。
在整个场景点云 P S P_S PS 中,裁剪出一个“轴对齐包围盒”(Axis-Aligned Bounding Box, AABB):
P ˉ S ( i ) = c r o p ( P ^ O ( i ) , P S ) \bar P_S^{(i)} = \mathtt{crop}\bigl(\hat P_O^{(i)},\,P_S\bigr) PˉS(i)=crop(P^O(i),PS)
这个包围盒的中心就是物体的中心,大小可以预先设定,或者根据迭代步动态调整。
只把这块“局部”点云 P ˉ S ( i ) \bar P_S^{(i)} PˉS(i) 跟物体点云一起送入网络预测:
T ^ Δ ( i ) = f θ ( P ^ O ( i ) , P ˉ S ( i ) , p o s _ e m b ( … ) ) . \hat T_\Delta^{(i)} = f_\theta\bigl(\,\hat P_O^{(i)},\;\bar P_S^{(i)},\;\mathtt{pos\_emb}(\dots)\bigr). T^Δ(i)=fθ(P^O(i),PˉS(i),pos_emb(…)).
3. 两种裁剪策略
固定大小裁剪
- 每一次迭代都截取一个同样尺寸的立方体区域(例如边长 0.5 m × 0.5 m × 0.5 m),只保留盒子内的场景点。
- 优点:实现简单,超参数少。
- 缺点:可能在最初迭代时“范围太小”或“范围太大”——比如刚开始物体离目标还远,用小盒子可能看不见目标台面边缘;但一旦接近,用大盒子又会带入无关点。
渐进式缩小裁剪
随着迭代 i i i 从初始到结束,裁剪盒子逐步变小:
- 早期迭代:盒子很大,让网络看到更广的场景,以便定位“要放到哪个大概区域”。
- 中后期迭代:盒子慢慢缩小,只保留紧邻物体的局部,以精细对齐和放置。
具体可设定一个最大和最小裁剪尺寸,再按迭代进度线性或指数缩放。
4. 这样做的好处
- 去除干扰:远处的无关点不再进入 Transformer,自注意力机制能更专注于与物体放置直接相关的区域。
- 提高效率:Transformer 的计算量与输入 token 数量成二次或线性关系,裁剪后点数少了,速度更快、显存更省。
- 增强泛化:网络不必见过完整房间布局,也能学到“把杯子放到桌沿”的局部几何模式,遇到新场景也不容易被干扰。
4 实验:设计与设置
我们的仿真实验旨在回答以下问题:
- 与其他重排方法相比,RPDiff 在完成目标任务方面表现如何?
- 与基线方法相比,RPDiff 在生成多样化变换集合方面有多成功?
- 当修改或移除不同组件时,我们的性能有何变化?
我们还在真实世界的抓取–放置管道中演示 RPDiff,以进一步突出多模态生成的优势以及我们从仿真到真实世界的迁移能力。
4.1 任务描述与训练数据生成
我们在三个强调多种可用物体放置位置的任务上评估我们的方法:
(1) 将一本书放在部分填满的书架上;
(2) 将一个罐头堆放在一堆罐头或开放的货架区域上;
(3) 将一个杯子挂在带有多个挂钩的多个挂架之一上。
为了验证我们的基线实现,我们还包括了两个“挂杯子”任务的简化版本(“较少多模态”),它们分别是:
(i) 在仅有一个挂钩的挂架上挂杯子;
(ii) 在有两个挂钩的挂架上挂杯子。
我们在仿真中程序化地生成了每个任务大约1k–3k次示范,使用了多样化的程序生成形状集合(详见附录 A2)。我们使用各自的数据集训练 RPDiff 以及所有基线方法(每个任务对应一个模型)。在真实世界实验中,我们直接迁移并部署了在仿真数据上训练好的模型。
4.2 评估环境设置
仿真
我们在 PyBullet[19] 仿真引擎中进行定量实验。预测变换通过模拟一个直接驱动物体质心的插入控制器应用到物体上(即仿真中没有机器人)。插入动作从一个“预放置”姿态执行,该姿态相对于预测的放置位置具有偏移。该偏移量使用关于任务和物体的先验知识获得,不由模型预测(详见附录 A6)。为了量化性能,我们在 100 次试验中报告成功率,使用仿真器的最终状态来判断是否成功。我们还通过将预测集合与一组真实可行解进行比较,计算相应的精确率和召回率,以量化覆盖度。有关插入控制器、
T
pre-place
\text{T}^{\text{pre-place}}
Tpre-place 的计算以及任务成功标准的详细信息,请参见附录。
真实环境
我们还使用 Franka Panda 机械臂和 Robotiq 2F140 平行爪夹具,将 RPDiff 应用于真实世界的物体重排。我们使用四台已标定的深度相机观察桌面环境。从相机获取物体
O
\text{O}
O 和场景
S
\text{S}
S 的点云
P
O
\text{P}_\text{O}
PO 和
P
S
\text{P}_\text{S}
PS,并应用我们的方法预测变换
T
\text{T}
T。通过将初始抓取姿态
T
grasp
\text{T}_{\text{grasp}}
Tgrasp(使用独立的抓取预测器[10])按照
T
\text{T}
T 变换,得到放置姿态
T
place
=
T
T
grasp
\text{T}_{\text{place}}=\text{T}\text{T}_{\text{grasp}}
Tplace=TTgrasp,然后使用逆运动学和运动规划分别到达
T
grasp
\text{T}_{\text{grasp}}
Tgrasp 和
T
place
\text{T}_{\text{place}}
Tplace。
4.3 基线方法
Coarse-to-Fine Q-attention (C2F-QA)
此方法将[8]中提出的基于分类的方法改编到关系重排任务。我们训练一个全卷积网络,在场景的体素化表示上预测得分分布,生成物体质心候选平移的热力图。模型以“粗到细”方式运行:多次在更小的体素空间中、以更高分辨率重复此操作。在最后一步,我们对体素特征做池化,并在一组离散旋转上预测分布,将其应用于物体。我们使用自己的成功分类器对预测的变换进行排序,并执行得分最高的输出。
1. Coarse-to-Fine Q-attention (C2F-QA)
核心思路
- 把“选择物体放置位置”的问题转成一个分类式打分问题:在场景中划定一系列可能的网格位置(体素),预测每个位置的“放这里有多合适”的得分。
流程细节
体素化表示
- 将场景点云转换成一个三维网格(体素网格),每个体素里统计该区域内的点或特征。
粗-to-细(Coarse→Fine)
- 第一轮(粗分辨率):用一个全卷积网络扫描整个大体素空间,快速找出几个“高分区域”候选。
- 第二轮(更细分辨率):对每个高分区域再做一个更小范围、更高精度的体素化和打分,细调候选位置。
- (可以多级迭代,但通常两三级就足够。)
旋转预测
- 在最后的高精度体素上,把空间“搓平”成一组全局特征后,再在一组预定义的离散旋转角度上分别打分,得到放置朝向分布。
候选排序与执行
- 根据自己训练的“成功分类器”给每个候选(平移+旋转组合)打分,选择得分最高的一个拿去实际执行。
优缺点
- ✔️ 优点:利用体素卷积快速覆盖大场景、并通过粗→细策略节省计算。
- ❌ 缺点:体素分辨率和层级数是超参数,不同场景需要调;离散旋转不够连续,精度有限。
关系神经描述符场 (R-NDF)
R-NDF[20] 使用在类别级别 3D 模型上训练的神经场形状表示作为特征空间,其中可通过最近邻搜索匹配局部坐标系。R-NDF 已用于通过编码并定位与任务相关的坐标系(靠近必须对齐以实现所需重排的物体部件)来执行关系重排任务。我们称此方法为“R-NDF-base”,因为它不采用原文中为细化提出的额外基于能量的模型。
2. 关系神经描述符场 (R-NDF)
核心思路
- 用“神经场”(Neural Field)来表示类别级别的 3D 形状特征,再通过最近邻(NN)在这个特征空间里匹配和对齐。
流程细节
训练神经形状场
- 在大规模同类物体(如各种书本、杯子、盒子)的 CAD 模型上训练一个隐式场(比如使用 SDF或姿态场),让每个空间点都有一个特征描述符。
提取任务相关坐标系
- 在场景里和在示范中,都用预训练的场景/物体神经场网络,将点云映射到该特征空间。
- 通过最近邻或聚类,找出“与示范中某部分最相似”的局部坐标系(比如“书架插槽”对应示范书的位置)。
变换估计
- 将物体局部坐标系对齐到场景局部坐标系,得到 SE(3) 变换。
不使用额外能量模型
- 原始 R-NDF 论文在对齐后还有一个基于物理或能量函数的迭代优化,我们这里省略,只做一次对齐预测,称为 R-NDF-base。
优缺点
- ✔️ 优点:类别级特征具有跨实例的泛化能力,可以在不同具体模型间找到对应部位。
- ❌ 缺点:纯对齐一次,无法细化多模态,也没加局部裁剪,对场景噪声敏感。
神经形状配合 (NSM) + CVAE
神经形状配合 (NSM)[3] 使用 Transformer 处理一对点云并预测如何对齐它们。从架构上看,NSM 与我们的相对姿态回归模型相同,关键区别在于:(i) 在示范点云的任意大扰动上训练,(ii) 不使用局部裁剪,且 (iii) 仅做一次预测。我们称此基线为“NSM-base”,因为我们不考虑原方法[3]中提出的辅助符号距离预测和学习到的判别器。虽然该方法在单模态任务上表现良好,但它并未针对多模态设计。因此,我们将 NSM 改造为条件变分自编码器 (CVAE)[21],以更好地从多模态数据中学习。我们使用 NSM+CVAE 预测多种变换,并执行由成功分类器评分最高的输出。
3. 神经形状配合 (NSM) + CVAE
3.1 NSM-base
核心思路
- NSM [ 3 ] [3] [3] 用 Transformer 直接把一对点云(物体 vs. 场景)输入网络,回归出最优的对齐变换。
流程细节
- 点云编码:像前面我们的方法一样,对物体点云和场景点云分别做自/跨注意力。
- 一次性预测:网络只做一次前向,直接输出一个旋转矩阵 R R R 和一个平移向量 t t t。
- 训练噪扰方式:为了让模型学会大范围对齐,NSM 在训练时对示范点云施加“任意大扰动”──从很远的错误姿态直接恢复到正确放置,增强鲁棒性。
优劣
- ✔️ 优点:结构简单,单步完成,训练覆盖大扰动范围。
- ❌ 缺点:只输出单一解,不支持多模态;不做局部裁剪,容易被无关背景干扰。
3.2 NSM + CVAE
为了让 NSM 支持多模态输出,我们在其基础上加入一个 条件变分自编码器(CVAE) 框架:
潜在变量 z z z
- 在编码器端,把物体和场景特征再映射到一个潜在空间 z ∼ N ( μ , Σ ) z\sim\mathcal{N}(\mu,\Sigma) z∼N(μ,Σ)。
采样多解
- 在推理时,可以从先验分布 N ( 0 , I ) \mathcal{N}(0,I) N(0,I) 中多次采样不同的 z z z,每个 z z z 都会让解码器输出一组不同的 ( R , t ) (R,t) (R,t)。
多模态候选
- 得到一组候选放置姿态,再用成功分类器挑选最可行的一个执行。
优劣
- ✔️ 优点:在强大的 Transformer 对齐能力上,引入 CVAE 提供了自然的多样性。
- ❌ 缺点:训练和推理复杂度上升;CVAE 模式下需要额外设计先验/后验网络并调试 KL-loss 权重。
三者对比与启发
方法 输出形式 多模态支持 是否裁剪局部 迭代 vs 单次 关键优势 C2F-QA 离散体素打分+离散旋转 一定程度(通过粗→细多级采样) 否 多级迭代 快速定位大概区域,体素卷积高效 R-NDF-base 一次对齐变换 否 否 单次 类别级神经场特征,跨实例语义对齐 NSM-base 一次回归变换 否 否 单次 Transformer 强对齐能力,对大扰动鲁棒 NSM+CVAE CVAE 采样多姿态 ✔️ 否 单次 在对齐基础上自然多模态,候选多样 这些基线方法各有侧重:
- C2F-QA 强调高效的大范围搜索;
- R-NDF 注重类别级别的几何语义匹配;
- NSM 拥有强大的点云对齐能力;
- NSM+CVAE 则在对齐之上添加显式多模态生成。
5 结果
5.1 仿真:成功率评估
表 1 显示了每种方法在各任务上取得的成功率,凸显了我们的方法在所有任务中的最佳表现。C2F-QA 的主要失败模式是旋转预测精度低。定性来看,C2F-QA 的失败往往仅与成功放置相差无几,但仍会导致插入失败。相比之下,我们的精细化流程只输出极小的旋转调整,能够精确地将物体与场景对齐。
表 1:仿真中的重排成功率。在解空间为单峰且场景几何简单的任务中,各方法均表现良好(见 Mug/EasyRack 任务)。然而,在涉及更多显著形状变化和多模态的任务中,RPDiff 的表现优于所有其他方法。
同样地,我们发现 R-NDF 在可用放置位置较多的复杂场景中表现不佳。我们猜测这是因为 R-NDF 将场景点云编码到一个全局潜变量表示中。由于这组潜变量必须捕捉所有场景组件的各种可能配置,全局编码在表示具有显著几何多样性的更大场景时会失败[6,7]。例如,R-NDF 在所有挂架仅有单个挂钩的情况下表现良好,但一旦出现多个挂架就会失效。
最后,尽管 NSM+CVAE 比单模态版本的 NSM 有所改进,我们发现其生成的变换在离散模式之间变化过于平滑(例如,书籍姿态落在可用书槽之间),这类似于基于 VAE 的生成器在图像生成中产生模糊输出的典型限制。我们猜测这种过度平滑是因为模型试图使近似后验分布与单峰高斯先验匹配。这与 RPDiff 能够“精准对接”到场景中可用放置位置的能力形成对比。关于基线方法性能及其实现细节的更多讨论见附录 A6。
5.2 仿真:覆盖度评估
接下来,我们评估生成多模态输出以覆盖重排解空间的能力,并考察预测质量与覆盖度之间的权衡。由于覆盖度受并行运行次数的影响,我们针对不同的初始姿态个数 K K K 计算平均召回率和平均精确率。精确率和召回率均相对于给定物体–场景实例的一组真实可行解计算。我们将那些在位置误差≤3.5 cm 且旋转误差≤5° 范围内的预测视为正例。
图 3a 展示了我们的方法与表现最好的基线 C2F-QA 的结果。可以看到,两种方法随着输出数量增加都能获得更高的覆盖度(更高的召回率)。当 K = 32 K=32 K=32 时,RPDiff 平均覆盖了超过一半的可用放置方案,而 C2F-QA 的覆盖率略低。然而,随着输出数量的增加,两种方法在精确率上的表现差异显著。C2F-QA 随着输出增多会产生更多远离真实解的预测,而我们的方案即使输出超过200个重排姿态,仍能保持稳定的高质量。
图 3:(a) 仿真中的覆盖评估。 RPDiff 与 C2F-QA 都能实现高放置覆盖率,但随着覆盖率提高,C2F-QA 的预测质量下降,而 RPDiff 则在保持精度的同时实现高覆盖率。(b) 裁剪消融。 在不同场景点云条件下,RPDiff 的成功率对比。使用局部场景裁剪时成功率的提升,凸显了聚焦局部空间区域对泛化和精度的益处。
5.3 仿真:局部裁剪消融与修改
最后,我们评估将局部场景条件引入相对姿态回归模型的好处。图 3b 显示了在不同场景点云条件下方法性能的差异。我们在按迭代次数动态调整裁剪尺寸的局部条件版本上取得了最佳表现。使用固定裁剪尺寸会略微降低性能,而对整个未裁剪场景点云进行条件化则表现更差。这凸显了聚焦于物体预想配置附近的局部空间区域所带来的泛化和精度优势。同时,这也表明采用粗到细的方法——在早期迭代中考虑更大区域——具有额外优势。关于成功分类器、外部噪声以及“i到t”参数化影响的更多结果,请参见附录 A7。
5.4 真实环境:通过抓取–放置实现物体重排
最后,我们使用 RPDiff 在真实世界的物体和场景上,通过抓取–放置来执行关系重排。图 1 和图 4 展示了机器人在三个任务中执行多种推断放置的位置。我们依赖于该方法输出多解的能力,因为基于工作空间限制和周围碰撞几何,有些在几何上有效的放置方案在运动学上对机器人来说并不可行。有关真实环境执行的视频,请参见补充材料。
图 4:真实世界多模态重排。在真实环境中执行堆罐/柜子 (A)、书/书架 (B) 和杯/挂架 (C) 任务。对于每个任务,左上角图为初始物体–场景配置,主图序列展示了执行多种推断放置的示例。
6 相关工作
感知驱动的物体重排。 利用感知输入进行物体重排预测已成为越来越受关注的研究领域[2,3,8,20,22–48]。一种直接的方法是端到端训练以直接回归相对变换,如 Neural Shape Mating (NSM)[3]。其他方法则探索识别与任务相关的物体部件,然后求解所需对齐方式,如 TAX-Pose 和 R-NDF[20,40,48]。然而,这些方法在其原始形式下面对多模态时往往表现不佳(NSM 和 TAX-Pose 只能输出单一解)。通过将搜索空间离散化并进行分类来处理多模态问题取得了一定成功[8,42,44,46,47,49],但这些方法通常精度较低。
去噪扩散与迭代回归。 扩散模型[4,50]使用迭代去噪过程来进行生成建模。虽然它们最初设计用于图像生成,但已扩展到波形[51,52]、3D 形状[53,54]和决策制定[55–57]等领域。在机器人学中,扩散模型(及相关能量模型)已被应用于策略学习[58,59]、轨迹优化[60–63]、抓取[56]和物体重排[20,41]。迭代回归在姿态估计[64–67]等领域也取得了成功,且近期工作展示了迭代预测与去噪扩散之间的联系[68,69]。
SE ( 3 ) \text{SE}(3) SE(3)-DiffusionFields[56] 将学习到的 6 6 6-DoF 抓取分布集成到轨迹优化框架中,而 LEGO-Net[57] 则采用迭代去噪来生成逼真的房间布局。我们的工作不同在于不依赖已知物体状态或 3D 模型。与我们最相似的是 StructDiffusion[41],其使用扩散模型在点云上执行基于语言的物体重排。尽管[41] 聚焦于将多个物体重排成自然语言指定的抽象结构(如圆形、直线),但我们更强调覆盖所有重排模式并与基于采样的规划器集成。
7 限制与结论
限制。 我们使用的大量示范数据只能通过仿真中的脚本策略轻松获得。未来的工作可以探索预训练表示和多任务学习,以减少新任务的数据需求。由于在模拟点云上训练,我们也存在一定程度的仿真到真实差距(sim2real gap)。引入更广泛的 sim2real 迁移技术并在真实世界数据上微调将是有益的研究方向。最后,我们以开环方式执行预测的放置动作。此类重排任务将受益于能够跟踪向预测重排目标进展并对干扰做出反应或恢复的闭环策略。
结论。 本文提出了一种在场景中重新排列物体以实现所需放置关系的方法,同时支持新的几何形状、姿态和场景布局。我们的系统能够生成多模态的物体变换分布,克服了拟合多模态示范数据集的难题,并促进了与需要多样化动作搜索的规划算法的集成。实验结果展示了我们框架在涉及多种物体和场景的广泛重排任务中的能力,这些任务提供了大量可行的重排方案。
8 致谢
作者感谢 NVIDIA Seattle Robotics Lab 成员和 MIT Improbable AI Lab 在本项目开发过程中的宝贵反馈和支持。特别感谢 Idan Shenfeld、Anurag Ajay 和 Antonia Bronars 对草稿清晰度的有益建议。本工作部分得到了索尼研究奖(Sony Research Awards)和亚马逊研究奖(Amazon Research Awards)的资助。Anthony Simeonov 部分由美国国家科学基金会研究生研究奖学金(NSF Graduate Research Fellowship)支持。