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 当通道)。这导致:
- 空间泛化差:训练时物体在 A 位置,测试时移到 B 位置(哪怕只差几厘米)就失败——因为 2D CNN 学到的是"图像中第 X 行第 Y 列有东西",不是"3D 空间中物体相对 end-effector 在哪";
- 视角泛化差:换相机角度就崩;
- 外观泛化差:纹理、光照变化敏感;
- 需要大量 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 Encoder | 78.3 |
| PointNet | 15.7 |
| PointNet++ | 2.2 |
| PointNeXt | 2.3 |
| Point Transformer | 1.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.9(DP3 相对提升 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 采集昂贵):
- Roll-Up:Allegro hand 多次按压 plasticine 卷成 roll-up;
- Dumpling:Allegro hand 先包 plasticine 再捏出饺子褶;
- Drill:Allegro hand 抓电钻 → 移动 → 用钻头碰绿方块;
- 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)
- Spatial generalization(Pour,Table IX,5 个 unseen 位置):DP3 4/5 通过,baselines 全失败。
- Viewpoint generalization(Roll-Up,Table XII,相机移动):DP3 鲁棒。
- Appearance generalization(Drill,Table X,cube 颜色变化):DP3 全过。
- 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。
为什么重要
- 第一个把 3D 点云输入 + Diffusion Policy 做到 SOTA 的工作,且是 simple 的胜利。挑战了"用最 SOTA 的 encoder 一定更好"的直觉。
- 揭示 PointNet 家族在 visuomotor control 上的失败模式:T-Net 和 BatchNorm 是 inhibitor,去掉就接近 DP3。这反过来提醒社区:视觉 RL/imitation 不能盲目套用 vision 分类 SOTA。
- demo-efficient + 4 类泛化:把 demo-efficient imitation 推到实用水平。之前 DP 真机需要 100–200 demo,DP3 多数仿真任务只用 10 demo(DexArt/HORA 因难度高用 100)就在 72 任务平均超过 DP 24.2%,直接降低真机数据采集成本。
- 真机 deformable + 多指手:plasticine 卷、饺子、电钻这些高动态接触、可变形、多指任务一直被视为机器人学习硬骨头,DP3 用 40 demo 拿到 70–100% 成功率。
- 3D 表征的几何归纳偏置:spatial / viewpoint / appearance / instance 泛化本质都来自"3D 几何 + order-equivariance",这给后续 VLA/VLA-3D 工作奠定基础。
局限
- 单视角 point cloud:遮挡区域看不到,复杂场景(多物体堆叠、内部空腔)受限。
- 不用 color:纯几何丢失了"区分同形状不同材质"的能力(如识别按钮颜色)。论文称这是为了外观泛化,但牺牲了部分任务。
- 少量 demo 仍依赖 demo 质量:复杂多阶段任务(Dumpling)demo 采集时间成本高,论文承认真机是只能给 40 demo 的原因;仿真 DexArt/HORA 也需 100 demo 才稳。
- FPS downsample 仍是固定 512/1024:未做 learned pooling 或 attention。
- 真机只在 Allegro / gripper 上验证(仿真里 Shadow / Allegro / Gripper 都用),未覆盖 humanoid hand、bimanual、legged manipulation。
- DP3 解释了为什么简单 encoder 赢,但没解释"何时 DP3 会输给 RGB-DP":Drill 任务 RGB-DP 拿到其最高分 70(其他任务多在 0–40),仍输给 DP3 的 80,但差距比其他任务小;论文未深入分析——可能是电钻任务里颜色/纹理信息确实有用。
- 论文未明示:优化器 / 学习率、是否用 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 points →Linear(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)