⏱ ~39 min
里程碑
⭐ 为何重要

Ze 等的 DP3 把稀疏点云 3D 表征接上极简 MLP+pooling,再喂入扩散策略头,在 72 个 RLBench 任务上比原 2D Diffusion Policy 平均提升约 24.2%,且仅需 10 条示教。它用最少的设计证明 3D 几何对策略泛化的关键作用,是 T05(Diffusion Policy 谱系)从 2D 走向 3D 的标志节点,也直接启发 iDP3、FlowPolicy、3D-based VLA 等后续工作。

催生
机器人机械臂
数据集自采(72 任务)
上真机
实时
输入模态vision

P-DP3-2024 · 3D Diffusion Policy — Generalizable Visuomotor Policy Learning via Simple 3D Representations

作者 / 机构:Yanjie Ze¹, Gu Zhang¹², Kangning Zhang¹², Chenyuan Hu¹³, Muhan Wang¹³, Huazhe Xu³⁴(¹上海期智研究院 ²上海交通大学 ³清华大学 IIIS ⁴上海 AI Lab;* 共同一作)
发表:RSS 2024(arXiv 2024-03 first release,v7 2024-09-27)
arxiv:2403.03954 · 代码github.com/YanjieZe/3D-Diffusion-Policy(已开源) · 项目页3d-diffusion-policy.github.io
在线索中的位置:T05 (diffusion policy) + T14 (grasping) + T11 (dexterous);Diffusion Policy 的 3D 进化版。
一句话定位:把 Diffusion Policy 的视觉输入从 RGB 替换成单视角 sparse point cloud,再用一个极简 3 层 MLP + max-pooling + LayerNorm 编码器(不要 PointNet++/PointNeXt)压成 64 维 feature——结果在 72 个仿真任务 + 4 个真机可变形物体任务上泛化,多数任务只需 10 demo(DexArt / HORA 用 100),平均比 DP 高 24.2%。


动机

Diffusion Policy [Chi et al. 2023] 把 BC 的动作分布建模做到了 SOTA,但有个未解问题:视觉输入仍是 2D RGB(或加上 depth 当通道)。这导致:

  1. 空间泛化差:训练时物体在 A 位置,测试时移到 B 位置(哪怕只差几厘米)就失败——因为 2D CNN 学到的是"图像中第 X 行第 Y 列有东西",不是"3D 空间中物体相对 end-effector 在哪";
  2. 视角泛化差:换相机角度就崩;
  3. 外观泛化差:纹理、光照变化敏感;
  4. 需要大量 demo:DP 真机任务常需 100–200 demo(PDF Sec.I 明确引用),因为 2D 表征 sample inefficient。

直觉上,3D 点云是更几何、更 covariant 的表示,应该解决 (1)(2)(3)。但 prior work 用 3D(PerAct 等)速度慢(2.23 FPS)且需要复杂 encoder。DP3 要回答两个问题:

  • 能不能用极简 3D 编码器 + Diffusion Policy backbone 就拿到 3D 的泛化红利?
  • 为什么简单 encoder 反而比 PointNet++/PointNeXt 这种 SOTA 编码器更好?

方法核心

全部数字来自 PDF 正文 Sec.III–V + Appendix A(DP3 Encoder PyTorch 代码原文)。

1. 总体:Perception + Decision 解耦但端到端训


单视角 depth (84×84) → camera intrinsics/extrinsics → 单视角 point cloud
                    ↓
       crop + FPS downsample 到 512 或 1024 点
                    ↓
       DP3 Encoder(3 层 MLP + max-pool + projection)→ 64 维 v
                    ↓
       v (64) ⊕ MLP(q) (64) = 128 维 conditioning → Diffusion Policy(1D conv)→ action a

Perception 和 Decision 同时 end-to-end 训(不是 frozen encoder + train head)——这是简单 encoder 能超过 PointNeXt 的关键之一。

