: a Vision-Language-Action Model with Open-World Generalization
Paper: arXiv:2504.16054 Code: Physical-Intelligence/openpi Code reference:
kevin/pi05-support@84ebae7(2025-09-03)
1. Motivation (研究动机)

Figure 1 解读:这张 teaser 把论文真正想解决的问题放在最前面:机器人不是在干净的实验台上完成单步 pick-and-place,而是在真实住宅里连续清理厨房、卧室、抽屉、洗衣篮等混乱场景。图中关键不是某一个抓取动作,而是“开放世界”变量同时出现:新房间布局、新物体、新任务顺序、长时间执行、移动底盘导航、双臂操作、抽屉和篮子等可交互容器。 的目标正是把 VLA 从短程技能扩展到这些现实任务。
这篇论文的动机可以概括为一句话:已有 Vision-Language-Action 模型在实验室任务上已经很强,但还没有证明它们能在完全新住宅中做长程、灵巧、语义开放的家务操作。 这类端到端 action-chunking VLA 能把图像、语言和机器人状态映射成连续动作,适合低层控制;RT-2、OpenVLA、Octo 等模型也显示了大规模视觉语言预训练和机器人数据混合的价值。但真实家庭场景有几个额外难点:第一,任务时长从几十秒变成数分钟甚至十几分钟,策略必须持续选择下一步子任务,而不是只执行一个短命令;第二,环境分布极宽,厨房台面、抽屉位置、篮子形状、杂物类别、光照、遮挡都在变化;第三,机器人需要同时处理导航、双臂末端位姿、夹爪、升降机构和物体语义,错误会累积;第四,真实可收集的目标域数据非常少,不能只靠在最终住宅任务上模仿学习。
论文明确指出,机器人要真正有用,必须能离开实验室,在用户没有见过的家庭里完成“practically relevant tasks”。这与很多 benchmark 的泛化不同:不是换一个物体颜色或桌面位置,而是换整个房子、换任务组合、换人类自然语言目标。比如“把盘子放到水槽里”在训练集里可能出现过盘子和水槽,但测试房子的水槽形状、台面杂物、可达路径和光照都不同;“把衣服放进篮子”还要求机器人在地面或床边找到柔性物体、抓取、移动并把它放进容器。单纯扩大同一实验台数据,往往只能提升局部技能,不能解决这种系统级泛化。

Figure 2 解读:Figure 2 展示了 在新厨房里清理的连续过程。它强调论文评估的不是静态识别,也不是一次抓取,而是一串物理动作和语义决策:定位目标物、移动到可操作位置、抓取、打开或避开障碍、把物体放到指定容器。这样的图很重要,因为它把“open-world generalization”从抽象口号落到具体现象:策略必须在新环境中把视觉语义、低层控制和长程任务分解连接起来。
研究这个问题值得做,原因在于它是通用机器人从 demo 走向部署的瓶颈。家庭服务机器人、仓储整理、办公室清洁都需要在变化环境中执行人类语言目标,而不是只在工程师布置好的场景内复现训练轨迹。如果 VLA 模型能通过跨机器人、跨任务、web 数据和高层语义标注获得这种泛化,那么机器人学习可以少依赖每个新房子的专门收集;反过来,如果模型只能在见过的房间里工作,大规模端到端学习的部署价值会非常有限。
这篇论文选择的突破点也很现实:作者没有把问题简化成“训练一个更大的 Transformer”或者“接一个外部规划器”。他们认为开放世界泛化来自多种知识源的协同迁移:目标移动操作数据提供真实家务行为;非移动但家庭场景里的多形态机器人数据提供丰富操作技能;跨 embodiment 数据和 Open X-Embodiment 扩展动作覆盖;web 视觉语言数据提供物体、场景和关系语义;高层子任务标签教模型把长程目标拆成当前可执行的语言子目标;verbal instruction 数据让低层策略能被语义子任务稳定驱动。这种动机使论文从“单模型控制”转向“数据混合与训练接口设计”。
2. Idea (核心思想)
核心思想是:把一个 VLA 同时训练成高层语义策略和低层连续控制器,并让它在训练阶段接触远多于目标任务的异构数据,从而把 web 语义、跨机器人操作经验、家庭场景变化和目标移动操作数据迁移到新住宅任务。 不是简单的 微调版;它引入了 hybrid multi-modal examples,把图像观测、语言命令、目标框或语义标签、子任务文本、离散动作 token 和连续 action chunk 放在同一个 token routing/attention 框架中训练。
论文的一个关键创新是两阶段训练。第一阶段预训练主要使用离散 token 目标,混合 MM、ME、CE、HL、WD 等数据源,使 VLM backbone 学到家庭场景、跨 embodiment 操作和高层语义预测;这一阶段连续 flow action loss 的权重 。第二阶段在 280k gradient steps 之后继续训练 80k steps,把成功且较短的目标域轨迹、verbal instruction 数据和 web data 混合起来,并打开 flow matching 动作专家,,让模型既保持语义泛化,又能产生稳定的连续控制。
与现有方法的根本差别在于, 不把长程任务完全交给外部 LLM planner,也不只把动作离散化成 FAST token 后做语言建模。论文中的策略分解为: 其中 是人类给的长程指令, 是模型自己预测的当前子任务, 是连续动作 chunk。这个公式的直觉是:高层模块把“清理厨房”变成“pick up the plate”“put the plate in the sink”等短命令,低层模块只需要在当前短命令下生成连续动作。与 GPT-4 之类外部 planner 相比,高层预测是在机器人数据、家庭图像、成功轨迹和低层可执行命令上共同训练出来的,因此更贴近机器人实际能力边界;与纯端到端隐式策略相比,显式子任务又提供了更长程的语义状态。
的另一个不同点是它保留连续动作建模,而不是完全依赖动作 token。FAST 这类离散动作 tokenizer 适合把动作纳入语言模型交叉熵训练,但真实机器人控制需要高频、精细、连续的末端位姿、底盘速度、夹爪和升降控制。论文因此把离散 token 预训练和 flow matching 后训练结合起来:预训练用离散目标吸收大规模异构数据,后训练用连续速度场学习部署所需动作。这种混合比纯 或纯 -FAST+Flow 更能兼顾语义泛化与控制精度。
从贡献角度看,论文给出的不是单个模块发明,而是一套面向开放世界家庭机器人的训练 recipe:一是提出 架构和训练目标,把高层语言预测与低层 flow action expert 结合;二是系统构建多源数据混合,尤其是约 400 小时、约 100 个家庭环境的 mobile manipulation 数据,以及 ME、CE、HL、WD、VI 数据;三是在真实未见住宅和 mock home 中评估长程清理任务,并用 ablation 证明数据源、地点数量和高层推理机制都影响泛化。
3. Method (方法)

