Skip to content
Table of contents
DP3 的四个真实机器人任务:包饺子、卷橡皮泥、持电钻接触目标和倾倒物料,截自原论文 Figure 1

论文精读|DP3:当 Diffusion Policy 遇上 3D 点云

Updated November 2, 2026 1 min read #论文精读 / #具身智能 / #机器人操作 / #模仿学习 / #diffusion policy / #三维点云

论文: 3D Diffusion Policy
作者: Yanjie Ze、Gu Zhang、Kangning Zhang、Chenyuan Hu、Muhan Wang、Huazhe Xu
发表: RSS 2024;首次公开于 2024 年 3 月 6 日
本文对应的 arXiv v1 · 现行论文 · 代码 · 项目与演示视频

版本说明:本文依据 2024 年 3 月 6 日的 arXiv v1 解读,实验表中的“相对提升 55.3%”来自该版 Table I。v7 摘要报告的是 24.2%,下文保留 v1 的实验口径,不混用两版数字。

DP3 想解决的问题是:示范很少时,策略能否更容易学到“物体在哪里、机器人该往哪里动”?它保留了 Diffusion Policy 生成动作序列的方式,把视觉输入换成稀疏点云,再用一个小型编码器提取几何特征。这个改动把一部分原本需要从像素中学习的空间关系,放进了输入表示里。

但“给策略加上深度”还不足以解释它的效果。论文里,深度图、RGB-D 和体素都弱于点云;换成更复杂的点云编码器,成绩甚至会明显下降。因此,DP3 真正值得研究的是:怎样把三维观测压缩成适合控制的条件,以及实验能否把表示、编码器和动作模型的作用区分开。

从一张深度图到一段动作,DP3 做了什么?

DP3 的完整流程:单视角点云经过裁剪和最远点采样,由轻量编码器提取三维特征,再与机器人状态一起作为条件,迭代去噪生成动作序列。感知和动作模型通过示范端到端训练。来源:v1 Figure 2。

一次策略查询可以分成两个映射:先把点云和机器人状态编码成条件,再根据这个条件生成动作块。记点云为 PtP_t、机器人自身状态为 qtq_t,则有:

vt=fϕ(Pt),rt=gψ(qt),v_t=f_\phi(P_t),\qquad r_t=g_\psi(q_t), ct=[vt;rt]∈R128.c_t=[v_t;r_t]\in\mathbb R^{128}.

其中,点云特征 vtv_t 和状态特征 rtr_t 都是 64 维。策略使用两个观测时刻的条件信息,从随机噪声中生成一个动作序列。这里的扩散模型生成的是机器人动作;点云本身只经过确定性的预处理与编码。

这种拆法也划清了贡献范围:DP3 的感知模块负责提供几何条件,动作模块沿用基于卷积网络的 Diffusion Policy。它没有额外学习物体动力学,也不需要先预测关键帧位姿、再交给运动规划器完成整段运动。

点云预处理承担了哪些工作?

论文在仿真和真实实验中都使用单视角、84×8484\times84 的深度观测,结合相机内外参转换为点云。每个点仅保留 XYZ 坐标,不输入 RGB;随后用预设空间包围盒裁掉无关区域,再通过最远点采样(FPS)保留 512 或 1024 个点。

这几步各有用途。裁剪限制了策略需要解释的空间范围;FPS 用有限点数覆盖剩余几何结构,减少采样随机性;去掉颜色则降低对纹理和颜色的依赖。最终网络看到的是一个大小为 N×3N\times3 的坐标集合,而不是原始深度像素网格。

同一真实场景的 RGB、深度图、带颜色点云和无颜色点云。深度图仍按像素排列,点云则把深度转换成显式三维坐标;图中点云的伪彩色用于展示,不代表策略使用 RGB 通道。来源:v1 Figure 11。

关键区别在于几何关系怎样表达。深度图里的相邻像素未必属于相邻表面,同样的像素位移也可能对应不同的空间距离;转换为点云后,三维位置关系可以直接由坐标表达。模型仍需学习哪些位置和形状会影响动作,但无需完全依赖二维纹理去推断这些关系。

点云没有替策略解决所有感知问题。它只包含单个视角能看到的表面,遮挡和深度缺失仍然存在;坐标也依赖标定与变换。输入三维坐标,更不意味着网络自动具备平移或旋转不变性。

编码器为什么这么小,还能保留控制所需的信息?

DP3 Encoder 对每个点应用共享 MLP,维度依次为 3→64→128→2563\rightarrow64\rightarrow128\rightarrow256,每层线性变换后接 LayerNorm 和 ReLU。然后在点的维度上取最大值,最后用 Linear 和 LayerNorm 把 256 维全局特征投影为 64 维:

hi=MLP⁡(pi),hi∈R256,h_i=\operatorname{MLP}(p_i),\qquad h_i\in\mathbb R^{256}, vt=LN⁡ ⁣(Wmax⁡ihi+b).v_t=\operatorname{LN}\!\left(W\max_i h_i+b\right).

这里的最大池化按特征通道独立进行:不同通道的最大值可以来自不同的点。它把点的数量消去,并使最终表示对输入点的排列顺序保持不变。共享 MLP 本身保留逐点输出的对应关系,真正得到全局排列不变表示的是池化步骤。

这个结构没有显式建立局部邻域,也没有逐点自注意力。它的归纳偏置比较直接:先从绝对坐标提取逐点特征,再聚合场景中响应最强的几何信息。对于需要根据物体与机器人相对位置采取动作的任务,保留位置相关信息有实际意义。物体识别往往希望同一物体换个姿态仍被识别为同一类,控制策略却需要让不同姿态对应不同动作,两类任务未必需要同样的特征变换。

机器人状态由另一个 MLP 编码,结构是 Dq→64→64D_q\rightarrow64\rightarrow64,中间使用 ReLU。它与视觉特征共同决定动作:同一场景下,机械臂已经靠近物体还是仍在远处,下一步控制量当然不同。单个观测的联合特征是 128 维,历史观测的信息再作为去噪网络的条件。

空间泛化的证据是什么?

MetaWorld Reach 的空间测试。红点对应 5 条训练示范,蓝点表示成功到达的测试位置;从左到右为 BC-RNN、IBC、Diffusion Policy 和 DP3。来源:v1 Figure 3。

Reach 实验给了一个直观例子:只用 5 条示范训练,在三维空间测试 1000 次,BC-RNN、IBC、Diffusion Policy 和 DP3 分别成功 0、285、327、415 次。DP3 的成功位置覆盖了更广的空间,但其成功率仍是 41.5%。这个结果支持“点云表示有助于少样本空间外推”,并没有证明策略已能在整个工作空间可靠泛化。

动作生成:训练预测干净动作,推理执行短动作块

感知部分回答“根据什么行动”,扩散模型回答“生成怎样的一段连续动作”。DP3 使用基于卷积网络的条件去噪模型,同时更新整个动作序列,无需逐个动作自回归生成。

设归一化后的专家动作块为 A0A^0,扩散噪声等级为 kk。为了说明实际使用的 sample prediction,可以把训练过程写成:

Ak=αˉkA0+1−αˉkϵ,A^k=\sqrt{\bar\alpha_k}A^0 +\sqrt{1-\bar\alpha_k}\epsilon, A^0=fθ(Ak,k,Ct),ϵ∼N(0,I).\hat A^0=f_\theta(A^k,k,C_t), \qquad \epsilon\sim\mathcal N(0,I).

CtC_t 表示两帧观测形成的条件信息,kk 表示噪声等级,与机器人执行的物理时刻 tt 不同。训练要求网络从带噪动作中恢复原始动作块,目标可写为 E∥A0−A^0∥22\mathbb E\|A^0-\hat A^0\|_2^2。

原文公式 (2) 使用了预测噪声的写法,但 Implementation Details 明确说明,实际采用 sample prediction,即直接预测干净动作。两者都属于扩散模型的参数化方式;解读实现时,需要以实际采用的目标为准。Figure 7 显示 sample prediction 通常收敛更快,去掉它后的六任务平均分从 63.2 降至 59.0;epsilon prediction 仍能学到策略,不能将它描述为失效。

部署时,模型从高斯噪声开始,用 DDIM 做 10 次去噪更新,得到动作块;训练噪声调度则包含 100 个时间步。这里的“10 步”是一次策略查询内部的计算迭代,和下表里的动作执行长度是两回事。

参数论文设置含义
观测长度 NobsN_{\mathrm{obs}}2每次查询使用两个时刻的观测
预测长度 HH4一次生成长度为 4 的动作序列
执行长度 NactN_{\mathrm{act}}3执行时间对齐后的最后 3 个动作,再接收新观测
训练 / 推理扩散步数100 / 10噪声调度长度与 DDIM 去噪迭代数

所以,H=4 不能直接理解成“从当前时刻开始,未来 4 步全部开环执行”。策略执行短动作段后重新查询,历史观测和预测序列之间还需要保持时间对齐。论文也比较了较长配置 H=16,Nact=8H=16,N_{\mathrm{act}}=8:六任务上 DP3 从 63.2 变为 64.2,短窗口并未明显损失整体表现,因此作者选择较短窗口来保留对环境变化的响应机会。