2. Point cloud 获取与预处理(Sec.III.B)

  • 输入:单相机 depth 84×84(不用 RGB color——为了更好的 appearance 泛化)。
  • depth → point cloud:用 camera intrinsics/extrinsics 反投影。
  • crop:去掉桌面/地面等冗余点,只留 bounding box 内。
  • FPS(farthest point sampling)downsample:到 512 或 1024 点(论文实测这两个值够所有任务,更多没收益)。FPS 而非 uniform sampling:FPS 覆盖 3D 空间更均匀、降低采样随机性。

3. DP3 Encoder:极简 3 层 MLP(Sec.III.B + Fig.2)


Points (N, 3)
   │
   ├─ Linear(3 → 64)  → LayerNorm → ReLU
   ├─ Linear(64 → 128) → LayerNorm → ReLU       # 论文 Fig.2 标 (3, 64, 128, 256)
   ├─ Linear(128 → 256) → LayerNorm → ReLU
   │
   ├─ Max Pool(over N points)→ (256,)          # order-equivariant
   │
   └─ Projection Linear(256 → 64) → LayerNorm   # 最终 v ∈ R^64

设计要点(PyTorch 代码见 Appendix A):

  • 3 层 MLP(3→64→128→256,每层 Linear→LayerNorm→ReLU)→ max pool → projection(256→64,带 LayerNorm)——总参数量极小;
  • max pool 是 order-equivariant 操作(点云无内在顺序,max pool 让输出与点的输入顺序无关);
  • LayerNorm 而非 BatchNorm:稳定训练(小 batch 下 BatchNorm 不稳,Table VI 消融进一步证实 BN 是 PointNet 失败的主因之一);
  • robot pose q 另过一个 2 层 MLP(DimRobo→64→64),与 64 维 v 拼成 128 维 conditioning 喂给 diffusion backbone;
  • 最终 64 维:很紧凑,下游 diffusion 控制器容易 consume。

这套架构本质上 = PointNet 去掉 T-Net 和 BatchNorm(详见消融 5)。

4. Decision:Diffusion Policy backbone(Sec.III.C + Appendix A)

  • Conditional denoising diffusion model:conditioning on $v$(3D feature, 64 维)+ $q$(robot pose, 经 MLP 编成 64 维),拼接成 128 维 → denoise Gaussian $a^K$ 到 action $a^0$。
  • 反向过程(PDF Eq.1):$a^{k-1} = \alpha_k a^k - \gamma_k \epsilon_\theta(a^k, k, v, q) + \sigma_k \mathcal{N}(0, I)$。
  • 训练目标 / 参数化默认用 sample prediction(直接预测 clean $a^0$),不是 noise prediction——PDF Sec.III.C 原文:"use sample prediction instead of epsilon prediction for better high-dimensional action generation"。论文数学公式以 $\epsilon_\theta$ 记号书写(Eq.2 形式上预测噪声),但实现是 sample prediction。Fig.7 消融显示 sample prediction 收敛更快,epsilon prediction 也 competitive。
  • noise scheduler:DDIM [Song et al. 2021],100 training timesteps + 10 inference timesteps(PDF Sec.III.C 原文)。Table VII 消融试过换成 DPM-solver++,低维任务还行(48.3 平均)、高维任务崩。
  • denoiser backbone:1D convolutional network(沿用 Diffusion Policy [Chi et al. 2023] 的 CNN-style UNet,仓库直接复用官方 diffusion_policy 实现)。
  • horizon(Appendix A):$H=4$(预测 4 步)/ $N_{obs}=2$(观测 2 步)/ $N_{act}=3$(执行 3 步)。比原 DP 短,因为任务 timestep 更稀疏;Table XV 显示短/长 horizon 无显著差异。
  • 归一化:每个 action 维度和 observation 维度独立 min-max 到 $[-1, 1]$(DDPM/DDIM 会 clip 到 $[-1, 1]$)。
  • 训练:MetaWorld 1000 epochs(更简单),其他仿真任务和真机 3000 epochs;DP3 在所有任务上约 500 epochs 收敛(Fig.5);batch size 128。