Figure 3 解读:Figure 3 是整篇论文的方法中心。左侧展示输入可以来自多视角图像、语言、状态、目标框、语义子任务或动作;中间是 PaliGemma VLM backbone 与 action expert 组成的 Transformer;右侧输出既可以是文本 token,也可以是连续 action chunk。图的重点是“同一模型、不同 token 类型、不同训练目标”:web data 教视觉语言,HL/VI 教高层语义和低层语言条件,机器人动作数据教控制。这样模型不是把一个任务专门调好,而是在统一接口里学习跨数据源可迁移的机器人知识。
3.1 问题形式化与策略分解
论文仍以行为克隆为基本学习框架。给定观测 、语言指令 和动作序列 ,标准 action-chunking VLA 最大化: 这在短程任务中可行,但长程家务任务会把一个过大的语言目标压到一次低层控制里。 的做法是把动作策略因子化为高层子任务预测和低层动作生成: 这种分解并不等同于传统 hierarchical RL,因为高层和低层不是两个完全独立训练的模块,而是在同一个 VLA 训练 recipe 中通过不同数据样本和 token mask 共同学习。高层预测输出自然语言子任务,例如“pick up the bowl”或“place the towel in the basket”;低层动作模型把子任务、图像和机器人状态转成未来 个时间步的动作 chunk。部署时模型先自回归生成 ,再用 10 步 denoising 生成连续动作。
3.2 多模态 token 路由与注意力结构
的 Transformer 输入被组织成多种 token:图像 patch token、文本 token、离散机器人状态 token、FAST 动作 token、目标框/定位 token、以及连续动作专家 token。论文的关键工程判断是:不要为每种数据写完全不同的模型,而是让不同数据源都能投影到统一序列,然后通过 token type routing、expert 选择和 attention mask 控制信息流。对于只有 web caption 的样本,模型只需要训练文本预测;对于 high-level label 样本,模型训练子任务文本;对于动作样本,模型训练动作 token 或连续 flow;对于目标框样本,模型训练物体定位。

Figure 18 解读:Figure 18 展示了注意力 mask 的细节。图像和任务文本构成 prefix,彼此可以双向注意;动作或待生成 token 构成 suffix,通常以自回归或 action horizon 顺序组织,只能看 prefix 和已允许的 suffix 上下文。这与代码中的 embed_prefix / embed_suffix 结构一致:prefix 负责多视角感知和语言条件,suffix 负责动作生成或 token 生成。这个 mask 设计使同一个 Transformer 能同时服务理解任务和控制任务。
released code 中,src/openpi/models/pi0.py 的 Pi0Config(pi05=True) 把 max_token_len 默认提高到 200,并把 discrete_state_input 设为 True;embed_prefix 依次嵌入多视角图像和 tokenized prompt,并给 prefix 使用非自回归 mask;embed_suffix 把 noisy action 投影到 action expert 宽度,并在 模式下通过 adaRMSNorm 注入 flow timestep。src/openpi/models/tokenizer.py 的 PaligemmaTokenizer.tokenize(prompt, state) 则把状态按 256 个 bin 离散到 Task: ..., State: ...; Action: 格式。这说明论文中的“状态也进入离散语言上下文”在 released code 中有直接对应。
3.3 Flow matching 动作专家
低层连续动作不是直接回归,而是通过 flow matching 学习从噪声到动作分布的速度场。论文定义插值: 监督目标为: 结合文本/离散 token 的交叉熵目标,总损失写作: 这里 是文本或离散 token 的交叉熵, 是 action expert 预测的速度场, 控制连续动作项权重。论文预训练阶段设置 ,后训练阶段设置 。这种安排的直觉是先让模型通过离散 token 和 web/robot 多源数据学语义与任务结构,再用连续 flow matching 把策略调到可执行控制。

