小白篇:先搞懂"扩散模型用在机器人上"到底在干什么
如果你对扩散模型和机器人的交叉不熟,先读这里。
扩散模型不只是画图的
大多数人对扩散模型的印象是"画图"–从噪声一步步去噪生成图片。但扩散模型的本质是:
从一个混乱的起点,一步步"整形"成目标形状。
这个"形状"可以是图片,也可以是一条机器人动作轨迹。
这就是 RDT(Robotics Diffusion Transformer)的核心思想:用扩散模型生成机器人动作。
为什么机器人需要扩散模型?
机器人动作有两个特点,让传统方法很难处理:
特点一:多模态(同一个任务可能有多种正确做法)
传统回归模型(如 ACT)会把三种做法"平均"成一条轨迹–结果是一条谁都不像的"鬼影"轨迹。
扩散模型天然擅长建模多模态分布–它可以在采样时"选择"其中一个模式,生成一条清晰、合理的轨迹。
特点二:双臂协调更复杂
这就是为什么 RDT 选择扩散模型–它是目前唯一能同时解决多模态和高维动作的生成方法。
RDT 系列两篇论文一览
| RDT-1B | RDT-2 | |
|---|---|---|
| 时间 | 2024.10(ICLR 2025) | 2026.02 |
| 核心目标 | 双臂操作基础模型 | 跨具身零样本泛化 |
| 基座模型 | 自研 DiT(1.2B) | Qwen2.5-VL(7B VLM)+ 动作专家(400M) |
| 生成方法 | DDPM 扩散 | Flow Matching(更高效) |
| 训练数据 | 46 个数据集,1M+ 轨迹 | 10,000+ 小时 UMI 人类演示 |
| 核心创新 | 统一动作空间 + 大规模预训练 | RVQ 对齐语言与动作 + 三阶段训练 |
| 推理速度 | 5 步去噪 | 1 步蒸馏(UltraFast 版) |
RDT-1B:第一个机器人扩散基础模型
要解决什么问题?
双臂机器人操作面临两大难题:
- 数据稀缺:特定机器人的数据极少(不像互联网有海量图片/文字)
- 多模态动作分布:两只手协调时,同一个任务有多种正确做法
现有方法的困境:
| 方法 | 做法 | 问题 |
|---|---|---|
| ACT(回归) | 直接回归动作均值 | 多模态时"平均"成鬼影轨迹 |
| Octo(离散化) | 把连续动作离散成 token | 精度损失,丢失连续性 |
| OpenVLA(VLA) | 用 LLM 预测离散动作 token | 动作空间受限,不适用高维双臂 |
RDT 的解法:用扩散模型建模动作分布 + 用 Transformer 做可扩展的骨干网络。
整体架构:DiT + 多模态编码
扩散模型在 RDT 中怎么工作?–逐公式拆解
训练时:给动作加噪声,学着去噪
RDT 用的是标准 DDPM(Denoising Diffusion Probabilistic Model):
第一步:加噪(前向过程)
$$a_t^k = \sqrt{\bar\alpha^k} \cdot a_t^0 + \sqrt{1 - \bar\alpha^k} \cdot \varepsilon$$翻译成人话:
- $a_t^0$:真实的动作轨迹(64 步 x 维度)
- $\varepsilon \sim \mathcal{N}(0, I)$:随机噪声
- $k$:当前加噪到第几步(从 1 到 1000)
- $\bar\alpha^k$:噪声调度参数,随 $k$ 增大而减小
- $a_t^k$:加噪后的动作轨迹
直觉:$k$ 小 -> 噪声少,动作还比较清晰;$k$ 大 -> 噪声多,动作接近纯噪声。
第二步:训练网络预测噪声
$$\mathcal{L} = \mathbb{E}\Big[\big\| \varepsilon - f_\theta(\ell, o_t, a_t^k, k) \big\|^2\Big]$$翻译:
- $f_\theta$:RDT 网络(DiT),输入是语言 $\ell$、观测 $o_t$、加噪动作 $a_t^k$、时间步 $k$
- 输出:预测的噪声 $\hat\varepsilon$
- 正确答案:真实的噪声 $\varepsilon$
- Loss:MSE(预测噪声 vs 真实噪声)
训练目标:让网络学会"从带噪动作中识别出噪声"。训练完后,它就能从纯噪声中一步步去噪,生成合理动作。
推理时:从噪声出发,5 步去噪
用 DPM-Solver++ 加速器,只需要 5 步就能从噪声变成高质量动作(比原始 DDPM 的 1000 步快 200 倍)。
为什么用 DiT 而不是普通 Transformer?
RDT 用的是 DiT(Diffusion Transformer),和普通 Transformer 有三个关键区别:
区别一:QKNorm + RMSNorm
# 普通 Transformer
output = softmax(Q @ K.T / sqrt(d)) @ V # 可能数值爆炸
# RDT 的 DiT
Q = rmsnorm(Q) # 归一化
K = rmsnorm(K) # 归一化
output = softmax(Q @ K.T / sqrt(d)) @ V # 稳定
为什么?机器人动作是时间序列,Token 之间的对称性很重要。普通 LayerNorm 会破坏这种对称性,导致大规模预训练时数值爆炸。RMSNorm 不做中心化,保留了时间序列的对称结构。
区别二:MLP 解码器
# 普通 DiT:最后用线性层
output = linear(latent) # 线性投影
# RDT:最后用 MLP
output = mlp(latent) # 非线性投影
为什么?机器人动力学是非线性的(关节角度 -> 末端位置不是线性关系)。线性层无法捕捉这种非线性,MLP 可以。消融实验显示:去掉 MLP 解码器,灵巧操作任务成功率暴跌。
区别三:交替条件注入(ACI)
# 普通 DiT:所有条件一起注入
tokens = concat([image_tokens, text_tokens, noisy_action])
# RDT:交替注入
for layer in layers:
if layer % 2 == 0:
tokens = cross_attention(tokens, image_tokens) # 偶数层注入图像
else:
tokens = cross_attention(tokens, text_tokens) # 奇数层注入文本
为什么?图像 token 远多于文本 token(3 张图 x 196 patch = 588 token vs 文本 ~20 token)。如果同时注入,图像会"淹没"文本信息。交替注入让每种模态都有独立的交互窗口。
统一动作空间(PIUAS):让不同机器人"说同一种语言"
这是 RDT 最巧妙的设计之一。
问题:46 个数据集来自不同机器人–有的是 6 自由度机械臂,有的是 7 自由度,有的是双臂,有的是单臂。它们的动作格式完全不同。
解法:设计一个 128 维的统一向量,每个维度有固定的物理含义:
每个机器人把自己的动作"映射"到这个统一空间:
- 7 自由度双臂:填满左右臂各 7 个关节位置
- 6 自由度单臂:填右臂前 6 个位置,其余补零
- 移动机器人:额外填底座速度
好处:
- 不同机器人可以共享同一个模型
- 每个维度有物理含义–模型能学到"关节角度变化 -> 末端移动"这种可迁移的物理规律
- 未使用的维度补零,不引入噪声
训练:预训练 + 微调两阶段
预训练(大规模多机器人数据)
| 项目 | 内容 |
|---|---|
| 数据 | 46 个数据集,1M+ 轨迹,21 TB |
| 来源 | RT-1, DROID, RH20T, Mobile ALOHA, BridgeData V2, Open X-Embodiment 等 |
| 硬件 | 48 x H100 80GB GPU |
| 时间 | ~1 个月 |
| 步数 | 1,000,000 步 |
| 批大小 | 32 x 48 = 1,536 |
微调(目标任务)
| 项目 | 内容 |
|---|---|
| 数据 | 自建双臂数据集:300+ 任务,6K+ 轨迹 |
| 时间 | ~3 天 |
| 步数 | 130,000 步 |
| 数据增强 | 颜色抖动、图像损坏、高斯噪声、GPT-4 扩展语言指令 |
实验结果
零样本泛化(Zero-Shot):
| 任务 | ACT | RDT |
|---|---|---|
| 未见物体 | 25% | 50% |
| 未见场景 | 0% | 62.5% |
| 语言指令跟随 | 50% | 100% |
消融实验–扩散模型的贡献有多大?
| 变体 | 未见物体 | 未见场景 | 指令跟随 |
|---|---|---|---|
| 不用扩散(直接回归) | 12.5% | 50% | 12.5% |
| 小模型(166M 参数) | 37.5% | 62.5% | 25% |
| 不预训练(从零开始) | 0% | 25% | 62.5% |
| RDT(完整版) | 50% | 62.5% | 100% |
关键发现:扩散建模、大规模预训练、大模型规模三个因素缺一不可。
RDT-2:从"会操作"到"跨具身零样本"
RDT-1B 的局限
RDT-1B 虽然强,但有三个问题:
- 推理太慢:5 步去噪对实时控制(如打乒乓球)来说还是太慢
- 不能跨具身:训练时用的机器人和部署时必须一样
- 语言理解有限:用冻结的 T5 编码语言,不能理解复杂指令
RDT-2 的解法:用 7B VLM 替换自研骨干 + Flow Matching 替换 DDPM + 三阶段训练。
架构:7B VLM + 400M 动作专家
| RDT-1B | RDT-2 | |
|---|---|---|
| 骨干 | 自研 DiT 1.2B | Qwen2.5-VL 7B(冻结) |
| 动作生成 | DiT 自己做 | 独立动作专家 400M |
| 语言理解 | T5-XXL(冻结) | Qwen2.5-VL 原生(强得多) |
| 注意力 | Multi-Head Attention | GQA(Grouped Query Attention,更快) |
核心创新一:RVQ–把连续动作变成离散 token
这是 RDT-2 最关键的设计–用残差向量量化(RVQ)桥接语言和动作。
问题:VLM(如 Qwen)处理的是离散 token(文字),扩散模型处理的是连续向量(动作)。两者格式不兼容。
解法:用 RVQ 把连续动作编码成离散 token,让 VLM 能"看懂"动作。
RVQ 的工作原理
为什么用 RVQ 而不是普通 VQ?
| 方法 | 同等量化误差需要的 token 数 | 效率 |
|---|---|---|
| 均匀量化 | 很多(效率低) | 低 |
| RVQ | 1x(最少) | 高 |
RVQ 通过"残差逐级细化",用最少的 token 达到最低的量化误差。
RVQ 如何桥接语言和动作?
关键洞察:VLM 不直接生成动作,而是提供"理解";动作专家不理解语义,只负责"执行"。分工明确。
核心创新二:Flow Matching 替换 DDPM
RDT-2 用 Flow Matching 替换了 RDT-1B 的 DDPM,效率大幅提升。
为什么 Flow Matching 更好?
| DDPM(RDT-1B) | Flow Matching(RDT-2) | |
|---|---|---|
| 训练目标 | 预测噪声 | 预测速度场 u = A_t - epsilon |
| 路径 | 弯路(逐步加噪再去噪) | 直线(从噪声直走到动作) |
| 推理步数 | 5 步(DPM-Solver++) | 5 步(Euler 积分) |
| 训练收敛 | 较慢 | 更快(更直接的梯度信号) |
| 与 VLM 兼容 | 需要额外适配 | 天然兼容(线性插值更简单) |
Flow Matching 在 RDT-2 中的具体实现
训练时:
$$A_t^\tau = (1-\tau)\varepsilon + \tau \cdot A_t$$$$\mathcal{L}_{\text{expert}} = \mathbb{E}\Big[\big\| v_\theta(\tau, A_t^\tau, \text{VLA}(\ell, o_t)) - (A_t - \varepsilon) \big\|^2\Big]$$翻译:
- $\tau \in [0, 1]$:流时间($\tau=0$ 是噪声,$\tau=1$ 是真实动作)
- $A_t^\tau$:在 $\tau$ 时刻的插值动作
- $v_\theta$:动作专家网络,预测速度场
- 正确答案:$A_t - \varepsilon$(从噪声指向真实动作的方向)
推理时:
VLA 骨干只算一次:在整个 5 步积分过程中,Qwen2.5-VL 的输出不变–只需要编码一次图像和语言,5 步积分只跑轻量的动作专家(400M),非常快。
核心创新三:三阶段训练配方
为什么需要三阶段?直接端到端不行吗?
如果直接在 VLM 上做扩散:扩散过程的噪声会破坏 VLM 预训练的离散知识–VLM 被训练来处理清晰的离散 token,给它加噪声会让它"忘记"语言理解能力。
三阶段的精妙之处:
- Stage 1 用 RVQ 把动作变成离散 token -> VLM 用它熟悉的方式(CE loss)学习动作
- Stage 2 冻结 VLM -> 扩散过程只影响动作专家,不破坏 VLM
- Stage 3 蒸馏 -> 把多步采样压缩成单步,不改变模型能力
跨具身零样本泛化:4U 设置
RDT-2 实现了四个维度同时零样本泛化:
| 维度 | 含义 | 怎么做到的 |
|---|---|---|
| Unseen Embodiment | 从未见过的机器人 | UMI 是具身无关的–记录的是末端执行器位姿,不是关节角度 |
| Unseen Scene | 从未见过的场景 | 大规模数据覆盖 100+ 家庭环境 |
| Unseen Object | 从未见过的物体 | VLM 的开放词汇理解能力 |
| Unseen Instruction | 从未见过的指令 | VLM 的语言泛化能力 |
UMI 的关键作用:UMI(Universal Manipulation Interface)是一个手持设备,记录 6-DoF 末端执行器位姿 + 夹爪宽度。它不记录机器人关节角度–所以用 UMI 数据训练的策略,可以部署到任何机器人上(只要装了同款相机和夹爪)。
实验结果
零样本泛化(4U 设置):
RDT-2 是第一个在开放词汇任务上同时实现四个维度零样本泛化的模型。
下游任务表现:
| 任务 | RDT-1B | RDT-2 | 提升 |
|---|---|---|---|
| 拾取物体 | 62.5% | 100% | +37.5% |
| 拾取放置 | 50% | 87.5% | +37.5% |
| 擦桌子 | 25% | 75% | +50% |
| 按按钮 | 37.5% | 87.5% | +50% |
| 摇晃物体 | 12.5% | 62.5% | +50% |
打乒乓球(高速动态任务):
RDT-2-UltraFast(1 步蒸馏版)在打乒乓球任务上超越了所有基线,包括比它小得多的模型–证明单步蒸馏既快又准。
RDT -> RDT-2 的技术演进总结
| 维度 | RDT-1B(2024) | RDT-2(2026) | 为什么改 |
|---|---|---|---|
| 骨干网络 | 自研 DiT 1.2B | Qwen2.5-VL 7B + 动作专家 400M | VLM 的语言/视觉理解远强于自研编码器 |
| 生成方法 | DDPM(5 步) | Flow Matching(5 步->1 步蒸馏) | FM 训练更快,蒸馏后推理更快 |
| 动作编码 | 连接直接输入 | RVQ 离散化 | 桥接 VLM 的离散 token 空间和动作的连续空间 |
| 训练方式 | 单阶段扩散训练 | 三阶段(RVQ->FM->蒸馏) | 保护 VLM 知识不被扩散破坏 |
| 数据 | 46 数据集 1M 轨迹 | 10,000+ 小时 UMI | 更大规模 + 具身无关数据 |
| 泛化能力 | 同具身零样本 | 跨具身零样本(4U) | UMI + VLM 的开放词汇能力 |
| 推理速度 | 5 步去噪 | 1 步生成 | 蒸馏压缩,实时控制 |
一句话总结
RDT 证明了"扩散模型 + 大规模预训练"是机器人基础模型的有效路径;RDT-2 在此基础上用 VLM 替换自研骨干、用 Flow Matching 替换 DDPM、用 RVQ 桥接语言与动作,实现了跨具身的零样本泛化–从"会操作一个机器人"进化到"理解任务后在任何机器人上操作"。
个人解读与思考
1. 扩散模型在机器人领域的独特优势
扩散模型在图像生成领域被 Flow Matching 追赶(后者更快),但在机器人动作生成领域仍有独特优势:
- 多模态建模:双臂协调天然多模态,扩散模型能自然建模
- 动作平滑性:去噪过程天然产生平滑轨迹(不像离散 token 可能有跳变)
- 采样可控:可以通过调整去噪步数在质量和速度间权衡
RDT-2 的 Flow Matching 进一步说明:只要底层是生成式模型,具体用 DDPM 还是 FM 不重要,重要的是大规模数据 + 可扩展架构。
2. RVQ 是连接语言和动作的关键桥梁
RDT-2 最有启发性的设计是 RVQ–它解决了一个根本问题:VLM 处理离散 token,动作是连续向量,两者格式不兼容。
RVQ 不是唯一解法(pi0 用的是直接在连续空间做 Flow Matching),但它有一个独特优势:让 VLM 用它最熟悉的方式(下一个 token 预测)来理解动作。这保留了 VLM 预训练的全部知识。
3. UMI 数据是跨具身泛化的关键
RDT-2 的跨具身能力不是来自模型架构,而是来自数据–UMI 记录的是末端执行器位姿(具身无关),不是关节角度(具身相关)。这意味着:
数据格式的统一比模型架构的统一更重要。
4. 蒸馏让实时控制成为可能
RDT-2-UltraFast 的 1 步蒸馏证明:多步去噪的知识可以压缩到单步。这对高速任务(打乒乓球、接球)至关重要–5 步去噪的延迟可能让机器人错过最佳击球时机。
一句话总结
RDT = 扩散模型生成机器人动作(DiT 骨干 + DDPM + 统一动作空间,1.2B 参数,1M+ 轨迹预训练)。RDT-2 = VLM 理解 + Flow Matching 生成(7B VLM + RVQ 桥接 + 三阶段训练 + 1 步蒸馏,10K+ 小时 UMI 数据,跨具身零样本泛化)。
深度拆解:RVQ、DiT、GQA、PIUAS、π0 对比等核心概念全讲透
这一节专门回答常见困惑,每个概念都从"它到底是什么"讲起,配合流程图和伪代码。
一、RVQ 到底在干嘛?–为什么 Flow Matching 能直接输出连续动作,还要搞离散 token?
这是最核心的困惑。先说结论:
Flow Matching 确实能直接输出连续动作序列。RVQ 不是给 Flow Matching 用的,而是给 VLM 用的。
问题的根源:VLM 和动作专家"说不同的语言"
RVQ 就是这个"翻译官"–它让 VLM 能"理解"动作,同时让动作专家能"接收" VLM 的理解。
RVQ 的完整工作流程
为什么用 RVQ 而不是普通 VQ?
普通 VQ(向量量化):
RVQ(残差向量量化):
类比:
RVQ vs 普通 VQ
| 普通 VQ | RVQ(RDT-2) | |
|---|---|---|
| 量化方式 | 1 级量化 | 8 级残差量化 |
| 每个时间步需要的 token 数 | 1 个 | 8 个 |
| 量化精度 | 低(码本要很大才够用) | 高(残差累积逼近原值) |
| 码本大小 | K(如 1024) | 8 x K = 8K(但等效 K^8 的表达能力) |
| 为什么选 RVQ | - | token 少 + 精度高 |
为什么不用 Flow Matching 直接输出连续动作,非要加 RVQ?
核心原因:VLM 需要离散 token 才能"理解"动作。
方案 C:π₀ 原版的做法(不用 RVQ,也不用 FAST)
RVQ 在 RDT-2 完整 pipeline 中的位置
一句话总结 RVQ 的作用
RVQ 是训练时的"桥梁":把连续动作变成离散 token,让 VLM 用它熟悉的方式(CE loss)学会理解动作。推理时不需要 RVQ–VLM 直接输出特征向量,动作专家直接生成连续动作。
二、DiT vs 普通 Transformer:架构到底有什么区别?
DiT(Diffusion Transformer)不是"发明了一种新 Transformer",而是在标准 Transformer 基础上做了三处关键修改,让它特别适合做扩散模型的骨干网络。
完整架构对比
三处关键修改的详细解释
修改一:RMSNorm 替换 LayerNorm
# LayerNorm(普通 Transformer)
def layer_norm(x):
mean = x.mean(dim=-1, keepdim=True)
std = x.std(dim=-1, keepdim=True)
return (x - mean) / (std + eps) # 中心化 + 缩放
# RMSNorm(DiT)
def rms_norm(x):
rms = x.pow(2).mean(dim=-1, keepdim=True).sqrt()
return x / (rms + eps) # 只缩放,不中心化
为什么?机器人动作是时间序列,token 之间的相对位置关系很重要。LayerNorm 会把每个 token 的均值减掉,破坏了"这个 token 比那个 token 大多少"的相对关系。RMSNorm 不减均值,保留了这种对称性。
修改二:QKNorm(Query-Key Normalization)
# 普通 Transformer 的注意力
Q = x @ W_Q # 可能值很大
K = x @ W_K # 可能值很大
attn = softmax(Q @ K.T / sqrt(d)) # Q @ K.T 可能爆炸 -> softmax 饱和 -> 梯度消失
# DiT 的注意力
Q = rms_norm(x @ W_Q) # 归一化到合理范围
K = rms_norm(x @ W_K) # 归一化到合理范围
attn = softmax(Q @ K.T / sqrt(d)) # 数值稳定
为什么?扩散模型在去噪过程中,噪声大小从 0 到 1 变化很大。如果不做 QKNorm,注意力分数会随噪声大小剧烈波动,训练不稳定。QKNorm 保证注意力分数始终在合理范围内。
修改三:MLP 解码器替换线性层
# 普通 DiT / Transformer:最后用线性层
output = linear(transformer_output) # 线性投影:y = Wx + b
# RDT 的 DiT:最后用 MLP
h = silu(linear1(transformer_output)) # 第一层:y₁ = SiLU(W₁x + b₁)
output = linear2(h) # 第二层:y₂ = W₂y₁ + b₂
为什么?机器人动力学是高度非线性的:
消融实验验证:去掉 MLP 解码器,换成线性层,灵巧操作(如拧瓶盖)的成功率从 62.5% 暴跌到 25%。
DiT 的 Adaptive Normalization:条件注入的机制
DiT 有一个普通 Transformer 没有的东西–Adaptive Normalization(自适应归一化):
# 普通 Transformer:条件信息通过注意力注入
# 所有条件(图像、文本、时间步)都 concat 成 token 序列
# DiT:条件信息通过归一化层注入
def adaptive_norm(x, condition):
# condition 包含时间步 t 和语言/图像信息
gamma, beta = mlp(condition).chunk(2, dim=-1) # 从条件生成缩放和偏移
return rms_norm(x) * (1 + gamma) + beta # 缩放 + 偏移
# 在每个 DiT Block 中:
x = x + self_attn(adaptive_norm(x, condition))
x = x + ffn(adaptive_norm(x, condition))
为什么?扩散模型需要知道"当前在去噪的第几步"。这个时间步信息通过 Adaptive Normalization 注入每一层,而不是通过注意力。这样时间步信息能直接影响每一层的特征分布,而不仅仅是"参与计算"。
三、GQA vs MHA:注意力机制的区别
这是 RDT-1B 和 RDT-2 在骨干网络层面的核心区别之一。
MHA(Multi-Head Attention)– RDT-1B 用的
GQA(Grouped Query Attention)– RDT-2 用的
直观理解
为什么 RDT-2 选 GQA?
| MHA(RDT-1B) | GQA(RDT-2) | |
|---|---|---|
| KV 缓存 | 大(每个头一组 KV) | 小(g 组 KV) |
| 推理速度 | 慢 | 快 30-50% |
| 显存占用 | 高 | 低 |
| 表达能力 | 强 | 略弱,但够用 |
| 适用场景 | 模型小(1.2B),不需要极致优化 | 模型大(7B),需要控制计算量 |
RDT-2 用 7B 的 Qwen2.5-VL,如果用 MHA,KV 缓存会非常大。GQA 把 KV 头从 32 个减到 8 个,推理时省了 75% 的 KV 缓存,速度提升明显。
四、统一动作空间(PIUAS):到底是什么?
你说得对–PIUAS 本质上就是**“动作分桶分区间”**。但它的设计比简单的分桶更巧妙。
简单分桶 vs PIUAS
PIUAS 的完整维度定义
为什么 PIUAS 比简单分桶好?
| 简单分桶 | PIUAS | |
|---|---|---|
| 维度含义 | 无(桶编号 128 是什么?) | 有(维度 30 = 右末端 x 坐标) |
| 跨机器人 | 桶编号对不上,不能共享模型 | 维度对齐,可以共享模型 |
| 物理规律 | 模型需要重新学习 | 模型能学到"维度 0 变化 -> 维度 30 变化"的物理规律 |
| 未使用维度 | 不确定填什么 | 补零,明确无歧义 |
核心insight:PIUAS 让不同机器人的动作"说同一种语言"。模型在预训练时学到了"关节角度变化 -> 末端位置变化"这种可迁移的物理规律,而不是"这个机器人的编号 128 对应那个机器人的编号 256"这种不可迁移的映射。
五、UMI 和 4U 到底是什么?
UMI(Universal Manipulation Interface)
UMI 是斯坦福 Qiuyuan(Chi)团队在 2024 年提出的一个数据采集接口,核心思想是:
不记录机器人的关节角度,而是记录末端执行器的位姿。
UMI 硬件
4U(四个 Unseen)
RDT-2 实现了四个维度同时零样本泛化:
为什么 4U 很厉害?
六、π₀ vs RDT-2:到底有什么区别?
很多人觉得 π₀ 和 RDT-2 很像(都是 VLM + 动作专家),但它们在动作专家如何获取 VLM 信息这个关键设计上有本质区别。
先搞清楚:π₀ 有两个版本
Physical Intelligence 发布了两个模型,很多人搞混:
| π₀(原版) | π₀-FAST(变体) | |
|---|---|---|
| 动作生成 | Flow Matching(连续输出) | 自回归 token 预测(离散输出) |
| 动作编码 | 不需要(直接 cross-attention 读 VLM) | FAST tokenizer(DCT + BPE 压缩) |
| 推理速度 | 快(10 步去噪,~100ms) | 慢(30-60 个 token 逐个生成,~750ms) |
| 动作专家 | 300M 参数的独立 action expert | 用整个 2B VLM 做自回归解码 |
关键:π₀ 原版没有 FAST。π₀ 原版的动作专家通过 cross-attention 直接读取 VLM 的 KV cache,不需要任何离散化。π₀-FAST 才用 FAST tokenizer 做自回归解码。
架构对比:cross-attention vs RVQ
这是两个模型最核心的区别–动作专家如何获取 VLM 的语义信息:
核心区别:cross-attention 的起点不同
类比:
核心区别对比表
| 维度 | π₀ 原版 | π₀-FAST | RDT-2 |
|---|---|---|---|
| VLM | PaliGemma 3B | PaliGemma 3B | Qwen2.5-VL 7B |
| 动作生成 | Flow Matching | 自回归 token | Flow Matching |
| 动作专家如何读 VLM | cross-attention 读 KV cache | VLM 直接解码 token | cross-attention 读 VLM 特征 |
| 是否需要离散化 | 不需要 | 需要(FAST tokenizer) | Stage 1 需要(RVQ),推理时不需要 |
| VLM 是否需要理解动作 | 不需要 | 需要(学预测动作 token) | 需要(RVQ Stage 1 训练) |
| 训练阶段 | 2 阶段 | 2 阶段 | 3 阶段(多一步蒸馏) |
| 推理步数 | 5-10 步 | 30-60 token | 1 步(蒸馏后) |
| 模型大小 | 3B + 300M 动作专家 | 3B(全模型解码) | 7B + 400M |
| 跨具身 | 弱 | 弱 | 强(UMI + 4U) |
为什么 RDT-2 要用 RVQ 而不是直接 cross-attention?
这是最核心的问题。既然 π₀ 直接 cross-attention 就能工作,为什么 RDT-2 还要搞 RVQ?
一句话总结
π₀ 和 RDT-2 的根本区别不在于"用不用离散化",而在于"VLM 是否需要理解动作"。π₀ 的 VLM 不需要理解动作,动作专家自己从原始特征中提取信息;RDT-2 的 VLM 被 RVQ “教会"了理解动作,输出的特征更有语义,动作专家更容易学习。
七、为什么 Flow Matching 能直接输出连续动作,还要 RVQ?–最核心的困惑解答
这个问题值得单独回答,因为它是理解 RDT-2 架构的关键。
先澄清一个误解
RVQ 不是在推理时把 Flow Matching 的输出离散化。RVQ 是在训练时让 VLM “理解"动作的工具。
那 RVQ 在哪用?
为什么不能跳过 Stage 1,直接训练动作专家?
一句话总结
RVQ 是训练时的"脚手架”:帮助 VLM 理解动作。房子盖好后(训练完成),脚手架拆掉(推理时不用 RVQ),房子照样站得住(VLM 输出的特征已经有语义了)。
参考
- RDT-1B:Liu S, Wu L, Li B, et al. RDT-1B: a Diffusion Foundation Model for Bimanual Manipulation (ICLR 2025)
- RDT-2:Liu S, Li B, Ma K, et al. RDT2: Exploring the Scaling Limit of UMI Data Towards Zero-Shot Cross-Embodiment Generalization (arXiv:2602.03310)
- 代码库:
https://github.com/thu-ml/RoboticsDiffusionTransformer - 模型:
https://huggingface.co/robotics-diffusion-transformer/rdt-1b - DiT:Peebles & Xie, Scalable Diffusion Models with Transformers (ICCV 2023)
- DDPM:Ho et al., Denoising Diffusion Probabilistic Models (NeurIPS 2020)
- Flow Matching:Lipman et al., Flow Matching for Generative Modeling (ICLR 2023)
- UMI:Chi et al., Universal Manipulation Interface (RSS 2024)
- π₀:Black K, et al. π₀: A Vision-Language-Action Flow Model for General Robot Control (2024)