5. 关键消融:为什么简单 encoder 反超 PointNet++/PointNeXt

Table V(point cloud encoder 对比,6 个任务平均)

Encoder平均成功率
DP3 Encoder78.3
PointNet15.7
PointNet++2.2
PointNeXt2.3
Point Transformer1.0
PointNet++(pre-trained)6.8
PointNeXt(pre-trained)8.8

几乎所有复杂 encoder 都崩了(多数任务 0%)。预训练版本略好但仍远不如 DP3

Table VI(逐步把 PointNet 改成 DP3-style)揭示了根本原因:PointNet 的 T-Net 和 BatchNorm 是主要 performance inhibitor!去掉 T-Net(因为相机固定,不需要 spatial transformer 学特征变换)+ 去掉 BatchNorm(小 batch 不稳)后,PointNet 平均能到 72.3,接近 DP3 的 78.3。再降维(1024 → 256)几乎无损(72.5 → 72.3)但加速。

论文解释

  • 复杂 encoder 是为分类/分割设计(PointNet++ 的 hierarchical grouping、PointNeXt 的 inverted residual),需要大数据集预训练后 transfer;
  • 但 visuomotor control 任务数据极少(多数任务 10 demo),这些 encoder 的 inductive bias 反而是 overfit 的来源;
  • DP3 Encoder 端到端训 + 极简 + LayerNorm,让网络把所有容量用在学习"3D 几何 → 控制"这一映射上,不被 SOTA 分类任务的 prior 带偏。

这个发现呼应 [Hansen et al., "On Pre-training for Visuo-motor Control: Revisiting a Learning-from-scratch Baseline", ICML 2022](即 DP3 引用 [20]):visuomotor policy 用 small task-specific encoder 比用 frozen ImageNet encoder 更好。

6. 仿真实验(Sec.IV.A–B,72 任务)

任务套件(Table III,7 个 domain、72 任务):

  • Adroit (3) — Shadow hand,MuJoCo,28 维 action — 10 demo
  • Bi-DexHands (6) — Shadow hand,IsaacGym,52 维 action — 10 demo
  • DexArt (4) — Allegro hand,Sapien,22 维 action — 100 demo
  • DexDeform (6) — Shadow hand,PlasticineLab,52 维 action — 10 demo
  • DexMV (2) — Shadow hand,Sapien,30 维 action — 10 demo
  • HORA (1) — Allegro hand,IsaacGym,16 维 action — 100 demo
  • MetaWorld (50 = Easy 28 / Medium 11 / Hard 6 / Very Hard 5) — Gripper,MuJoCo,4 维 action — 10 demo

demo 数:多数任务 10 demo,DexArt 和 HORA 因任务难度高用 100 demo。

Table I 主要结果(72 任务平均 success rate):

  • DP3: 74.4 ± 29.9
  • Diffusion Policy: 59.8 ± 35.9DP3 相对提升 24.2%

DP3 在 9/10 任务子类上 > DP(仅 DexDeform 略低:87.8 vs 90.5——可能 deformable 任务对几何不那么敏感)。

Table II 对比更多 baselines(IBC、BCRNN 及其 3D 变种,10 任务平均):DP3 74.4 > Diffusion Policy 44.0 > BCRNN+3D 14.5 > IBC+3D 10.4 > BCRNN 9.8 > IBC 5.0。给 BCRNN/IBC 加 3D encoder 也救不回来(BCRNN 9.8→14.5、IBC 5.0→10.4,远不及 DP3),证明 backbone(diffusion)和 encoder(DP3)缺一不可。

7. 真机实验(Sec.V,4 任务 / 40 demo)