Figure 12 解读:Figure 12 对比了 、-FAST+Flow 和 。图中趋势说明,单纯延长 训练或把 FAST 与 flow 结合,还不足以获得开放家庭任务泛化; 的优势来自完整训练配方,包括 high-level / web data / hybrid discrete-to-continuous recipe。由于论文以柱状图呈现百分比而没有在正文列出完整原始数值表,笔记不复写近似数字,只保留趋势和可核验的训练设置。
与 相比, 的时间条件注入方式也变了。Appendix E 说明它使用单独 MLP 处理时间 ,并通过 adaptive RMSNorm 影响 action expert:
其中 是 sinusoidal positional encoding。released code 中相应逻辑在 Pi0.embed_suffix: 分支对 timestep 先做 posemb_sincos,再通过 time_mlp_in/out 与 swish,最后作为 adarms_cond 输入 action expert;非 分支则把 timestep token 与 action token 拼接后过 MLP。Appendix E 还给出 timestep 采样近似:
released code 使用 jax.random.beta(time_rng, 1.5, 1) * 0.999 + 0.001,因此实际采样避开 0 端点,支持最多约 1000 个积分步。sample_actions 默认从 Gaussian noise 开始,用 10 步欧拉积分返回动作 chunk;代码注释还特别说明它采用 diffusion 文献更常见的 convention,即 t=1 是噪声、t=0 是目标,这与 paper 的 convention 相反。笔记在这里采用 released code 的推理方向描述,避免把公式方向和实现方向混淆。
3.4 数据混合:MM、ME、CE、HL、WD、VI

Figure 4 解读:Figure 4 展示训练任务的多样性:目标移动操作、非移动家庭操作、跨 embodiment 实验室技能、语义高层标注、web 视觉语言数据等。它说明 的泛化不是来自单个 benchmark 数据集,而是来自把不同粒度、不同机器人、不同监督信号的数据统一到同一个模型接口。图中不同任务看似松散,但共同服务一个目标:让模型在新房子里既知道“该做什么”,也知道“身体怎么做”。
论文把数据分成几个核心来源。MM 是 mobile manipulation 数据,规模约 400 小时,覆盖约 100 个 home environments,是最终任务最接近的数据;但作者强调 phase-1 examples 中 97.6% 并不是目标 mobile household tasks,说明模型不能只靠目标任务示范。ME 是 non-mobile embodiment 在多样家庭场景里的数据,提供丰富的桌面、抽屉、容器等操作经验。CE 是 cross-embodiment 与 Open X-Embodiment 扩展数据,用于扩大机器人形态、动作空间和任务分布。HL 是人工高层子任务标签和目标框,用来训练 预测与语义定位。WD 是 web data,包括 CapsFusion、COCO、Cambrian-7M、PixMo、VQAv2 以及室内/家居物体定位数据,主要维持和扩展视觉语义能力。VI 是 verbal instruction demonstrations,即专家用户用语言子任务“遥控”低层策略产生的数据,用来缩小高层文本输出与低层可执行命令之间的 gap。
动作维度方面,论文把不同机器人的动作归一化到 ,使用每个 action dimension 的 1% / 99% quantile 做尺度归一化;不同机器人动作维度通过固定最大 action dimension 和 zero-padding 对齐。为了避免模型混淆 joint control 与 end-effector control,prompt 中还显式加入 <control mode> joint/end effector <control mode>。这些细节很重要,因为跨 embodiment 训练不是把所有动作无脑拼在一起:如果动作坐标系、控制模式和维度语义不清楚,模型会把同一个 token 条件映射到互相冲突的控制含义。
3.5 两阶段训练与机器人系统
训练分为 pre-training 和 post-training。预训练在异构数据上运行 280k gradient steps,主要使用 discrete token 目标,。后训练继续 80k steps,筛选 MM 与 ME 中成功且较短的 episodes,加入 WD 保持视觉语义能力,加入 HL slice 和 VI 数据,并开启连续 flow loss,。在地点扩展实验中,为了隔离 location count 的影响,作者使用 3、12、22、53、82、104 个训练地点,并在不使用 mobile manipulation action prediction data 的设置下预训练,再统一 post-train 40k steps、控制 unique sample 数。

