π0: A Vision-Language-Action Flow Model for General Robot Control
| 作者: Kevin Black; Noah Brown; Danny Driess; Adnan Esmail; Michael Equi; Chelsea Finn; Niccolo Fusai; Lachy Groom; Karol Hausman; Brian Ichter; et al. |
| 期刊: , |
| 期刊分区: |
| 本地链接: Black 等 - π0 A Vision-Language-Action Flow Model for General Robot Control.pdf |
| URL: |
| 摘要: |
| 标签: |
| 笔记日期: 2026/3/22 19:42:44 |
📜 研究核心
Tips: 做了什么,解决了什么问题,创新点与不足?
提出三大挑战
- 海量数据需求:为了实现广泛适应性,模型需要在多任务、多机器人类型的大规模数据集上进行训练。
- 合适的网络架构:设计能够对齐多模态数据(图像、文本和动作)的架构,充分挖掘预训练与微调的潜力。
- 精确的训练策略:精心设计的训练流程,合理分配预训练和微调的数据,以确保模型具备泛化能力,并能够高效执行任务。三大挑战:大规模数据、架构、训练策略/方法→提出pi0模型:一种基于 预训练视觉语言模型(VLM) 和 流匹配模型(Flow Mathing) 的新型架构。
1、整合多样的数据源:
首先利用一个预训练的视觉-语言模型(VLM)来导入互联网规模的经验。基于VLM构建他们的模型,使其继承了语言模型和视觉-语言模型的通用知识、语义推理和问题解决能力。其次,进一步训练模型以整合机器人动作,使其成为一个视觉-语言-动作(VLA)模型。
为了能够利用多种不同的机器人数据源,作者采用跨体态训练,即将多种类型机器人的数据合并到同一个模型中。
这些不同类型的机器人具有不同的构型空间和动作表示,包括单臂和双臂系统,以及移动操作机器人。
2、在模型的架构上
为了能够执行高度灵巧和复杂的物理任务,作者使用带有流匹配的动作分块架构(即动作分块算法ACT)来表示复杂的连续动作分布
相当于通过流匹配微调VLM以生成动作(且是多时间步的动作块)
那为何要这么做呢?原因很简单,VLM 可以有效地从网络上传输语义知识,但它们经过训练只能输出离散语言token。灵巧的机器人操作需要π0以高频率(比如高达每秒 50 次)输出运动命令。为了提供这种级别的灵活性,他们通过流匹配为预训练的 VLM 提供连续动作输出
且为了将流匹配与VLM结合,他们使用了一种新颖的动作专家,它通过流式输出(flow-based outputs)增强了标准VLM
3、在训练策略/方法上:
预训练+微调 模式 的概念:首先在高度多样化的机器人数据上进行预训练,然后再针对所需任务进行微调或prompt会更加有效
⚙️ 内容
一、模型架构:
![[π0--A-Vision-Language-Action-Flow--9C6Y3H3P.assets/XJGNXH7J.png|1599]]
1.预训练数据集:
- 包括团队自有的灵巧操作数据集(第V-C节)与OXE(Open X-Embodiment)数据集的加权组合组成,该数据集涵盖7种不同的机器人配置,涉及68项不同任务,而OXE数据集包含包含22种机器人的数据
补充:
1.预训练阶段还使用了多样化的语言标签,结合了任务名称和片段标注(对子轨迹的细粒度标签,通常长度约为2秒)
预训练阶段的目的是训练一个基础模型,使其具备广泛的能力和泛化能力,但不必针对任何单一任务达到高性能。该基础模型能够根据语言指令执行多种任务,具备初步的熟练度
2.对于复杂且需要灵巧操作的任务,随后采用后训练流程,利用高质量的精心策划数据将模型适配到特定的下游任务
3.他们研究了数据量较小至中等的高效后训练,以及针对如折叠衣物和移动操作等复杂任务,采用较大规模数据集的高质量后训练——即微调
2.输入:
- 图像 → ViT → image tokens
- 语言 → text tokens
- 状态 q_t → state embedding
3.pi0模型**(改造 PaliGemma——增加额外的输入输出、引入流匹配时间步、加上动作专家权重)**:
做了以下三点改造:
-
为机器人特定的token增加了额外的输入和输出投影,包括状态向量qt和动作向量At
-
增加了一个用于 “融合流匹配时间步” 的MLP信息
-
以及动作专家(比如gemma_300m)的一组较小的权重
设计类似于专家混合模型,其中有两大模块:
- 第一大模块用于图像和文本(比如人类指令)输入
- 第二大模块用于机器人特定的输入(比如机器人的状态),和输出(比如预测的机器人动作),该第二组权重称为动作专家
- VLM Backbone:π0模型主要由一个语言模型transformer骨干组成。
![[π0--A-Vision-Language-Action-Flow--9C6Y3H3P.assets/7GGDIK2H.png|3898]]
图像编码器 将机器人的 图像观测数据 嵌入到 与 语言标记 相同的嵌入空 间:[image tokens + language tokens]
再进一步通过机器人专用输入输出——即**本体感觉 状态(proprioceptive state)与机器人动作(robot actions)**来对主干进行增强
- Action Expert、Flow Matching:
action expert 根据文本指令去噪生成具体的连续的动作——而无需像RT-2那样对其进行离散化或token化(discretize or tokenize)。
π0使用条件流匹配[28,32]来建模动作的连续分布。流匹配为他们的模型提供了高精度和多模态建模能力,使其特别适合高频率的灵巧操作任务;
该架构灵感来自Transfusion [59],该方法通过多目标训练单一transformer,其token对应的连续输出(比如机器人的动作)通过流匹配(扩散风格)损失进行监督,离散输出的token通过交叉熵损失进行监督(在Transfusion的基础上,他们还发现,为机器人特定的(动作和状态)token使用一套单独的权重能够提升性能)
- 数学建模 $p(A_t|o_t)$
1、未来动作序列$A_t$ (作者在任务中使用H=50,即一次性预测未来的50个连续动作块):
$$ A_t = [a_t, a_{t+1}, ..., a_{t+H−1}] $$
对于动作块 $A_t$ 中的每个动作 $a_t$,都有一个相应的动作token,将其输入动作专家action expert(转化而来)
$ A_t$ 表示的是输出的预测动作——相当于是不带有噪声的动作
$A_t^τ$ 表示的是输入噪声动作——相当于是带有噪声的动作
(动作输入用的绿色字体,动作输出用的红色字体 )
$$ A^τ_t = τA_t + (1 −τ)ϵ $$
其中下标t表述机器人时间步,上标τ∈[0,1]表述流匹配时间步,而ε代表纯噪声
2、观测值$ o_t$
由多张RGB图像、一个语言指令和机器人的本体状态组成,即:
$$ o_t[I_{1t},... ,I{nt},l_t ,q_t] $$
图像 $ I_t$ 和关节角向$ q_t$ 通过各自的编码器进行编码,然后通过线性投影层:投影到与语言token相同的嵌入空间中。
在训练过程中,使用条件流匹配损失Conditional Flow Matching[28,32],来监督这些动作token
![[π0--A-Vision-Language-Action-Flow--9C6Y3H3P.assets/RF57NLGF.png|444]]
![[π0--A-Vision-Language-Action-Flow--9C6Y3H3P.assets/VZDXPKEV.png|957]]
整体含义: 训练阶段的目的,是用均方误差MSE去迫使神经网络预测的“速度方向”,无限逼近那个绝对正确的“真实速度方向”
- 具体训练流程
第一步,构建中间状态(加噪操作)
网络先通过随机采样符合正太分布的噪声τ,进行训练,计算“带噪声的动作”:
$$ A^τ_t = τA_t + (1 −τ)ϵ $$
噪声 $ϵ ∈N(0,1)$
原始流匹配的论文 时间变量 $τ ∈ u(0,1)$
在此,作者设计了一个强调低时间步(高噪声水平)的时间步采样分布![[π0--A-Vision-Language-Action-Flow--9C6Y3H3P.assets/ZHK9FRWF.png|204]]
第二步:训练
训练网络输出 $v_θ(A^τ_t,o_t)$ 去匹配 去噪向量场$u(A^τ_t,A_t)$
$v_θ$ 代表预测的向量场,或预测的速度 (预测的是中间状态(下一步以什么样的速度往哪走))
$u$ 代表从纯噪声直接指向干净动作的真实向量场,或真实速度(是终点向量 - 起点向量)
$u(A^τ_t|A_t)=A_t-ϵ$
![[π0--A-Vision-Language-Action-Flow--9C6Y3H3P.assets/CK4EUJU9.png|235]]
即:目标速度向量 = 终点向量(干净动作) - 起点向量(纯噪声)
做loss:
![[π0--A-Vision-Language-Action-Flow--9C6Y3H3P.assets/PPI3EGCH.png|444]]
![[π0--A-Vision-Language-Action-Flow--9C6Y3H3P.assets/64DGCD7L.png|963]]
- 动作专家使用完全双向注意力掩码,使得所有动作token都能够相互关注
- 关于注意力掩码
![[π0--A-Vision-Language-Action-Flow--9C6Y3H3P.assets/XEETZV3C.png|1296]]
4.输出:
- 动作序列:连续值、高频
二、代码:
![[π0--A-Vision-Language-Action-Flow--9C6Y3H3P.assets/LDT66W2Q.png|1764]]
💡 创新点
1.多样数据集(机械臂多样);
2.多样训练策略(复杂场景,机械臂预训练)。
3.加强了 预训练+微调 模式 的概念:首先在高度多样化的机器人数据上进行预训练,然后再针对所需任务进行微调或prompt会更加有效(可以解决数据稀缺的问题,因为通用模型可以利用更多的数据来源——包括其他任务、其他机器人,甚至非机器人领域的数据)
4.模型架构:VLM+action expert(transformer, flow-matching)
openvla问题:低赫兹频率运动,
diffusion policy:看未来很多步,一种生成方法,最初被用在图像生成领域。图像生成技术,如stable diffusion和midjourney。思想核心:逐步地对图像进行调整和改善,从而生成高质量图像
流匹配的工作方式和扩散模型有些类似,核心思想都是通过逐步添加噪声来简化数据分布,然后逐步去噪得到隐私数据「Google deepmind团队专门有一篇文章阐述流匹配其实与扩散模型是等价的,详见:diffusionflow.github.io/」
具体而言
-
训练时,随机对动作施加高斯噪声,并训练模型输出去噪向量场
推理时,从高斯噪声开始,通过数值积分向量场生成动作序列 -
不同之处在于
流匹配直接对数据和噪声分布之间的映射场(vector field)进行建模,训练目标是匹配这一映射场
🧩 不足
🔁 研究内容
💧 数据
👩🏻💻 方法
🔬 实验
📜 结论
🤔 个人总结
Tips: 你对哪些内容产生了疑问,你认为可以如何改进?
openvla:图片 先经 视觉模型 处理,在融合语言指令到语义大模型;
pi0:图片和语言指令 组合 到 VLM(多模态大模型)