
Fig. 3: Model overview. π0.5 is trained in two stages. First, a pre-training stage combines all of the different data sources to produce an initial VLA with
discrete tokens. This stage uses data from diverse robotic platforms, high-level semantic action prediction, and data from the web. Robotic data uses the FAST
action tokenizer to represent actions as discrete tokens 64. Second, a post-training stage specializes the model for low-level and high-level inferences for
mobile manipulation, leveraging the most task-relevant data, including verbal instructions from human supervisors. This stage uses flow matching to represent
the action distribution, enabling efficient real-time inference and the ability to represent fine-grained continuous action sequences. At inference time, the model
first infers a high-level subtask, and then predicts the actions based on this subtask.
问题一
π₀.₅ 论文标题是 a Vision-Language-Action Model with Open-World Generalization。请你回答:
-
π₀.₅ 相比 π₀,核心目标从"会做机器人动作"升级到了什么?
-
论文里为什么强调 heterogeneous co-training,也就是把机器人低层动作数据、高层 subtask prediction、web VQA/object detection、语言指令等混在一起训练?
-
从代码实现角度看,openpi 仓库里的 π₀.₅ 是否完整实现了论文里所有 action heads?还是只支持其中一部分?
答:π₀用 Z-score 归一化,π₀.₅ 用的 quantile normalization
它换归一化的方式是为了让 state 离散化成 256 bins 时整体范围在-1 ,1之间。
heterogeneous co-training是为了让 VLA 同时学习两类能力:高层:进行规划,预测 object grounding
低层:通过 action expert + flow matching 输出连续动作
它可以在数据中学习"高层语义任务"和"底层控制动作"的关联
Openpi 仓库里没有完整复现π₀.₅ 的所有训练头,目前主要支持 flow matching head,并不完全支持论文中的所有 hybrid training head。
问题二:
Knowledge Insulation
请你继续回答:
- π₀ 里 state、noisy action、timestep 分别是怎么进入模型的?
- π₀.₅ 对这三者分别做了什么改动?
- 为什么这些改动能减少 "state-action shortcut",提升泛化?
答:在π₀ 中,state 是连续向量,会通过投影层变成一个 suffix token;noisy action 通过投影层变成 action tokens;timestep 先做 sin/cos embedding,然后和 action tokens 通过 concat 拼接到一块,再经过 MLP 融合后送入 action expert。因此 state、action、time 表现出强耦合关系。
π₀ 做了两处 konwledge insulation :第一,把 state 离散化成 token,放进 prompt/prefix,让他成为视觉条件的一部分,而不是放在 action expert 旁边(可能学成捷径);第二,timestep 不再和 action token concat,而是通过 MLP 生成 adaRMS 条件,去调制 action expert。
这样可以降低 state-action shortcut:模型不能只学"当前关节状态对应常见动作"这种局部数值映射,而需要更多依赖图像、语言和上下文语义来决定动作,所以在新物体、新环境、新任务组合上泛化更好。
问题三:
-
论文里的 π₀.₅ 为什么同时提到 FAST 离散 action tokens 和 flow matching 连续动作?
-
预训练阶段和 post-training 阶段分别用了什么 action representation?
-
Openpi 这个仓库里的 π₀.₅ 推理时到底输出的是离散 action token,还是连续动作?为什么?
答: π₀.₅ 之所以同时提 action tokens 和 flow matching,是因为它想结合两者优点:FAST action tokens:
训练效率高,能把动作放进 VLM离散化token 语言建模框架里,适合大规模多样化数据混合 预训练
Flow matching action expert:
推理时生成连续动作 chunk,更适合实时控制,不需要自回归逐 token 采样动作
预训练阶段:主要使用离散 action tokens
这样机器人动作数据、高层语义数据等多样化数据都能统一成 token prediction 问题,更容易做大规模混合训练。
Post-training 阶段:
加入 / 训练 expert
使用 flow matching 预测连续 action chunk
这样最终部署时可以走连续动作生成,避免 FAST 自回归动作 token 的推理开销
Openpi README 说得很清楚:当前仓库里 π₀.₅ 训练和推理 只支持 flow matching head
问题四:
论文和代码都强调:VLM embedding 和 action expert embedding 的交互不是完全自由的,而是有方向性的。
请你回答:
- 在 π₀/π₀.₅ 里,prefix token 和 suffix/action token 的 attention 关系大致是什么?
- 为什么要让 action token attend to 图像/语言 prefix,但不让图像/语言 prefix attend to action token?
- 这和防止 VLM 表示被低层动作污染有什么关系?
答:prefix 中的图像、语言以及π₀.₅ 的离散state token 可以双向 attention,形成完整的语义条件表示。Action suffix token 在生成动作时可以 attend 到 prefix,从图像、指令和 state 中取条件信息;但 prefix token 不 attend 到 suffix/action token。这样信息流是 VLM 语义条件到 action expert 的单向流动。设计原因是动作应该由视觉语言条件决定,而 VLM 的图像语言表示不应该依赖 noisy action 或低层控制 token,否则会把机器人动力学和连续动作去噪的低层信息混进语义表示,破坏 VLM 的开放世界知识和泛化能力。
问题五
你现在比较一下这三个模型:
π₀
π₀-FAST
π₀.₅
请回答:
- 三者的动作生成方式分别是什么?
- 三者在泛化能力、推理延迟、动作精度上各有什么 trade-off?
- 如果你要在 DROID 上做语言跟随任务,三者你会怎么选?为什么?
答:π₀ 和 π₀.₅ 最终都通过 flow matching action expert 在连续动作空间生成 action chunk;π₀-FAST 则把动作压缩成离散 action tokens,由 VLM 自回归生成后再 decode 回连续动作。π₀ 的优势是连续动作精度和低层控制稳定,但开放世界语义泛化较弱;π₀-FAST 的优势是动作可以纳入 token prediction 训练框架,训练/表示统一,但有量化误差和自回归 decoding 延迟;π₀.₅ 结合二者思路,预训练阶段利用离散动作和多源语义数据,post-training 用 flow matching 输出连续动作,同时用 knowledge insulation 提升泛化。DROID 语言跟随任务我优先选 π₀.₅,因为它在语言理解、物体泛化和新场景泛化上更强,同时仍保留连续动作控制能力。
问题六
π₀.₅ 为什么要把 normalization 从 Z-score 换成 Quantile normalization?请你回答:
- Z-score 和 Quantile normalization 分别怎么算?
- π₀.₅ 的 state 离散化为什么依赖 Quantile normalization?
- 如果直接用 Z-score 做 state discretization,会出现什么问题?
答:π₀.₅ 把 normalization 从 Z-score 换成 Quantile normalization,核心是为了支持 state 离散化。Z-score 是(x - mean) / std,让数据均值约为 0、标准差约为 1,但没有固定边界,极端值可能远超[-1,1]。Quantile normalization 用q01和q99做线性映射,使q01 -> -1、q99 -> 1,约 98% 的 state 数据落在[-1,1]附近。这样 state 才能稳定地分到 256 个 bins 中,并作为离散 token 放进 prefix。
如果直接用 Z-score 离散化,很多 state 可能超出[-1,1],被 clip 到边界 bin,导致信息损失;不同维度的 bin 利用率也会不均衡。Quantile normalization 让离散 token 更稳定,配合 Knowledge Insulation,把 state 从连续 action shortcut 中移到 VLM 的语义条件侧。
问题七
现在我们回到底层动作生成。请你回答:
-
π₀ / π₀.₅ 的 flow matching 训练时,
x_t是怎么由真实动作a和噪声ε构造出来的? -
模型预测的目标
v_t/ vector field 是什么? -
推理时为什么可以从纯噪声开始,经过多步更新得到动作?
答:训练是从标准正太采样噪声ε,从 Beta (1.5 ,1) 采样时间 t,构建x_t = tε + (1-t)a。d 当 t=0 时是干净动作 a,当 t=1 时是纯噪声ε。模型输入当前 noisy ation、x_t、时间 t 和观测条件,预测 v_t,监督目标是 u_t = noise - actions。
为什么从纯噪声:因为训练定义了一个从数据分布到噪声分布的连续路径:真实动作 a t=0
纯噪声εt=1
模型学会了路径上每个点的速度长,推理时我们没有真实动作,要生成动作先从容易采样的分布开始。也就是纯噪声,然后预测向量场反向积分,多步更新到 t=0,得到连续动作 chunk。
问题七
请你回答:
- 在 π₀ / π₀.₅ 中,PaliGemma/VLM 主要负责什么?
- Action Expert 主要负责什么?
答:PaliGemma/VLM 主要负责处理图像和语言 prompt,形成 prefix 语义表示;π₀.₅ 中 state 也离散化后进入这个 prefix。推理时 prefix 可以先算 KV cache,后续 action suffix attend 到这些语义条件。
Action Expert 负责生成连续动作:接收 noisy action token、timestep 条件以及 prefix 语义条件,预测 flow matching 的速度场,采样的高斯噪声反向积分生成连续 action chunk。
问题八
请你回答:
假设你要把一个 7 维动作的新机器人接入 π₀.₅ 微调,有 1 个外部相机、1 个腕部相机、6 个关节 + 1 个夹爪。请你按数据流回答:
- 原始数据到 LeRobot 格式,你要保存哪些字段?
RobotInputs里要做哪些映射和补齐?
答:接入新机器人时,先把原始数据转成 LeRobot dataset,保存外部相机、腕部相机、6 维关节、1 维夹爪、7 维动作、语言 prompt、episode/timestamp 等字段。
然后学 RobotInputs,把 LeRobot dataset 字段映射到 openpi 标准格式;图像映射到 base_0_rgb 和 left_wrist_0_rgb, 缺失的第三路图像用零图和mask补齐;joint 和 gripper 拼接成 7 维 state;训练时传入 7 维 actions;prompt 传给 tokenizer。
问题九
假设你现在要用 pi05_base 在这个 7 维新机器人上做低显存微调。请回答:
- LoRA 会插到哪些模块里?PaliGemma 和 Action Expert 的 rank 分别是多少?
- Freeze_filter 大概冻结哪些参数、训练哪些参数?
- 为什么 LoRA 适合新机器人适配?它有什么局限?
答: π₀.₅ 做 LoRA 微调时,会在 PaliGemma/Gemma 2 B 和 action expert Gemma 300 M 的 attention 与 FFN 层插入低秩 adapter。PaliGemma 侧 rank=16,action expert 侧 rank=32。冻结策略上,主要冻结预训练的 LLM/VLM 和 action expert base 权重,只训练 LoRA adapter;其他小模块是否训练取决于具体freeze_filter。LoRA 的好处是参数量小、显存低、训练快,并且能保留 base VLA 的视觉语言和动作先验,降低灾难性遗忘风险。局限是适配容量有限,如果新机器人和预训练分布差异很大,或者动作定义、相机布局、控制频率变化很大,LoRA 可能不如 full fine-tuning,甚至需要重新设计数据映射和动作空间。
问题十
π₀.₅ 一次输出一个 action chunk,比如 action_horizon=15 或 50。请回答:
- 实际部署时,会不会把整个 chunk 全部执行完再重新推理?
- 为什么要一次预测多个动作,而不是只预测下一步?
- 如果模型推理延迟 120 ms,机器人控制周期 20 ms,你会怎么设计异步推理和执行调度?
答:实际部署不会等整个 action chunk 执行完才重新推理,而是采用异步 rolling horizon。控制线程每 20 ms 从 action buffer 取一个动作执行;推理线程用最新可用观测生成下一段 action chunk。一次预测多个动作可以建模短期动作轨迹的时间相关性,让动作更连贯,同时提供推理延迟缓冲。
如果推理延迟 120 ms、控制周期 20 ms,那么至少需要 6 步动作 buffer 覆盖延迟。我会在开始执行当前 chunk 时立即异步启动下一次推理,控制端执行当前 chunk 的前 6 步;新 chunk 返回后,在下一控制周期切换到新 chunk,必要时根据 observation timestamp 跳过前几步或做平滑 blending,避免时滞和动作突变。
问题十一
论文里 π₀.₅ 的重点不是只在 benchmark 上提分,而是展示 open-world generalization。请你回答:
- π₀.₅ 主要验证了哪些泛化能力?比如环境、物体、语言/任务层面。
- 论文消融里去掉 web data、高层 prediction、heterogeneous co-training,大概会发生什么?
- 为什么作者说 π₀.₅ 的成功不能只归因于模型 scale,而更依赖 training recipe?
答案:π₀.₅的实验主要验证 open-wold generalization(开放世界泛化能力):包括新家庭/新房间的环境泛化,新物体和新摆放的物体泛化,以及高层语言指令和长程任务分解能力。
消融实验表明,去掉 web data 会降低 VLA 的物体/场景语义理解能力。去掉 hign-level substask prediction 会削弱长程任务规划和语言跟随,只用低层机器人 action data 则难以在开放环境中泛化。
单纯扩大模型或机器人数据,不一定提供它缺的知识(场景语义和任务分解能力)。所以π₀.₅ 引入 web data、object detection、VQA、substask prediction 等数据源。
问题十二
关于π₀.₅的局限性。请你回答:
- π₀.₅ 在真实家庭长程任务中可能失败在哪些地方?
- 这些失败分别更像是感知问题、语义规划问题,还是低层控制问题?
- 如果你在公司里要继续提升 π₀.₅,你会从数据、模型结构、部署系统三个方向分别怎么改?
答:π₀.₅可能失败在以下层面
- 感知层面:识别错物体、定位错目标、处理不好反光场景;
- 语义规划层面:它可能理解错高层语言指令、生成错误子任务顺序
- 低层控制层面:它可能抓取失败、柔性物体操作失败
如果继续提升。我会从三方面做:数据上收集更多失败案例、新家庭、新物体、长程恢复演示;
模型上加强 object grounding、改进更稳定的 substask head、加入memory(让模型记住长程任务已经做了什么)、失败检测和失败恢复。
问题十三
假设老板让你基于 π₀.₅ 做一个"家庭桌面整理机器人",能听懂"把桌上的餐具收进抽屉/水槽附近"这类指令。
请你给一个完整技术方案,覆盖:
- 你会用哪些数据训练/微调?
- 模型选 π₀、π₀-FAST 还是 π₀.₅?为什么?
- 部署时如何做感知、动作 chunk 执行、失败检测和恢复?
- 你会设置哪些评测指标?
答:我会基于 π₀.₅ 做家庭桌面整理机器人,因为任务需要理解开放词汇物体、家庭场景和高层语言指令,同时还需要连续低层控制。数据上,我会收集餐具抓取、放入抽屉、放到水槽附近、开关抽屉、移动障碍物等低层演示,并标注高层指令到子任务序列;同时增加不同家庭、不同餐具、不同光照和桌面杂乱度的数据,以及失败恢复演示。模型上用pi05_base做 LoRA 微调,保持 32 维 action space,通过 padding/slicing 适配机器人。
部署时使用外部相机和腕部相机输入 π₀.₅,异步生成 action chunk,控制线程按固定周期执行,推理线程后台滚动更新 chunk。系统层加入 detector/grounding 或视觉检查器来判断餐具是否抓起、抽屉是否打开、物体是否放到目标区域。失败时停止当前 chunk,重新观察,换抓取姿态或重新规划子任务,多次失败后请求人工接管。评测上看整体任务成功率、子任务成功率、语言跟随准确率、新物体/新环境泛化、恢复成功率、完成时间、人工介入率和安全事件数。