Figure 5 解读:Figure 5 展示了两类 mobile manipulator 平台。高层策略使用前向、后向和两个 wrist camera 共四个视角;低层策略使用 wrist + forward camera。机器人有两个 6DoF 机械臂、并联夹爪、holonomic base 和 1D/2D torso lift,状态/动作维度为 18 或 19。低层策略以 50Hz 直接输出手臂、夹爪、升降和底盘控制目标,通过简单 PD controller 执行,没有使用显式轨迹规划或碰撞检测。这一点提升了论文结果的说服力:成功并不是靠手工 planner 兜底,而主要来自 learned policy。
released code 公开的是 openpi 中的 支持、checkpoint serving、fine-tuning 和 inference 配置,而不是论文内部完整预训练数据管线。src/openpi/training/config.py 中可以看到 pi05_libero、pi05_full_droid_finetune、pi05_droid_finetune 等配置:例如 pi05_libero 使用 Pi0Config(pi05=True, action_horizon=10, discrete_state_input=False)、batch size 256、warmup 10k、peak lr 、AdamW clip 1.0、EMA 0.999、从 gs://openpi-assets-preview/checkpoints/pi05_may21_280k_v1/params 加载权重,训练 30k steps;pi05_full_droid_finetune 使用 action_dim=32、action_horizon=16、warmup 1000、peak lr 、100k steps、batch size 256,并注释说明该 full DROID fine-tune 约需 8x H100 上两天;pi05_droid_finetune 则是自定义小 DROID 数据的 20k steps、batch size 32。这些是 released fine-tuning 数字,不能替代论文 full 预训练/后训练 recipe。
论文公式与 released code 实现差异:论文描述的是完整内部系统,包括 MM/ME/CE/HL/VI/WD 数据混合、280k+80k 训练与真实机器人部署;public openpi 的 kevin/pi05-support@84ebae7 分支主要暴露 模型结构、tokenizer、flow loss、sampling、checkpoint 和若干 fine-tuning 配置,没有发布内部家庭数据集、完整数据混合权重或 full training launch script。因此笔记中的论文训练数字来自 paper,代码配置数字只用于说明 released code 能复现实验接口和下游 fine-tuning,而不是完整复刻论文训练。
3.6 伪代码:从 prompt、训练到推理
下面伪代码保留在笔记中,同时导出到伴随文件 pi05_pseudocode.py。前四个函数对应 released code 中可直接观察到的 tokenizer、flow loss 与 sampling 结构;最后一个 data mixture sampler 是论文级训练 recipe 的压缩表达,因为 public repo 没有公开内部数据混合实现。
from __future__ import annotations # 允许类型注解引用尚未定义的类,便于把伪代码写成单文件说明
import torch # 使用 PyTorch 张量表达论文中的 batch、action chunk 与 loss
import torch.nn.functional as F # 使用 PyTorch 函数式 API 表达交叉熵和均方误差
def discretize_state_to_prompt(task: str, state: torch.Tensor, bins: int = 256) -> str: # 构造 released code 中 Pi05 的离散 state prompt 格式
clean_task = task.strip().replace("_", " ").replace("\n", " ") # 复现 tokenizer.py 对任务文本做的清洗,避免换行和下划线破坏 prompt
edges = torch.linspace(-1.0, 1.0, bins + 1, device=state.device)[:-1] # 在归一化状态范围 [-1,1] 内建立 256 个离散桶边界
discrete = torch.bucketize(state.clamp(-1, 1), edges, right=True) - 1 # 把连续机器人状态映射为整数 token,和 PaligemmaTokenizer 的 np.digitize 对齐
state_text = " ".join(str(int(x)) for x in discrete.detach().cpu().flatten()) # 把离散状态串成空格分隔文本,作为语言前缀的一部分
return f"Task: {clean_task}, State: {state_text};\nAction: " # 返回 Pi05 低层动作模型实际看到的 prompt 模板
def pi05_training_step(model, batch: dict, alpha: float = 10.0) -> torch.Tensor: # 表达论文后训练阶段的 CE 语义损失加 flow matching 动作损失
obs = batch["observation"] # 取出图像、语言、状态等观测,作为 VLM 前缀输入
actions = batch["actions"] # 取出监督动作 chunk,形状可理解为 [B,H,A]
text_targets = batch.get("text_targets") # 取出高层子任务文本或 FAST token 标签,缺失时只训练动作头
noise = torch.randn_like(actions) # 从标准高斯采样噪声端点,对应论文中的 omega
tau = torch.distributions.Beta(1.5, 1.0).sample(actions.shape[:1]).to(actions.device) * 0.999 + 0.001 # 按 released code 的 Beta(1.5,1) 采样流匹配时间
tau_view = tau[:, None, None] # 扩展时间维度,使其能广播到动作 chunk 的 horizon 和 action_dim
noisy_actions = tau_view * noise + (1.0 - tau_view) * actions # 构造插值动作 a^{tau,omega},把真动作和噪声连成一条 flow 路径
target_velocity = noise - actions # 监督速度场目标 u_t,要求 action expert 预测从真动作指向噪声的向量
prefix_tokens = model.embed_prefix(obs) # 编码多视角图像和 tokenized prompt,形成非因果可互看的上下文前缀
suffix_tokens = model.embed_suffix(obs, noisy_actions, tau) # 编码 noisy action token,并通过 adaRMSNorm 注入时间条件
pred_velocity, text_logits = model.forward(prefix_tokens, suffix_tokens) # 一次 Transformer 前向同时得到动作速度预测和可选文本 logits
flow_loss = F.mse_loss(pred_velocity, target_velocity) # 对动作速度场做均方误差监督,对应论文中的连续动作项
ce_loss = torch.tensor(0.0, device=actions.device) if text_targets is None else F.cross_entropy(text_logits, text_targets) # 对高层文本或离散动作 token 做交叉熵监督
return ce_loss + alpha * flow_loss # 返回总损失;论文后训练把 alpha 设为 10.0 来强调连续控制质量
def pi05_decode_actions(model, obs: dict, num_steps: int = 10) -> torch.Tensor: # 表达 released code 中 sample_actions 的 10 步去噪推理
batch_size = obs["state"].shape[0] # 从状态 batch 维度得到一次并行采样的样本数
x_t = torch.randn(batch_size, model.action_horizon, model.action_dim, device=obs["state"].device) # 从高斯噪声初始化动作 chunk,作为 t=1 的起点
prefix_cache = model.encode_prefix_cache(obs) # 先缓存图像和语言前缀的 KV,避免每个去噪步重复计算静态上下文
dt = -1.0 / float(num_steps) # 采用从 t=1 到 t=0 的欧拉积分步长,released code 默认 num_steps=10
time = torch.ones(batch_size, device=obs["state"].device) # 初始化所有样本的流匹配时间为噪声端 t=1
for _ in range(num_steps): # 逐步把噪声动作沿模型预测速度场推进到数据动作分布
suffix_tokens = model.embed_suffix(obs, x_t, time) # 在当前时间步把 noisy action 与时间条件转成 action expert token
velocity = model.decode_suffix(prefix_cache, suffix_tokens) # 使用缓存前缀和当前 suffix 预测速度场 v_t
x_t = x_t + dt * velocity # 欧拉更新动作 chunk,逐步靠近 t=0 的可执行动作
time = time + dt # 同步更新时间变量,使下一步预测使用新的 flow 时间
return x_t # 返回去噪后的动作 chunk,随后由 policy 执行前若干步或整个 horizon
def hierarchical_pi05_policy(model, obs: dict, user_instruction: str) -> torch.Tensor: # 表达论文中的高层语义预测加低层动作控制因子化策略
high_level_prompt = f"Task: {user_instruction}" # 把人类长程指令转成高层语言模型的输入条件
subtask_text = model.generate_subtask(obs, high_level_prompt) # 自回归预测当前应执行的短语义子任务 \hat{ell}
low_level_prompt = discretize_state_to_prompt(subtask_text, obs["state"][0]) # 把子任务和机器人状态离散化,形成低层动作模型 prompt
obs_for_action = dict(obs, tokenized_prompt=model.tokenize(low_level_prompt)) # 把 prompt token 放回观测结构,供 Pi05 action expert 条件化
return pi05_decode_actions(model, obs_for_action, num_steps=10) # 低层模型在子任务条件下生成连续动作 chunk
def paper_level_data_mixture_sampler(datasets: dict, stage: str) -> dict: # 概括论文训练配方;该数据混合逻辑未在 public openpi repo 中完整发布
if stage == "pretrain": # 第一阶段混合机器人动作、语义标签与 web vision-language 数据来学习开放世界表征
weights = {"MM": 1.0, "ME": 1.0, "CE": 1.0, "HL": 1.0, "WD": 1.0} # 表达预训练覆盖 mobile manipulation、multi-embodiment、cross-embodiment、high-level 与 web data
else: # 第二阶段筛选成功且较短的目标域轨迹,并加入 VI 与 WD 保持语义泛化
weights = {"MM_success": 1.0, "ME_success": 1.0, "HL": 1.0, "VI": 1.0, "WD": 1.0} # 表达后训练用成功示范和 verbal-instruction 低层命令强化部署行为
name = torch.multinomial(torch.tensor(list(weights.values()), dtype=torch.float), 1).item() # 按混合权重抽取一个数据源,真实系统会使用更复杂的数据加载器
key = list(weights.keys())[name] # 把采样索引还原成数据源名称,便于从对应 loader 取样
return datasets[key].next_batch() # 返回该数据源的 batch,进入统一的 token/动作训练接口3.7 Code-to-paper mapping
Code reference:
kevin/pi05-support@84ebae7(2025-09-03) — pseudocode and mapping based on this commit
| Paper Concept | Source File | Key Class/Function | Notes |
|---|---|---|---|
| model type and observation interface | src/openpi/models/model.py | ModelType.PI05, Observation, preprocess_observation | 定义模型类型、多视角图像 key、状态/action/prompt 输入结构,以及训练/推理前的图像增强和归一化入口。 |
| architecture config | src/openpi/models/pi0.py | Pi0Config, Pi0.__init__ | pi05=True 时默认 max_token_len=200、discrete_state_input=True,action expert 使用 gemma_300m 和 adaRMSNorm 时间条件。 |
| Prefix/suffix token organization | src/openpi/models/pi0.py | embed_prefix, embed_suffix | prefix 编码图像与 prompt,suffix 编码 noisy action; 分支用 time MLP 生成 adarms_cond。 |
| Flow matching loss | src/openpi/models/pi0.py | compute_loss | 采样 Gaussian noise 与 Beta(1.5,1) time,构造 x_t 和 u_t=noise-actions,用 MSE 监督速度场。 |
| 10-step action sampling | src/openpi/models/pi0.py | sample_actions | 缓存 prefix KV,从噪声开始用默认 10 步欧拉积分生成动作 chunk;代码采用 t=1 noise、t=0 target convention。 |
| State-token prompt format | src/openpi/models/tokenizer.py | PaligemmaTokenizer.tokenize | 把 state 离散为 256 个 bin,形成 `Task: …, State: …; |
| Action: ` 的 Pi05 prompt。 | |||
| FAST discrete action tokenizer | src/openpi/models/tokenizer.py | FASTTokenizer | 将动作 token 映射到 PaliGemma vocab 尾部,prefix 非因果、postfix 因果,并只在 action postfix 上计算 token loss。 |
| Released fine-tuning configs | src/openpi/training/config.py | pi05_libero, pi05_full_droid_finetune, pi05_droid_finetune | 提供公开 checkpoint、batch size、LR、steps 等下游训练配置;不等同于论文内部 full pretrain。 |
| Checkpoint serving | scripts/serve_policy.py, src/openpi/policies/policy_config.py | DEFAULT_CHECKPOINT, policy config | ALOHA 默认使用 pi05_aloha 和 gs://openpi-assets-preview/checkpoints/pi05_may21_280k_v1。 |
4. Experimental Setup (实验设置)
4.1 数据集与训练配置
实验数据源可以按训练阶段理解。预训练阶段使用 MM、ME、CE、HL、WD。MM 约 400 小时,覆盖约 100 个家庭环境,是移动操作的核心来源;论文还在 location scaling 中显式比较 3、12、22、53、82、104 个训练地点。ME 是非移动机器人在不同家庭中的操作数据,论文没有公开逐数据集 episode 数,但它的作用是提供目标任务外的家庭操作技能。CE 包含跨 embodiment 数据和 使用的扩展 Open X-Embodiment 数据,论文同样没有给出每个来源的完整样本表。HL 包含人工子任务标签和 bounding boxes,用来监督高层语义预测与视觉定位。WD 包括 CapsFusion、COCO、Cambrian-7M、PixMo、VQAv2 和物体定位数据;这些 web/vision-language 数据不是机器人动作数据,但用于保持物体、关系、场景和问答能力。后训练阶段使用成功且较短的 MM/ME episodes、WD、HL slice 和 VI 数据,其中 VI 是专家用 verbal instruction 驱动低层策略得到的 demonstrations。
训练配置方面,论文主模型先训练 280k gradient steps,再后训练 80k steps;后训练连续动作 loss 权重 。模型使用 PaliGemma VLM backbone 加 action expert。Appendix E 给出 2B VLM 的结构:width 2048、depth 18、MLP dim 16384、18 个 attention heads、1 个 KV head、head dim 256;action expert 除 width 1024、MLP dim 4096 外结构类似,参数量约 300M。动作 horizon 为 50,即论文记号 。图像增强包括随机 crop 到宽/高 0.95、resize、旋转 、color jitter brightness 0.3、contrast 0.4、saturation 0.5。论文没有公开完整 full training 的 GPU 型号/数量;released code 的 DROID full fine-tune 注释显示 100k steps 约需 8x H100 两天,但这属于公开 fine-tuning 示例,不应误读为主论文全量训练硬件。
4.2 机器人、任务与评估环境
真实世界评估在 3 个训练中未出现的真实家庭中进行,使用两种机器人平台。每个家庭包含 kitchen 和 bedroom cleaning 任务,任务类别包括 dishes in sink、items in drawer、laundry basket 等,每个 task/environment 平均 10 次 trial。Appendix B 还说明整体评估包括 3 个真实 homes 加 3 个 mock kitchens/bedrooms,共 12 个 locations;除特别说明外,每个 task/policy 做 10 次 eval。评估指标不是二元成功,而是 task progress rubric 百分比:Dishes in Sink 有 4 个盘/碗等物体,每个物体 pick +1、place into sink +1,最高 8 分;Items in Drawer 最高 4 分,包括 pick up、open drawer、put object inside、close drawer;Laundry in Basket 最高 3 分,包括导航/拾取、放入或放到篮子上、完全在篮子内;Make Bed 最高 5 分,包括整理毯子、放置两个枕头、毯子和枕头的整洁度。

