Q1:DP3 能在真机上实时跑吗?
能。极简编码器 + 64 维 feature 让推理略快于 Diffusion Policy;论文未给绝对 FPS,但相对位置远高于 PerAct 的 2.23 FPS。📎
论文:Yanjie Ze\, Gu Zhang\, Kangning Zhang, Chenyuan Hu, Muhan Wang, Huazhe Xu. 3D Diffusion Policy: Generalizable Visuomotor Policy Learning via Simple 3D Representations. RSS 2024,上海期智研究院 / 上海交通大学 / 清华大学 IIIS / 上海 AI Lab(\* 共同一作). arXiv:2403.03954. 🌐 · 真机平台:Franka + Allegro 手 / Franka + 夹爪,单 RealSense L515 深度相机。
让机械臂只用十个示范就学会精细动作。
秘诀是把"眼睛"从平面彩照换成一团立体点云。
立体点云之于机械臂视觉,就像立体眼镜之于看立体电影。
换个角度、挪个位置,深度关系一眼就看出来。
要解决的问题:教机械臂照着人录的示范学动作。
以前最好的办法看的是平面彩照。
物体挪几厘米、相机换个角度,它就不认得了。
换个桌布、变个光照也崩。
要凑效,常常得录一两百段示范。📎
老办法的根子:平面彩照学到的是"图里第几行第几列有东西"。
不是"物体在三维空间里相对机械手在哪"。
所以一点点空间偏移就完蛋。
这项工作的转身:把视觉输入从平面彩照换成单视角的立体点云。
点云是相机测距反推出来的一团三维点,直接长在三维空间里。
物体挪、相机转,点云跟着挪,相对几何关系不变。
配上一个故意做得极简的编码器,十个示范就够学。📎
方法核心(大白话):分两段。
第一段是"看"。
相机只拍深度,不拍颜色。
这是故意的,免得被桌布花纹和光照带偏。
把深度反投影成一团三维点。
裁掉桌面、地板这些多余点。
再均匀抽稀到五百或一千个点。
然后过一个非常朴素的编码器。
它就是三层小网络,每个点单独过一遍变成一小段数。
接着把所有点的小段数按位置取最大值合并。
这一步很关键,不论点的输入顺序怎么打乱,合并结果都一样。
最后压成六十四个数,交给决策网络。
第二段是"决定"。
决策网络就是普通的扩散策略。
它看着这六十四个数,加上机械臂当前姿态,一步步去噪出一段动作。
两段一起从头训,绝不冻结编码器。
最反直觉的点:编码器越简单越好。
那些为图像分类设计的复杂点云网络,在这里反而栽跟头。
原因不是它们不强。
是示范太少,它们的成见盖过了真正的任务信号。
里面有两个零件特别碍事。
一个管空间变换,一个管按批归一化。
把它们拆掉,效果立刻追上来。📎
为什么简单反而赢:动作模仿的数据极少,只有十个示范。
复杂编码器是为百万级图像数据调出来的。
搬到小数据上,它的成见就盖过了任务本身。
朴素编码器没成见,把所有容量都用来学"三维几何到动作"这一件事。📎
你会看到:十个示范,在七十二个仿真任务上平均比老办法高两成多。
真机上做可变形面团卷、捏饺子褶、握电钻,四十段示范就做到七到十成成功。
物体换个位置、相机挪一挪、换个同类物体,它都还认得。📎
一句话类比:立体点云之于机械臂视觉,就像戴上立体眼镜之于看立体电影。
平面彩照认不出的深度关系,戴上眼镜一眼就看出来。
核心机制·感知与决策解耦但端到端训。
把"看懂三维场景"和"决定动作"拆成两段,但一起从头训。📎
端到端训是简单编码器能反超复杂编码器的关键。
冻住预训练的大编码器再训个头,反而更差。
感知段·点云获取(Sec.III.B):
感知段·DP3 Encoder(Sec.III.B + Fig.2):三层 MLP 堆叠 + max-pool + projection。
Points (N, 3)
├─ Linear(3→64) → LayerNorm → ReLU
├─ Linear(64→128) → LayerNorm → ReLU
├─ Linear(128→256) → LayerNorm → ReLU
├─ Max Pool(over N points)→ (256,)
└─ Projection Linear(256→64) → LayerNorm → v ∈ R^64
设计要点:📎
决策段·扩散策略骨干(Sec.III.C):条件去噪扩散,条件是 $v$(三维特征)+ $\mathrm{MLP}(q)$(机械臂姿态过 2 层 MLP 编成 64 维),拼成 128 维。
关键消融·为什么简单编码器反超(Table V/VI):6 个任务平均成功率——DP3 Encoder 78.3;PointNet 15.7;PointNet++ 2.2;PointNeXt 2.3;Point Transformer 1.0。📎
几乎所有复杂编码器都崩了(多数任务 0%)。
Table VI 揭示根因:PointNet 里的 T-Net 和 BatchNorm 是主要 inhibitor(性能杀手)。
相机固定,不需要 T-Net 学空间变换;小 batch 下 BatchNorm 不稳。
拆掉这两个,PointNet 能到 72.3,接近 DP3 的 78.3。📎
常见误区(先抛一个,完整版见末尾):"换个更 SOTA 的点云编码器一定更好吧?"
——错。论文实测 PointNeXt 只有 2.3%。
visuomotor control 数据极少(10 demo),分类任务的 inductive bias 反而是 overfit 来源。
正确做法:用极简编码器 + 端到端训。📎
前向/反向扩散。条件去噪:$a^{k-1} = \alpha_k a^k - \gamma_k \epsilon_\theta(a^k, k, v, q) + \sigma_k \mathcal{N}(0,I)$。📎
其中 $a^k$ 是第 $k$ 步去噪中的动作,$\epsilon_\theta$ 是去噪网络,$v$ 是三维特征,$q$ 是机械臂姿态,$\alpha_k,\gamma_k,\sigma_k$ 是噪声调度系数。
训练目标形式上按论文 Eq.2 写成标准 DDPM 噪声预测:$\mathcal{L}=\mathbb{E}\big[\|\epsilon_\theta(a^k,k,v,q)-\epsilon\|^2\big]$,$\epsilon\sim\mathcal{N}(0,I)$;但实现默认 sample prediction(预测 $a^0$ 而非 $\epsilon$)——公式记号与实现参数化不是一回事。📎
DP3 Encoder 本质 = PointNet 去掉 T-Net 和 BatchNorm。📎
PointNet 的核心是"per-point MLP + symmetric max-pool",DP3 保留这一骨架,只换归一化为 LayerNorm、去掉 T-Net。
这呼应 Hansen et al. ICML 2022《On Pre-training for Visuo-motor Control》(DP3 引用 [20])的观察:visuomotor policy 用小而 task-specific 的编码器,比用 frozen ImageNet 编码器更好。
仿真实验(Sec.IV.A,72 任务):任务套件 Adroit (3) + Bi-DexHands (6) + DexArt (4) + DexDeform (6) + DexMV (2) + HORA (1) + MetaWorld (Easy 28 / Medium 11 / Hard 6 / Very Hard 5) = 72 任务。多数任务仅 10 demo(DexArt 和 HORA 因难度高用 100 demo)。📎
主要结果(Table I):72 任务平均成功率——DP3 74.4 ± 29.9;Diffusion Policy 59.8 ± 35.9(DP3 相对提升 24.2%)。DP3 在 9/10 任务子类上 > DP,仅 DexDeform(可变形物体)略低(87.8 vs 90.5)。📎
Table II 进一步对比 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 编码器也救不回来(BCRNN 9.8→14.5、IBC 5.0→10.4,远不及 DP3),证明骨干(扩散)和编码器(DP3)缺一不可。📎
真机实验(Sec.V,4 任务 / 40 demo):硬件 Franka arm + Allegro hand(3 任务)/ Franka + gripper(Pour),单个 RealSense L515。
四任务(各 40 demo,因多阶段多指加可变形让采集昂贵):
真机结果(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。不同模态有 task-specific 优势,DP3 全局最稳——论文未深入解释 Drill 上 RGB-DP 接近 DP3 的原因,可能钻头颜色信息有用。📎
四类泛化(Sec.V.C + Table IX–XII):
推理速度(Sec.IV.C + Fig.1):DP3 略快于 Diffusion Policy——极简编码器加 64 维 feature 比 CNN over RGB 更快;论文未给绝对 FPS 数字,但相对位置远高于 PerAct 的 2.23 FPS。📎
局限:
图谱定位:DP3 是 Diffusion Policy 的 3D 进化版,T05(扩散策略)线索的 3D 分支节点。📎
它把 DP 的视觉输入从 2D RGB 换成 3D 点云,把 spatial/viewpoint/appearance/instance 四类泛化一次推到实用水平。
更重要的副产品是揭示 PointNet 家族在 visuomotor control 上的失败模式:T-Net 和 BatchNorm 是 inhibitor,去掉就接近 DP3。
这反过来提醒社区:视觉 RL/模仿学习不能盲目套用 vision 分类的 SOTA 编码器。📎
继承与催生:
副产品·3D 表示的几何归纳偏置:spatial/viewpoint/appearance/instance 泛化本质都来自"3D 几何 + order-equivariance"。
这给后续 VLA/VLA-3D 工作奠定了表示层基础——把 RGB 换成点云,几乎是后续 3D manipulation 的默认起点。[未确认]
Open problems:
"换个更 SOTA 的点云编码器一定更好" —— 错。论文实测 PointNeXt 只有 2.3%、PointNet++ 只有 2.2%。📎 visuomotor control 数据极少(10 demo),分类任务的 inductive bias 反而是 overfit 来源。
极简编码器 + 端到端训。
"DP3 是因为 3D 编码器更强才赢" —— 错。赢在两点:(a) 输入从 2D RGB 换成 3D 点云(表示层红利);(b) 极简编码器去掉 T-Net 和 BatchNorm,让小数据下端到端训能学透。📎
3D 表示 + 极简架构,两者缺一不可。
"用 BatchNorm 更标准,应该换回来" —— 错。小 batch(imitation learning 常见)下 BatchNorm 统计量不稳,会让训练崩。📎
LayerNorm 是小 batch 场景的标配,不是可选项。
"DP3 不用颜色是偷懒" —— 部分错。不用颜色是刻意选择,目的是更好的外观泛化(不受纹理、光照影响)。代价是丢失"区分同形状不同材质"的能力。📎
颜色 on/off 是泛化 vs 任务特异性的 trade-off,不是疏忽。
"DP3 解决了所有泛化问题" —— 部分错。它大幅改善 spatial/viewpoint/appearance/instance 四类泛化,但单视角遮挡、复杂堆叠场景仍受限。📎
DP3 把泛化从"差几厘米就崩"推到"实用水平",不是终点。
老办法(Diffusion Policy)用平面彩照做视觉输入。物体只挪几厘米、相机只换个角度,它为什么就崩了?从"平面图学到的是什么"这个角度解释。
💡 参考答案
DP3 把视觉输入换成了什么?这个新表示为什么对"物体挪位置、相机换角度"鲁棒?用"立体眼镜之于平面照片"或自己举的类比说一说。
💡 参考答案
DP3 用了一个故意做得极简的三层编码器,而不是更复杂的 PointNet++/PointNeXt。为什么在只有十个示范的情况下,简单编码器反而赢了那些"更先进"的编码器?
💡 参考答案
DP3 的编码器里有一步"把所有点的小段数按位置取最大值合并"。这一步为什么对点的输入顺序不敏感?不做这一步会出什么问题?
💡 参考答案
DP3 的相机只拍深度、不拍颜色。这是为了什么?代价又是什么?
💡 参考答案
能。极简编码器 + 64 维 feature 让推理略快于 Diffusion Policy;论文未给绝对 FPS,但相对位置远高于 PerAct 的 2.23 FPS。📎
为了更好的外观泛化——不受纹理、光照、桌布花纹影响。📎 代价是丢失"区分同形状不同材质"的能力(如识别按钮颜色)。Drill 任务上 RGB-DP 接近 DP3,可能正是因为钻头颜色信息有用。
论文实测这两个值够所有任务,更多没收益。📎 FPS(最远点采样)比 uniform sampling 覆盖更均匀、降低采样随机性。
预训练的大编码器(PointNet++/PointNeXt pre-trained)反而更差(6.8/8.8 vs DP3 78.3)。📎 10 demo 数据量下,预训练的 inductive bias 是 overfit 来源。端到端训让网络把所有容量用在学习"3D 几何→控制"这一映射上。
DP3 直接复用 Diffusion Policy 的扩散决策骨干(1D 卷积去噪网络)。📎 改的是感知段:把 RGB 编码器换成极简 3D 点云编码器。可以理解为"Diffusion Policy 的 3D 进化版"。