复现时还有一个容易漏掉的细节:附录要求把各动作维度和观测维度按各自最小、最大值缩放到 [−1,1][-1,1]。作者特别强调动作归一化,因为所用 DDPM/DDIM 实现会把预测裁剪到这个区间。若直接用未归一化的物理控制量训练,再让采样器执行裁剪,动作幅度就可能被破坏。

消融实验:收益来自几何、编码器,还是扩散模型?

这一节的对比都应先确认任务集合。论文主要消融只使用 Adroit 的 Hammer、Door、Pen,以及 MetaWorld 的 Assembly、Basketball、Shelf Place,共 6 个任务,每项 10 条示范;它们的平均分不能直接当成 72 项主实验的平均成绩。

深度信息有用,但表示形式同样重要

保持动作模型为扩散策略,更换视觉表示及相应编码器,v1 Table IV 得到:

视觉表示RGB 图像RGB-D深度图体素点云(DP3)
六任务平均分28.727.842.039.563.2

深度图比 RGB 更好,但仍明显低于点云。这个对比支持点云及其编码方式的价值,同时需要看到:实验替换了表示,也替换了编码器,并非只隔离了输入数据格式这一个变量。

“二维基线分辨率太低”也不能完整解释差距。Table IX 将 RGB 基线从 84×8484\times84 提高到 128×128128\times128 和 256×256256\times256,六任务平均分分别为 28.7、30.2、29.5,仍低于 DP3 的 63.2。这只排除了所测配置下单纯提高像素数的解释,不代表二维视觉已经没有改进空间。

更强的通用点云编码器,未必更适合这组控制任务

把视觉输入固定为点云,替换编码器,v1 Table V–VI 的部分结果如下:

编码器或改动六任务平均分
DP3 Encoder63.2
PointNet17.7
PointNet 去掉 T-Net 与 BatchNorm59.5
PointNet++ / PointNeXt / Point Transformer2.2 / 2.3 / 1.0
预训练 PointNet++ / 预训练 PointNeXt6.8 / 8.8

最有解释力的结果是 PointNet 的逐项改造:去掉 T-Net 和 BatchNorm 后,成绩从 17.7 接近到 59.5。作者认为,固定相机下的控制任务未必需要 T-Net 提供的特征变换;但论文没有定位其他复杂编码器失败的完整原因。因此,更稳妥的结论是“面向识别或分割设计的表示,不能未经验证就当作合适的控制表示”,而不是“网络越小越好”或“预训练无用”。

其他设计也不应统称为成功率改进。Table VII 中,去掉点云裁剪使平均分从 63.2 降至 51.3,影响较大;去掉 LayerNorm 为 61.3,去掉投影头为 62.2。加入颜色反而得到 63.7,与默认配置接近。去颜色的主要取舍是降低外观依赖,投影头的主要用途是压缩特征与加快推理,二者都没有被证明必然提高原任务成功率。

三维表示也不能替代动作建模。另一组 10 任务对比中,BCRNN 加入 DP3 Encoder 后平均分从 1.8 升到 18.8,IBC 从 5.2 升到 18.7;同一组任务上的 DP3 为 65.3。点云能帮助其他策略,但“点云加任意动作头”并没有复现 DP3 的结果。

主实验怎么读:示范数量、评估方法和例外都重要

v1 的 72 项仿真实验覆盖 7 个任务域,既包含夹爪操作,也包含最高 52 维动作控制。除 DexDeform 使用人类遥操作数据外,其余域主要由强化学习专家生成成功轨迹,同一任务的不同方法使用相同示范。

任务域任务数每任务示范数Diffusion PolicyDP3
Adroit31031.768.3
Bi-DexHands61061.370.2
DexArt410049.068.5
DexDeform61090.587.8
DexMV21095.099.5
HORA110049.071.0
MetaWorld Easy281059.790.1
MetaWorld Medium111026.961.0
MetaWorld Hard6109.843.2
MetaWorld Very Hard51017.856.6
全部任务72其中 67 项使用 10 条47.673.9

表中数值照录 v1 Table I,MetaWorld 按原表分成四个难度组。HORA 使用归一化回报,其余主要使用成功率,所以跨 72 项的平均值严格说是论文报告的汇总指标。原文报告整体从 47.6 到 73.9,增加 26.3 个百分点,相对提升约 55.3%;DexDeform 则略有下降,不能概括成每个域都提升。

评估协议同样影响数字的含义:每项实验运行 3 个随机种子,每隔 200 个 epoch 评估 20 个 episode,取最高 5 次评估成绩的平均,再汇总不同种子。它反映训练过程中多次评估后的较好表现,不能与只测最终 checkpoint 一次的结果直接混比。