Figure 6 解读:Figure 6 展示评估环境而不是训练场景。它说明论文把泛化定义为跨住宅、跨房间和跨任务的物理部署,而不是在同一 lab scene 改变量。图里的厨房和卧室布局变化很大,这使任务进度 rubric 比单次成功率更合理:机器人可能完成部分步骤,也可能在导航、抓取、容器交互或语言指向任一环节失败。

Figure 7 解读:Figure 7 汇总真实家庭中的主要评估结果。论文用任务进度百分比呈现每类任务在新环境中的表现。这里最重要的读法不是把柱子当作孤立数字,而是看 能在完全未见 homes 中完成多阶段清理任务,并且跨 kitchen/bedroom、跨机器人平台仍保持可观进度。由于论文图中没有提供完整原始表格,本笔记不从图像估算小数值。
4.3 Baselines、消融与语言跟随评估
baseline 包括 、-FAST+Flow、去掉 WD、去掉 ME、去掉 CE、同时去掉 ME 和 CE、去掉 VI、implicit high-level、no high-level、GPT-4 high-level 和 human high-level oracle。 是原连续 flow VLA 路线;-FAST+Flow 使用 joint diffusion+FAST 的 Equation (1),但只用 action data,没有 HL/WD;implicit high-level 保留 HL training data 但推理时不显式生成子任务;GPT-4 high-level 用外部 GPT-4 替代高层子任务;human oracle 则由人给低层子任务。
语言跟随评估见 Appendix C:使用两个未见 kitchen scenes,命令包括 “put scissors in drawer” 或 “put cutting board into sink”。每次 trial 有 5 个物体,目标物体被故意放得比 distractors 更远,以避免机器人只靠最近物体取巧;随机 chance language following 约为 20%。ID objects 包括 tongs、wooden serving spoon、can opener、scissors、small yellow mustard,以及 cup、bowl、plate、plastic spoon、cutting board;OOD objects 包括 funnel、pill bottle、grill lighter、lighter、safety goggles。指标包括 language following rate 和 task success rate,分别衡量是否选择正确语义目标、以及是否完成物理任务。

