一句话定位
OpenVLA-OFT 不是一个新模型,而是一套**“优化微调”(Optimized Fine-Tuning, OFT)配方**:把自回归离散动作的 openvla 改造成”并行解码 + 动作分块 + 连续动作 + L1 回归”,一次前向就吐出整段动作 chunk。同样的 7B 底座、同样的 LoRA,仅靠换微调方式,就把 libero 四套件平均成功率从 76.5% 拉到 97.1%、动作生成吞吐提高 26×(8 步 chunk)到 43×(ALOHA 25 步 chunk),并在真实双臂 ALOHA 机器人上以 25 Hz 高频控制超过 pi0、rdt-1b 等在双臂数据上预训练过的更”先进”的 VLA。作者的核心论断:微调配方本身可能比预训练数据覆盖更决定下游表现。
背景与定位
范式:面向部署的 VLA 微调方法学。这篇论文属于”不动预训练、只优化 adaptation”的一支,与做新底座模型(openvla、octo、pi0)的工作正交。作者 Moo Jin Kim(也是 openvla 一作)、Chelsea Finn、Percy Liang 想回答一个被忽视的实证问题:给定一个现成 VLA,把它迁到新机器人/新任务时,到底该怎么微调最好?
论文点名两条现实痛点:(1) openvla 原生的自回归离散 token 生成太慢(单臂 3–5 Hz),远低于高频双臂控制需要的 25–50+ Hz;(2) 自回归 VLA(无论 LoRA 还是全量微调)在双臂灵巧操作上表现不佳。此前的提速路线(MiniVLA 的向量量化、openvla 团队的 FAST DCT 压缩 tokenization)虽拿到 2–13× 加速,但仍受限于自回归的”逐 token 迭代”本质,chunk 间延迟大(FAST 约 750 ms)。另一条路是扩散/流匹配 VLA(rdt-1b、pi0、TinyVLA),吞吐更高但训练慢、推理要多步去噪,且架构五花八门、说不清哪个设计真正起作用。
OFT 的定位是在这两条路之外,做受控消融:把 VLA 微调拆成三个正交设计维度——动作解码方式(自回归 vs 并行)、动作表示(离散 vs 连续)、学习目标(next-token vs L1 回归 vs 扩散)——逐一测其对成功率、推理效率、输入输出灵活性的影响,最后把最优组合固化成配方。它是继 openvla 之后被社区当作 VLA 微调基线广泛复现的工作(GitHub 1.3k star)。相关工作:动作分块思想来自 ACT,L1 回归借鉴 ACT,扩散变体对标 diffusion-policy,基准用 libero,预训练数据源 open-x-embodiment,大规模真机验证用 BridgeData V2。
模型架构
Policy backbone = openvla 7B(约 7.5B 参数),底座沿用 Prismatic VLM:融合视觉编码器(SigLIP ViT-So400M + DINOv2 ViT-L,每张图各出 256 个 patch embedding 沿 channel 拼接)+ Llama-2 7B decoder + 3 层 MLP(GELU)视觉投影器。原生 OpenVLA 只吃单张第三人称图,输出 7 维(3 位置 + 3 姿态 + 1 夹爪)delta 末端位姿,表示为离散 token 串。
OFT 在不改预训练的前提下,对微调阶段做六处改造:
- 并行解码(parallel decoding):把因果注意力掩码换成双向注意力,输入换成”空动作 embedding”(仅位置编码不同),一次前向直接映射出整段动作,把 D 次串行 decoder 前向压成 1 次。
- 动作分块(action chunking):在 decoder 输入里多插空 embedding,chunk 大小 K 时一次前向出 KD 个动作。LIBERO 用 K=8,ALOHA 用 K=25,测试时执行完整 chunk 再重新查询(open-loop)。
- 连续动作表示:把 decoder 输出层换成 4 层 MLP(ReLU)动作头,直接把最后一层 hidden state 映射为归一化连续动作,绕开 256-bin 离散化的精度损失。
- 多视角 + 本体状态输入:多张相机图共享 SigLIP-DINOv2 编码器(第三人称 + 腕部相机,patch 从 256 翻到 512);低维本体状态(关节角、夹爪)过一个 2 层 MLP(GELU) 投影成 1 个额外 embedding。视觉/状态/语言 embedding 沿序列维拼接后一起进 decoder。
- 学习目标:主推 L1 回归(最小化预测与真值动作的平均 L1 距离);对照的扩散变体用 DDIM 采样、50 个扩散步、squared-cosine beta schedule、4 层噪声预测器(与 L1 头同架构),但推理要 50 步去噪,延迟高。
- (仅 OFT+)FiLM 语言接地:把任务语言 embedding 取平均,投影出 γ、β,对 SigLIP 与 DINOv2 两个 ViT 每个 block 的视觉特征做仿射调制
F̂ = (1+γ)⊙F + β。关键实现细节:γ、β 是 D_ViT 维(按 hidden 维、跨所有 patch 空间无关地调制),而非逐 patch 调制——逐 patch 会导致语言接地变差;插在自注意力之后、FFN 之前,每个 block 独立投影器。用 (1+γ) 而非 γ 是因为初始化时 γ、β 近零,保护预训练视觉激活。
可训练参数量(LoRA rank 32):LIBERO 配置约 279M(111M LoRA adapter + 151M 动作头 + 17M 本体投影器);ALOHA OFT+ 配置约 853M(111M LoRA + 269M 动作头 + 17M 本体 + 456M FiLM 投影器)。
数据
这是微调方法论文,用的是现成数据集,规模都不大(相对 openvla 预训练的 100 万条轨迹):
- libero 仿真基准:四套件 LIBERO-Spatial / Object / Goal / Long,各 10 个任务、500 条专家示范(Franka Panda 单臂,含相机图、机器人状态、任务标注、delta 末端位姿动作)。按 openvla 做法过滤失败示范 + 剔除近零幅度动作(论文表中”modified dataset”),每套件独立 LoRA 微调。
- 真实 ALOHA 双臂机器人:四个自采任务,示范量刻意很小——“fold shorts” 20 条、“fold shirt” 30 条、“scoop X into bowl” 45 条(每种配料 15 条)、“put X into pot” 300 条(每物 100 条)。episode 长 400–1250 步(16–50 秒)。动作是 14 维目标绝对关节角,25 Hz(从原生 50 Hz 降频以加速训练)。作者坦言 “put X into pot” 的 300 条是早期为排查语言接地问题堆的,实际不必这么多。
- BridgeData V2 大规模真机 scaling 验证:50,365 条真实 WidowX 示范(是四套 LIBERO 合起来的 25×),验证 OFT 能否吃更大更杂的真机数据。
作者刻意用”小数据 + LoRA”来对标真实从业者迁移场景,而非拼数据规模。
训练方法
目标函数:连续动作用 L1 回归(median-mode 回归,天然对示范噪声有正则/平滑作用);离散对照用 next-token 交叉熵;扩散对照用条件去噪。三者在受控实验里逐一比较。
微调策略:一律 LoRA(rank 32),因为下游数据集小(500 条 vs 预训练 1M)。不做模型分片,直接 DDP 把 batch 切到多卡。收敛判据统一为归一化 L1 loss < 0.01。
关键超参(LIBERO):8×A100/H100(80GB),LR 5e-4(100K 步后降到 5e-5),总 batch 64(每卡 8),训练 50K–150K 步(除 LIBERO-Goal 用 50K,其余用 150K),图像 224×224,无观测历史,图像增强用 90% random crop + color jitter。ALOHA OFT+:总 batch 32(每卡 4),50K 步后降 LR(因 ALOHA 数据更小),chunk K=25,开 FiLM。
核心消融结论(LIBERO,绝对成功率):
- 并行解码 + 动作分块(PD&AC):相比自回归 OpenVLA +14%,其中 LIBERO-Long 提升最猛(动作分块捕捉时序依赖、减少复合误差)。
- 连续动作相比离散:再 +5%(预测更精细)。
- L1 回归 ≈ 扩散(95.3 vs 95.4 平均):高容量 OpenVLA 即便用简单 L1 也能建模多任务动作分布,而 L1 训练收敛更快、推理更省。
- 消融 OpenVLA 机器人预训练表征(直接拿 Prismatic VLM 上 OFT):掉 5.2%,证明 OXE 预训练表征即便换了架构/算法仍有用。
- FiLM 在 ALOHA 是刚需:去掉 FiLM,两个语言依赖任务的语言遵循率跌到 33%(等于随机猜三选一);但在 LIBERO 差别很小(微调策略本身已有较好语言接地)。
Infra(训练 / 推理工程)
- 训练硬件:每个训练 job 用 8× A100 或 H100(80GB),跑 50K–150K 步,耗时 1–2 天(视数据集大小)。用 LoRA 而非全量微调,故无需模型分片,纯 DDP。卡少可用梯度累积,只是更慢,官方推荐 4 或 8 卡。GPU 时数量级:单个训练 job 约 8 卡 × 1–2 天 = 8–16 GPU·天 ≈ 192–384 GPU·小时(论文未直接给 GPU-hours,此为按披露推算)。
- 训练显存(bfloat16,官方 FAQ):最小 25.6 GB(LIBERO 单图、chunk 8、batch 1)/ 38.6 GB(ALOHA 三图 + FiLM、chunk 25、batch 1);推荐 44.1 GB(LIBERO 单图 batch 8/卡)/ 62.5 GB(LIBERO 双图 + 本体 batch 8/卡)/ 73.5 GB(ALOHA batch 4/卡)。
- 推理硬件 / 显存:单卡即可——LIBERO 单图 15.9 GB、双图 + 本体 16.2 GB、ALOHA 三图 + FiLM 18.0 GB。
- 推理吞吐 / 延迟(A100,100 次查询平均,7 维动作):base OpenVLA 4.2 Hz / 0.24 s → +PD 15.9 Hz → +PD&AC 108.8 Hz → +PD&AC+Cont-L1 109.7 Hz / 0.073 s(26× 加速);加腕部图 + 本体后 71.4 Hz / 0.112 s。扩散变体因 50 步去噪,延迟高,但靠并行解码 + 分块,整段 episode 完成速度仍与自回归基线相当。
- ALOHA 推理(A100,三张 224×224 图 + 14 维状态,K=25):OpenVLA 原生仅 1.8 Hz / 0.543 s → OpenVLA-OFT+ 77.9 Hz / 0.321 s(43× 吞吐)。对照模型体量/速度:ACT 84M @ 432.8 Hz、Diffusion Policy 157M @ 267.4 Hz、RDT-1B 1.2B @ 84.1 Hz、π0 3.3B @ 291.6 Hz(JAX 实现,其余 PyTorch)、OpenVLA 7.5B。OFT+ 虽比 RDT-1B 大 7×,吞吐(77.9)却逼近它(84.1),因为它单次前向出动作、无需多步去噪。
评测 benchmark
libero 四套件成功率(%),OpenVLA-OFT 均为本文实测,每套件 500 试次(10 任务 × 50 episode):
| 方法(输入=第三人称图 + 语言) | Spatial | Object | Goal | Long | 平均 |
|---|---|---|---|---|---|
| diffusion-policy(scratch) | 78.3 | 92.5 | 68.3 | 50.5 | 72.4 |
| octo(fine-tuned) | 78.9 | 85.7 | 84.6 | 51.1 | 75.1 |
| DiT Policy | 84.2 | 96.3 | 85.4 | 63.8 | 82.4 |
| openvla(fine-tuned) | 84.7 | 88.4 | 79.2 | 53.7 | 76.5 |
| OpenVLA + PD&AC | 91.3 | 92.7 | 90.5 | 86.5 | 90.2 |
| OpenVLA + PD&AC, Cont-Diffusion | 96.9 | 98.1 | 95.5 | 91.1 | 95.4 |
| OpenVLA-OFT(PD&AC, Cont-L1) | 96.2 | 98.3 | 96.2 | 90.7 | 95.3 |
加”腕部图 + 本体状态”后(modified dataset):
| 方法 | Spatial | Object | Goal | Long | 平均 |
|---|---|---|---|---|---|
| π0 + FAST | 96.4 | 96.8 | 88.6 | 60.2 | 85.5 |
| pi0(fine-tuned) | 96.8 | 98.8 | 95.8 | 85.2 | 94.2 |
| OpenVLA-OFT(+额外输入) | 97.6 | 98.4 | 97.9 | 94.5 | 97.1 |
即用更弱底座(比 pi0 预训练数据少、无流匹配),OpenVLA-OFT 仍刷到 97.1% 的 LIBERO 新 SOTA,超过 pi0、MDT、Seer、DiT Policy、octo、diffusion-policy。
真实 ALOHA 四任务(部分完成度评分,图示):微调 VLA 全面胜过从头训练基线;OpenVLA-OFT+ 平均分最高。定性观察:RDT-1B 语言遵循好但闭环纠错弱(漏放碗后仍往空处倒料);π0 反应性最好、能重试抓取,是最强基线;OpenVLA-OFT+ 任务执行与语言遵循双第一。这尤其反直觉——OpenVLA 底座只见过单臂数据,RDT-1B/π0 分别在 6K 条 / 8K 小时双臂数据上预训练过。
BridgeData V2 scaling:5 万条真机数据上,OpenVLA-OFT 平均 69.2% vs 公开 OpenVLA checkpoint 65.8%,证明 OFT 能吃更大更杂的真机数据。单策略同时拟合 LIBERO 四套件也不掉点。
创新点与影响
贡献:把”VLA 怎么微调”从工程直觉变成受控消融结论,提出并验证 PD + AC + 连续动作 + L1 回归四件套配方(可选 FiLM),一举同时改善速度、成功率、输入输出灵活性且保持算法简单。核心洞见有二:(1) 并行解码 + 动作分块不只是提速,还实打实涨成功率(+14%),因为分块能捕捉时序依赖、抑制复合误差;(2) 简单 L1 回归配高容量底座 ≈ 扩散,而训练/推理都更快——项目页进一步用”扩散会忠实复现次优示范、L1 靠有限表达力天然滤噪committing 到 median mode”来解释为何 L1 反而更鲁棒(π0 扩散把勺子插太深复现坏示范,OFT+ 用 L1 插到理想深度 100% 成功)。
改变了什么:给社区一个便宜、可复现、单卡可推理(16–18 GB)的强 VLA 微调基线,把”迁移一个现成 VLA 到新机器人”的门槛拉低,并提供一个反直觉的经验证据——微调配方可能比预训练数据覆盖更决定下游表现。成为后续大量 VLA 工作的对照基线。
作者自陈的局限:
- 多模态示范建模弱:L1 回归趋向学 median mode,面对”同一输入有多个合法动作”的真多模态分布可能吃亏;扩散能建模多模态但会过拟合次优模式。
- 只研究了微调,没碰预训练:OFT 的优势能否外推到大规模预训练、或大规模训练是否仍需扩散这类更强算法,未验证。
- 语言接地不一致:ALOHA 上不加 FiLM 就语言接地崩(33%),但 LIBERO 上没这问题;这种差异(是否源于预训练缺双臂数据)成因不明。
原始链接
- 论文 arXiv:https://arxiv.org/abs/2502.19645 (v2, 2025-04-28)
- PDF:https://arxiv.org/pdf/2502.19645
- 项目主页:https://openvla-oft.github.io/
- 代码 GitHub:https://github.com/moojink/openvla-oft (MIT,1.3k star)
- 模型 checkpoint(HF):https://huggingface.co/moojink/openvla-7b-oft-finetuned-libero-spatial (及 -object / -goal / -long / 四套件合并版)
- 摘要视频:https://youtu.be/T3Zkkr_NTSA
一手源存档(sources/)
- openvla-oft—github-readme — GitHub README(含系统需求、Quick Start、checkpoint 列表、citation)
- openvla-oft—project-page — 项目主页(TLDR、结果小结、L1 vs 扩散深挖、含训练/推理显存与耗时的 FAQ)
- arXiv 原文 PDF(2502.19645)未入 git,引用见上「原始链接」