在 10 个仿真任务上增加示范数量后的学习表现。部分困难 MetaWorld 任务中,二维 Diffusion Policy 即使获得更多示范,仍落后于 DP3;不同任务的收益幅度并不相同。来源:v1 Figure 6。

“数据效率高”还包含两个不同观察。Figure 5 中,DP3 通常收敛更快;Figure 6 中,DP3 在若干任务上用较少示范就达到较好的表现。更快收敛衡量的是训练过程,少样本表现衡量的是数据需求,二者不应合并成一个含糊的“更高效”。这里也没有直接证明成功轨迹之外的失败示范、不同质量的人工示范会带来同样收益。

真实机器人与泛化:85% 是怎样得到的?

真实实验使用 Franka 机械臂搭配 Allegro 灵巧手或平行夹爪,以 RealSense L515 获取深度观测。每个任务收集 40 条人类遥操作示范,测试 10 次。前三项任务的动作维度为 22,Pour 为 7。

四个真实任务的阶段和终态:包裹并捏合橡皮泥、持电钻接触目标方块、多次卷起橡皮泥,以及抓碗、倾倒和放回。来源:v1 Figure 10。

方法Roll-UpDumplingDrillPour平均
RGB Diffusion Policy0%30%70%40%35%
深度图 Diffusion Policy40%20%10%10%20%
DP390%70%80%100%85%

这张表最直接的含义是:在相同示范数量下,DP3 在四个任务上都能取得较好的结果,且两个二维基线各有擅长和失效的任务。它并不说明深度图在所有任务中都优于 RGB,也不说明 85% 可以外推到任意操作任务。每项只有 10 次测试,一次成败就对应 10 个百分点。

泛化测试进一步改变训练条件之外的位置、外观、实例或视角,但每个新条件都只试一次:

泛化类型实际改变的条件DP3 的观察结果
空间,Pour碗放在 5 个训练外位置成功 4/5,两个基线均为 0/5
外观,Drill将绿色目标方块换成 5 种颜色成功 5/5,两个基线均为 0/5
实例,Drill用鼠标、玩具、杯子等 5 个物体替换目标方块成功 5/5
视角,Roll-Up相机轻微改变至 3 个新视角成功 3/3;手动调整了点云裁剪范围

Drill 的实例泛化:替换的是电钻要接触的目标方块,电钻仍是原来的工具。测试目标包括鼠标、玩具、两类杯子和玩具手。来源:v1 Table XIII。

这里有两条边界尤其影响解读。实例泛化测的是“持电钻接触不同目标”,并未检验能否抓稳不同型号的电钻。视角泛化则包含人工调整裁剪范围,不能等同于在任意相机位置上直接部署。这些单次测试展示了成功案例,还不足以估计各条件下稳定的成功概率。

论文还统计了需要人为终止、以避免硬件损坏的安全违规:RGB 策略平均为 32.5%,深度图策略为 25%,DP3 为 0%。这是上述真实实验中的观察,模型没有因此获得安全约束或形式化保证。它提示更合适的观测表示可能改善控制行为,但不能取代部署时的硬件保护。

对复现与后续研究有什么启发?

DP3 的证据支持一个具体判断:在这些少样本操作任务里,显式几何坐标、适合控制的小型点云编码器和扩散动作生成结合起来,比论文比较的二维策略更有效。它的收益不能单独归给深度传感器,也不能用一个“更复杂的模型”来解释。

复现应先核对数据链路:深度到点云的标定与坐标变换是否一致,裁剪是否保留了任务所需的物体和机器人,采样点数和颜色通道是否匹配,动作是否正确归一化,历史观测与执行切片是否对齐。这些设置会改变策略实际看到和执行的内容,优先级往往高于直接更换编码器。

方法的取舍也很清楚。稀疏单视角 XYZ 能减少外观干扰,却缺少遮挡表面、颜色语义与触觉接触信息;64 维全局池化特征计算便宜,但论文没有证明它保留了所有精细接触所需的局部结构。作者还明确指出,极长时程任务没有在本文中展开。把 DP3 用到依赖颜色选择目标、严重遮挡或多阶段长任务时,需要重新检查观测与任务是否匹配,不能只照搬原实验的平均分。

资料与配图来源

正文的方法、超参数及表格均以 arXiv:2403.03954v1 为依据。封面取自该版 Figure 1 的真实任务区域,正文图片取自 Figure 2、3、6、10、11 及 Table XIII,仅裁剪图外内容,图内数据与标注未改写。

现行 v7 论文与项目主页可用于查阅后续版本和演示;官方代码仓库提供实现。理解其扩散动作模型时,可结合 Diffusion Policy 原论文与项目阅读。图片与研究成果归原作者所有。