Figure 14 解读:Figure 14 展示语言跟随实验的初始状态,尤其强调目标物体和干扰物体的布局。这个设置让评估更严格:如果模型只学习到“拿最近的东西”或“拿最显眼的东西”,它会在目标远离机器人的 trial 中失败。因此 language following rate 更接近语义 grounding 能力,而不仅是运动控制能力。
5. Experimental Results (实验结果)
5.1 主结果:真实未见家庭中的长程任务
论文最核心的结果是: 能在完全新 homes 中完成 2-5 分钟的多阶段真实任务,并且作者声称系统可处理 10-15 分钟级别的 kitchen/bedroom cleaning 行为。真实评估任务包括 items in drawer、dishes in sink 和 laundry basket;每个 task/environment 平均 10 trials,按 Appendix B rubric 计算进度百分比。结果图显示 在这些任务上显著高于 类 baseline,证明开放世界泛化不是由原始 架构自然产生,而依赖 的数据混合、高层预测与后训练配方。
需要强调的是,论文主结果不是“某个 benchmark 分数提高几个点”的形式,而是一个真实机器人系统在新环境中完成实体家务任务。这个评估有两个含义:第一,模型必须处理视觉语义和连续控制的耦合错误,例如看错物体、抓不稳、放不进容器、底盘位置不佳都会扣分;第二,进度百分比比成功/失败更能反映长程任务,因为机器人可能完成前几步但在最后关闭抽屉或把衣服完全放入篮子时失败。论文使用 two-sided t-test 标注显著性,取消由于 robot failures、timeout 等非策略原因中断的 episodes。
5.2 训练地点数量与开放世界泛化