硬件:Franka arm + Allegro hand(4 任务中 3 个)/ Franka + gripper(Pour 任务)。单个 RealSense L515 深度相机

任务(每任务 40 demo,因为多阶段 + 多指 + deformable 让 demo 采集昂贵):

  1. Roll-Up:Allegro hand 多次按压 plasticine 卷成 roll-up;
  2. Dumpling:Allegro hand 先包 plasticine 再捏出饺子褶;
  3. Drill:Allegro hand 抓电钻 → 移动 → 用钻头碰绿方块;
  4. Pour:gripper 抓碗 → 倒出肉松 → 放下碗。

任务刻意设计成多指手优势任务:Roll-Up/Dumpling 不用工具直接 wrap(RoboCook 需要工具),Drill 的真机钻头重,gripper 抓不住。

结果(Table VIII,10 trials)

  • DP3: 85.0 ± 11.2 平均(Roll-Up 90、Dumpling 70、Drill 80、Pour 100)
  • Diffusion Policy (RGB): 35.0 ± 25.0
  • Diffusion Policy (Depth): 20.0 ± 12.2

有趣观察:RGB-DP 在 Drill 拿了 70(最高),但 Roll-Up 0;Depth-DP 在 Roll-Up 拿了 40。不同 modality 有 task-specific 优势,DP3 全局最稳。

8. 四类泛化(Sec.V.C + Table IX–XII)

  1. Spatial generalization(Pour,Table IX,5 个 unseen 位置):DP3 4/5 通过,baselines 全失败。
  2. Viewpoint generalization(Roll-Up,Table XII,相机移动):DP3 鲁棒。
  3. Appearance generalization(Drill,Table X,cube 颜色变化):DP3 全过。
  4. Instance generalization(Drill,Table XI,Mouse / Espeon / Cup / Mug / Hand 等不同物体):DP3 work。

9. 推理速度(Sec.IV.B 第 4 点 + Fig.1)

DP3 推理速度略快于 Diffusion Policy(PDF 原文:"marginally surpassing Diffusion Policy"),归功于 sparse point cloud + compact 64 维 representation。对比之下 PerAct 仅 2.23 FPS、Actor 1.67 FPS——DP3 没给绝对 FPS 数字,但相对位置远高于这些 3D baseline。

为什么重要

  1. 第一个把 3D 点云输入 + Diffusion Policy 做到 SOTA 的工作,且是 simple 的胜利。挑战了"用最 SOTA 的 encoder 一定更好"的直觉。
  2. 揭示 PointNet 家族在 visuomotor control 上的失败模式:T-Net 和 BatchNorm 是 inhibitor,去掉就接近 DP3。这反过来提醒社区:视觉 RL/imitation 不能盲目套用 vision 分类 SOTA
  3. demo-efficient + 4 类泛化:把 demo-efficient imitation 推到实用水平。之前 DP 真机需要 100–200 demo,DP3 多数仿真任务只用 10 demo(DexArt/HORA 因难度高用 100)就在 72 任务平均超过 DP 24.2%,直接降低真机数据采集成本。
  4. 真机 deformable + 多指手:plasticine 卷、饺子、电钻这些高动态接触、可变形、多指任务一直被视为机器人学习硬骨头,DP3 用 40 demo 拿到 70–100% 成功率。
  5. 3D 表征的几何归纳偏置:spatial / viewpoint / appearance / instance 泛化本质都来自"3D 几何 + order-equivariance",这给后续 VLA/VLA-3D 工作奠定基础。

