Psi0的FAST动作Tokenizer实战:如何拟合离散动作词表,让VLA输出更精准
【免费下载链接】Psi0[RSS'26] Welcome to Psi-Zero, a Humanoid VLA towards Universal Humanoid Intelligence.项目地址: https://gitcode.com/gh_mirrors/ps/Psi0
Psi0 是一个面向通用人形智能的人形 VLA(Vision-Language-Action)模型,而FAST 动作 Tokenizer正是它把"连续动作"变成"离散动作词表"、让大语言模型能像说话一样预测机器人动作的关键组件。本文将带你完整走一遍:如何下载官方 FAST 词表、如何用自己的数据重新拟合(fit)动作词表、以及如何验证与使用它,让 VLA 的动作输出更精准。
为什么 VLA 需要离散动作词表?
人形机器人的动作天然是连续的:48 个关节在时间轴上的一串浮点数(比如time_horizon × action_dim的动作块)。但 LLM/VLM 只会"吐 token",不会直接输出浮点数。
FAST 的做法是:
- 对连续动作块做DCT 变换,把时间与关节维度上的相关系数压缩成少量系数;
- 用
scale参数对系数做量化,映射到vocab_size(通常为 2048)大小的词表; - 之后模型只需像生成文本一样生成
<|a_9|><|a_14|>...这样的动作 token 序列,解码端再还原回连续动作。
这样动作预测就完全复用了 LLM 的语言生成能力,训练和推理都更稳定。
上图是 Psi0 的整体架构:Stage 1 中 Qwen3-VL-2B 以"离散动作 token"为标签学习 VLM 预训练,Stage 2 再挂载 Action Expert(System 1)输出连续动作块,最终驱动人形机器人完成抓取、搬运等任务。
项目里现成的 FAST 词表
Psi0 仓库在 src/fast/ 目录下提供了多套已拟合好的FAST 词表,按"绝对/相对动作 + 时间块长度 + 缩放系数"命名,开箱即用:
| 目录 | 说明 |
|---|---|
| egodex-abs-10w-30x48-v2048-s10/ | EgoDex 绝对动作,30 步块、scale=10 |
| egodex-rel-10w-30x48-v2048-s10/ | EgoDex 相对动作,30 步块 |
| egodex-rel-10w-40x48-v2048-s10/ | 相对动作,40 步块(附带 统计文件) |
| egodex-rel-50w-1x48-v2048-s100/ | 50 万块、scale=100,官方预训练默认使用 |
| pi/ | 官方 FAST 原始词表(physical-intelligence/fast) |
每套词表都是标准的 HF Processor 目录:tokenizer.json+processor_config.json+processing_action_tokenizer.py(见 src/fast/pi/README.md)。
三步完成词表拟合实战
完整流程写在 src/fast/README.md,核心就三步:
第 1 步:准备数据。先按 src/h_rdt/datasets/pretrain/ 的脚本预计算好数据集的动作(预训练必须使用 delta 相对动作)。
第 2 步:下载并修补官方词表。
python src/fast/download.py # 拉取官方 FAST tokenizer python src/fast/patch_pi_action_tokenizer.py # 修复原始版本的解码误差第 3 步:跑拟合脚本。scripts/fast.py 会从训练脚本指定的数据集里抽取num_action_chunks个动作块,调用tokenizer.fit(...)重新拟合词表,并自动保存为src/fast/egodex-rel-50w-{T}x{D}-v{vocab}-s{scale}目录:
python scripts/fast.py \ --scale 100 \ --vocab-size 2024 \ --num_action_chunks 500000 \ --training_script scripts/train/psi0/pretrain-egodex-psi0-fast.sh💡 两个经验:
num_action_chunks要取到统计量收敛;scale(DCT 系数量化缩放)越大精度越高但压缩率下降——官方建议一切以重建误差小为准。
验证拟合质量:噪声重建测试
拟合后,scripts/fast.py会自动用validate()做一轮"噪声鲁棒性体检":
- 从验证集随机抽 100 个动作块,先无噪声解码,再看尾部 20% token 加入 ±10 扰动后的解码误差;
- 输出平均重建误差(换算回关节角度)、超过 0.1 的离群帧数、以及 token 序列长度统计。
如果"加噪后误差"没有爆炸,说明词表对该分布拟合良好——这直接决定了部署时 VLA 输出 token 稍有偏差,动作也不会抖动。
训练与部署中如何使用
词表在训练时通过两个参数注入(见 pretrain-egodex-psi0-fast.sh):
--model.action_tokenizer.bins=2048 --model.action_tokenizer.pretrained_checkpoint=src/fast/egodex-rel-50w-1x48-v2048-s100对应配置定义在 src/psi/config/tokenizer.py 的FastActionTokenizerConfig。运行期由 FastActionTokenizer 负责:
- 编码:把动作块量化成 token id,拼成
<|a_x|>文本串喂给 LLM; - 解码:把 LLM 生成的 token id 还原回
[batch, time_horizon, action_dim]的连续动作,并在词表边界外自动裁剪,保证鲁棒。
部署侧同样复用这套编解码,配合 RTC(实时动作分块)保证真机低延迟执行。
小结
- FAST 动作 Tokenizer =DCT + 量化 + 离散词表,让 VLM"说"出动作;
- Psi0 在 src/fast/ 内置多套可直接加载的预拟合词表,
src/fast/pi是官方原始词表; - 换数据集/换动作分布时,用
python scripts/fast.py十分钟量级即可重新拟合,并用噪声重建误差验收质量; - 记住两条调参原则:动作块数量足够多、重建误差足够小。
把词表这一步做扎实,你的 VLA 输出就会更稳、更精准 🎯
【免费下载链接】Psi0[RSS'26] Welcome to Psi-Zero, a Humanoid VLA towards Universal Humanoid Intelligence.项目地址: https://gitcode.com/gh_mirrors/ps/Psi0
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考