Figure 8 解读:Figure 8 展示训练地点从 3、12、22、53、82 到 104 个时,对 mock home 任务进度的影响。为了更干净地比较 location diversity,作者在该实验中不使用 mobile manipulation action prediction data,并控制 unique samples,post-train 40k steps。趋势是地点数量越多,策略在 unseen layouts 中越稳;104-location 模型接近 test-home control。这说明“多家庭位置覆盖”本身是泛化变量,不只是总数据量。
这个结果对机器人数据收集很有指导意义。若只在少数高质量家庭中收很多小时数据,模型可能过拟合布局、物体位置和隐含操作顺序;增加 location count 能让模型更早看到台面高度、抽屉样式、光照、杂物分布和导航可达性的变化。论文并没有把地点扩展归因于更大模型,而是把它作为数据分布工程的一部分。对于后续复现或产业部署,这暗示数据预算应优先覆盖场景多样性,而不是只在单一环境中反复采集同类 episode。

Figure 9 解读:Figure 9 展示 location scaling 对语言跟随的影响。随着训练地点数量增加,模型不仅物理任务进度提高,ID/OOD 物体选择和语义跟随也更好。这说明开放世界泛化不是纯视觉 domain randomization;地点多样性会迫使模型把语言目标与物体功能、容器关系和场景结构绑定,而不是依赖固定背景或位置偏置。
5.3 数据源消融:WD、ME、CE、VI 与 high-level