局限

  1. 单视角 point cloud:遮挡区域看不到,复杂场景(多物体堆叠、内部空腔)受限。
  2. 不用 color:纯几何丢失了"区分同形状不同材质"的能力(如识别按钮颜色)。论文称这是为了外观泛化,但牺牲了部分任务。
  3. 少量 demo 仍依赖 demo 质量:复杂多阶段任务(Dumpling)demo 采集时间成本高,论文承认真机是只能给 40 demo 的原因;仿真 DexArt/HORA 也需 100 demo 才稳。
  4. FPS downsample 仍是固定 512/1024:未做 learned pooling 或 attention
  5. 真机只在 Allegro / gripper 上验证(仿真里 Shadow / Allegro / Gripper 都用),未覆盖 humanoid hand、bimanual、legged manipulation。
  6. DP3 解释了为什么简单 encoder 赢,但没解释"何时 DP3 会输给 RGB-DP":Drill 任务 RGB-DP 拿到其最高分 70(其他任务多在 0–40),仍输给 DP3 的 80,但差距比其他任务小;论文未深入分析——可能是电钻任务里颜色/纹理信息确实有用。
  7. 论文未明示:优化器 / 学习率、是否用 EMA、CNN backbone 的具体通道宽度(仅说沿用 diffusion_policy [10])、Allegro hand teleop 的 retargeting 具体实现(仅引 [48,17])。

复现要点

基于 PDF + 开源代码 github.com/YanjieZe/3D-Diffusion-Policy

  • 输入:单 RealSense depth(84×84),不用 RGB。
  • 预处理:depth → point cloud → crop bounding box → FPS downsample 到 512 或 1024
  • DP3 Encoder(Appendix A PyTorch 代码原文):Linear(3→64) → LayerNorm → ReLU × 3 层(最后一层 256)→ max pool over pointsLinear(256→64) → LayerNorm不要 PointNet++/PointNeXt,不要 T-Net,不要 BatchNorm。Robot pose 走独立 2 层 MLP(→64→64),与 v 拼成 128 维 conditioning。
  • Diffusion backbone:1D conv(沿用 Diffusion Policy 仓库),horizon $H=4 / N_{obs}=2 / N_{act}=3$。
  • 训练:MetaWorld 1000 epochs,其他仿真和真机 3000 epochs(DP3 约 500 epochs 即收敛);默认 sample prediction(不是 epsilon prediction);DDIM 100 训练 / 10 推理 timesteps;batch size 128。
  • 推理:10 步 DDIM。
  • demo 数:多数仿真任务 10/任务,DexArt 和 HORA 100/任务;真机 40/任务。
  • 归一化:action / observation 各维度 min-max 到 $[-1, 1]$(DDIM 会 clip)。
  • 不要 frozen pre-trained encoder:必须 end-to-end 训,这是反超 PointNeXt 的关键。
  • 常见坑:(1) 用 BatchNorm 替代 LayerNorm 会让小 batch 训练崩;(2) FPS 比 uniform sampling 稳;(3) 64 维 feature 不要扩到 256/512,过参化反而降泛化;(4) 单视角点云若场景遮挡严重,需考虑多视角融合(DP3 未做)。

相关

  • 建立在:Diffusion Policy [Chi et al. 2023](decision backbone 直接复用)、DDPM [Ho et al. 2020]、DDIM [Song et al. 2021]、PointNet [Qi et al. 2017](去 T-Net + BN 即 DP3)、"On Pre-training for Visuo-motor Control" [Hansen et al. ICML 2022](small encoder > frozen large 的同类观察,论文引用 [20])。
  • 同期/后续iDP3 [Ze et al. 2024, arXiv:2410.10803](DP3 的 iterative variant,本仓库 PDF 也有)、3D-VLA、RVT-2、PerAct2、GR00T N1(VLA 用 3D)。
  • 本仓库笔记交叉引用
  • T05-diffusion-policy-lineage.md(3D 进化分支)
  • T11-dexterous-manipulation.md(多指手 + 可变形物体代表)
  • T14-grasping.md(3D 表示对抓取的价值)
  • P-DiffusionPolicy-2023.md(直接前作,本文多次对照)
  • P-BeyondMimic-2025.md(diffusion 在另一域:humanoid 全身 control,思路对照——都强调 latent + lightweight decoder)