Figure 10 解读:Figure 10 比较完整训练 recipe 与去掉 WD、ME、CE、ME+CE 等变体。图中趋势是 ME 和 CE 对 mock home task progress 的影响很明显,同时去掉二者退化更大;WD 在完整任务进度上不一定总是显著,但在语言跟随、OOD 语义和高层预测上更关键。这与数据功能相符:ME/CE 提供操作技能迁移,WD 提供视觉语言语义。

Figure 16 解读:Figure 16 把训练 recipe 消融拆到不同任务。它帮助避免一个误解:某个数据源可能对总体平均影响有限,但对特定任务很关键。例如容器交互、抽屉操作、床铺整理对不同机器人技能和语义 priors 的依赖不同,ME/CE/WD 的贡献不一定均匀分布。论文的结论是多源数据不是可有可无的堆料,而是在不同失败模式上补短板。

Figure 11 解读:Figure 11 聚焦语言跟随。WD 对 OOD object language following 尤其重要,因为 web data 带来了机器人轨迹中稀缺的物体类别和视觉语义;VI 也关键,因为它让低层策略习惯被短语言子任务驱动。如果去掉这些数据,机器人可能仍能做一些常见动作,但更容易拿错目标物或无法把高层文本转成可执行低层命令。

Figure 13 解读:Figure 13 比较高层推理方式:完整 、no WD、no VI、implicit HL、no HL、GPT-4 high-level、human high-level oracle。结果趋势很有意思:完整模型最好,implicit HL 次之,no HL 更差;外部 GPT-4 high-level 最差之一,human oracle 也不如完整模型。这说明高层子任务并不是“越强的语言模型越好”,而要与低层策略、训练分布和机器人可执行动作对齐。

Figure 17 解读:Figure 17 进一步拆解 high-level ablation。它显示 VI 虽然只占 high-level mobile manipulation examples 的约 11%,但对高层到低层的接口质量很重要。原因是 human-written 或 GPT-generated 子任务可能语义正确,却不一定是低层策略训练过、能够稳定执行的命令;VI 数据来自专家用语言驱动低层 policy 的过程,因此自然包含“低层可执行”的语言粒度。
5.4 模型 recipe 对比:为什么不是 或外部 planner
模型对比显示, 优于 和 -FAST+Flow。 即使训练到 300k steps,在开放家庭任务上仍不足;-FAST+Flow 把离散动作 token 和 flow 放在一起,但没有 HL/WD 等语义数据和混合训练结构,因此也不够。这个结果支持论文的主张:开放世界泛化不是单一动作建模技术带来的,而是数据、目标、架构接口和后训练策略的组合。

Figure 15 解读:Figure 15 比较不同语言模型或高层语言方案。它强化了一个反直觉结论:通用 LLM/VLM 的语言能力不自动转化为机器人高层策略能力。机器人高层输出必须考虑当前视觉、可达性、低层策略已学技能、任务进度和失败恢复。 的高层预测是在机器人数据闭环中学出来的,因此比外部文本 planner 更贴近实际控制。
5.5 局限与结论
论文的局限主要来自系统和数据层面。首先,完整训练数据和内部数据混合管线没有开源,public openpi 只能验证模型结构、checkpoint 使用和 fine-tuning 接口,无法完整复现约 100 homes 的 MM 数据和 280k+80k 主训练。其次,评估虽然已经进入真实家庭,但任务集合仍集中在清理、放置、抽屉、水槽、洗衣篮、铺床等有限类别;对透明/反光/柔性难物体、拥挤动态环境、人机协作、长时间故障恢复的覆盖还不完整。第三,系统没有显式轨迹规划和碰撞检测,成功依赖 learned policy 和底层 PD controller;在安全要求更高的家庭部署中,还需要更强的约束、监控和恢复机制。第四,论文图表很多结果以柱状图呈现,没有提供完整数值表,这限制了外部精确复核和 meta-analysis。
总体结论是, 的价值不在于提出一个孤立的 Transformer trick,而在于证明了一个可工作的开放世界 VLA recipe:用大规模异构数据建立语义与技能基础,用显式高层子任务连接长程目标和低层动作,用离散预训练吸收多种监督信号,再用 flow matching 后训练得到连续控制。实验表明,地点多样性、ME/CE 操作迁移、WD 视觉语义、高层推理和 VI 低层语言接口都对最终泛化有贡献。对后续研究而言,这篇论文的启示是:真实机器人泛化不能只问“模型多大”,还要问“数据源如何互补、语言接口是否可执行、评估是否真的跨环境、released code 与 paper recipe 的边界在哪里”。