1. 理解
OpenVLA 是一个开源的机器人 Vision-Language-Action 模型:输入图像和自然语言指令,直接输出机器人动作。
OpenVLA-OFT 是在 OpenVLA 基础上的 优化微调方案:重点解决原版 OpenVLA 推理慢、动作离散化精度有限、多相机/本体状态接入不够灵活的问题。
2. OpenVLA 解决痛点
传统机器人策略通常是:
text
相机图像 / 状态
↓
感知模型
↓
任务规划
↓
动作策略
↓
机器人控制
问题是每个任务、每种机器人、每个场景都要单独训练或调参。
OpenVLA 的目标是把它压成一个统一模型:
text
图像 + 语言指令
↓
VLA 大模型
↓
机器人动作
例如:
text
输入:
图像:桌面场景
指令:"put the corn into the pot"
输出:
机器人末端执行器动作:
Δx, Δy, Δz, Δroll, Δpitch, Δyaw, gripper
OpenVLA 官方介绍它是 7B 参数开源 VLA ,基于 Open X-Embodiment 数据集中的 970k 机器人轨迹训练,可以控制多种机器人,并支持通过参数高效微调适配新机器人。([OpenVLA][1])
3. OpenVLA 架构
OpenVLA 可以理解成:
text
RGB 图像
↓
视觉编码器:SigLIP + DINOv2
↓
视觉特征 projector
↓
Llama-2 7B 语言模型
↓
动作 token
↓
反归一化为机器人动作
官方说明中,OpenVLA 由三个核心部分组成:融合视觉编码器,包含 SigLIP 和 DINOv2;把视觉特征映射到语言模型输入空间的 projector;以及用于预测 tokenized actions 的 Llama-2 7B backbone。([OpenVLA][1])
3.1 输入
典型输入包括:
text
image: 当前相机图像
prompt: "In: What action should the robot take to {instruction}?\n Out:"
官方示例里,模型通过 HuggingFace AutoProcessor 和 AutoModelForVision2Seq 加载,输入图像和 prompt 后调用 predict_action() 输出动作。([GitHub][2])
3.2 输出
原版 OpenVLA 输出的是 离散动作 token。
大致流程是:
text
连续动作
↓
归一化
↓
每个动作维度离散成 256 个 bin
↓
作为语言 token 预测
↓
解码回连续动作
OpenVLA-OFT 论文明确指出,原版 OpenVLA 会把每个动作维度归一化后均匀离散到 256 bins,这种方式方便复用 VLM 的 token 预测机制,但会损失细粒度动作信息。([arXiv][3])
4. OpenVLA 的训练方式
OpenVLA 本质上是把机器人动作学习改造成类似语言模型的预测问题:
text
图像 patch embedding + 语言 token
↓
Transformer decoder
↓
动作 token 序列
训练目标类似:
text
给定图像和指令,预测专家示范动作 token
可以理解为大规模行为克隆:
text
robot demonstration dataset
↓
(image, instruction, action)
↓
supervised fine-tuning / behavior cloning
OpenVLA 官方代码支持 RLDS 数据格式、Open X-Embodiment 数据混合、FSDP、Flash-Attention,以及 full / partial / LoRA 等微调方式。([GitHub][2])
5. OpenVLA 的主要问题
原版 OpenVLA 很有意义,但工程落地有几个明显问题。
5.1 自回归动作生成慢
原版 OpenVLA 像语言模型一样一个 token 一个 token 地生成动作。
例如 7-DoF 动作:
text
a1 → a2 → a3 → a4 → a5 → a6 → a7
这意味着一次动作预测需要多次 decoder 计算。
对机器人高频控制来说,这很不友好。
5.2 离散动作精度有限
连续动作被压成 256-bin token:
text
真实动作:0.03742
离散 bin:第 k 档
还原动作:0.036xx 或 0.038xx
对桌面抓取、双臂操作、精细插入等任务,动作量化误差会影响成功率。
5.3 单图像输入不够
很多真实机器人需要:
text
第三视角相机
腕部相机
机器人关节状态
夹爪状态
历史状态
原版 OpenVLA 主要是单图像输入形式,扩展到多相机和 proprioception 不够自然。OFT 论文也指出,原始 OpenVLA 处理单相机视角,而一些机器人需要多视角和额外机器人状态。([arXiv][3])
6. OpenVLA-OFT 意义
OpenVLA-OFT = OpenVLA + Optimized Fine-Tuning recipe
它不是简单 LoRA,也不是单纯量化,而是围绕 VLA 微调设计的一套优化方案。
核心目标:
text
更快推理
更高成功率
更适合连续机器人控制
更容易接入多相机 / proprioception
论文中总结 OFT 包含三个关键组件:
text
1. parallel decoding + action chunking
2. continuous action representation
3. L1 regression objective
这些组件共同提升了推理效率、任务表现和输入输出灵活性。([arXiv][3])
7. OpenVLA-OFT 核心创新
7.1 Parallel Decoding:并行动作解码
原版 OpenVLA:
text
token1 → token2 → token3 → token4 → token5 → token6 → token7
OpenVLA-OFT:
text
[action slot 1, action slot 2, ..., action slot N]
↓
一次 forward 同时预测
OFT 论文说明,parallel decoding 会让模型接收空 action embeddings,并把 causal attention mask 换成 bidirectional attention,从而一次 forward 同时预测所有动作。([arXiv][3])
工程意义很直接:
text
原版:
一个动作维度一个动作维度生成
OFT:
一次 forward 出完整动作,甚至一整段动作 chunk
7.2 Action Chunking:动作块预测
原版:
text
t 时刻输入图像 → 输出 t 时刻动作
t+1 时刻输入图像 → 输出 t+1 时刻动作
OpenVLA-OFT:
text
t 时刻输入图像
↓
一次输出未来 K 步动作
↓
[a_t, a_t+1, a_t+2, ..., a_t+K-1]
这叫 action chunking。
例如 chunk size = 8:
text
一次模型推理 → 输出未来 8 步动作
OFT 论文指出,parallel decoding 可以自然扩展到 action chunking:插入更多空 action embeddings 后,模型可以一次 forward 预测多个未来时间步动作。([arXiv][3])
这对机器人很重要:
text
模型不用每个控制周期都跑一次
控制器可以缓存未来动作序列
推理延迟对控制频率影响变小
7.3 Continuous Action:连续动作输出
原版 OpenVLA:
text
连续动作 → 256-bin 离散 token → 预测 token → 还原连续动作
OpenVLA-OFT:
text
Transformer hidden state
↓
MLP action head
↓
连续动作值
论文中说,OFT 用 MLP action head 替代 decoder 的输出 embedding 层,直接把最后一层 hidden states 映射成连续动作,并用 L1 loss 训练。([arXiv][3])
这对精细控制更友好:
text
离散 token:
适合复用 LLM 生成机制
连续动作:
更适合机器人控制
7.4 L1 Regression:简单但有效的动作回归目标
OFT 没有默认采用复杂 diffusion policy,而是使用:
text
loss = |pred_action - gt_action|
也就是 L1 回归。
论文对比了 L1 regression 和 diffusion objective,指出 L1 回归在保持并行解码效率的同时能提升动作精度;diffusion 更复杂,需要多步去噪,推理延迟更高。([arXiv][3])
在 LIBERO 测试中,OFT 的 continuous action + L1 regression 版本达到 109.7 Hz action generation throughput ,而原始 OpenVLA 是 4.2 Hz;这是 A100 上针对 7D 动作的测量结果。([arXiv][3])
7.5 多图像 + Proprioception 输入
OpenVLA-OFT 支持更复杂的输入:
text
第三视角图像
腕部相机图像
机器人 proprioception
语言指令
OFT 论文描述了它的统一输入方式:每个相机视角经过 OpenVLA dual vision encoder 提取 patch embeddings,再映射到语言 embedding 空间;机器人状态也通过 projector 映射,然后与视觉特征和语言 token 一起拼接输入 decoder。([arXiv][3])
这对真实机器人非常关键。
例如双臂 ALOHA:
text
cam_3rd_person
cam_left_wrist
cam_right_wrist
joint_state
gripper_state
language_instruction
↓
OpenVLA-OFT+
↓
left_arm_action_chunk + right_arm_action_chunk
7.6 OFT+:加入 FiLM 增强语言 grounding
OpenVLA-OFT+ 是在 OFT 基础上加入 FiLM。
FiLM 的作用是让语言指令更强地调制视觉特征。
例如桌上有多个物体:
text
"put the green pepper into the pot"
"put the yellow corn into the pot"
如果模型视觉能力强但语言 grounding 不够,就可能抓错目标。
OFT 论文中说明,FiLM 会把任务描述的语言 embedding 投影成 scale / shift 向量,对视觉特征做仿射调制,从而增强模型对语言输入的注意。([arXiv][3])
官方项目页也说明,OFT+ 在双臂 ALOHA 上用于高频语言驱动控制,并与 π₀、RDT-1B、ACT、Diffusion Policy 等方法进行了对比。([Fine-Tuning Models][4])
8. OpenVLA vs OpenVLA-OFT 对比
| 维度 | OpenVLA | OpenVLA-OFT |
|---|---|---|
| 定位 | 开源 VLA 基座模型 | OpenVLA 的优化微调方案 |
| 模型规模 | 7B | 基于 OpenVLA 7B |
| 动作表示 | 离散 action tokens | 连续动作 |
| 动作生成 | 自回归生成 | 并行解码 |
| 控制方式 | 单步动作预测为主 | 动作 chunk 预测 |
| 损失函数 | next-token / cross entropy | L1 regression |
| 多相机输入 | 原生较弱 | 支持多图像输入 |
| proprioception | 需要额外适配 | 支持 proprio projector |
| 推理速度 | 较慢 | 显著更快 |
| 适合场景 | 研究、零样本/少样本机器人控制 | 高频控制、双臂操作、真实机器人微调 |
OpenVLA-OFT 论文报告:在 LIBERO 四个任务套件上,OpenVLA 平均成功率从 76.5% 提升到 97.1% ,动作生成吞吐提升 26x。([arXiv][3])
9. 工程部署视角
9.1 推荐系统架构
对真实机器人,不建议把 OpenVLA 直接塞进低层控制循环。
更合理的是:
text
ROS2 / Robot Runtime
│
├── camera node
├── proprioception node
├── language command node
│
▼
VLA policy server
│
├── OpenVLA / OpenVLA-OFT
├── GPU inference
└── action chunk output
│
▼
action smoother / safety filter
│
▼
robot controller
也就是:
text
Jetson / Orin:
负责相机采集、ROS2、传感器同步、安全控制
GPU server:
跑 OpenVLA / OpenVLA-OFT 推理或微调
官方 OpenVLA 仓库也提供了 REST API serving 脚本,便于把模型接入已有机器人控制栈,从而避免强制要求机器人本体具备高算力。([GitHub][2])
9.2 显存要求
OpenVLA-OFT 官方仓库给出的系统要求是:
text
Inference:
LIBERO 仿真任务约 16GB VRAM
ALOHA 机器人任务约 18GB VRAM
Training:
1~8 张 GPU
27GB~80GB VRAM,取决于训练设置
([GitHub][5])
OpenVLA 原版 LoRA 微调示例使用单张 A100 80GB;官方也说明可以在更小 GPU 上微调,但至少大约需要 27GB 显存并调整 batch size。([GitHub][2])
所以对你的 Jetson Orin NX 16GB 场景,建议是:
text
不推荐:
Orin NX 单机直接跑完整 OpenVLA-OFT 高频控制
推荐:
Orin NX 跑 ROS2 / 感知 / 安全控制
远端 4090 / 5090 / A100 / L40S 跑 VLA policy server
10. 和 ACT / Diffusion Policy / π₀ / RDT 的关系
可以这样理解:
text
ACT:
小模型、模仿学习、动作 chunk,适合特定任务
Diffusion Policy:
连续动作分布建模强,但多步采样慢
OpenVLA:
VLM + 机器人动作,语义泛化强,但原版推理慢
OpenVLA-OFT:
保留 OpenVLA 的语义能力,同时吸收 ACT 的 action chunk 思路,
用连续动作 + L1 回归提升速度和控制精度
π₀:
更偏新一代通用机器人策略,使用 flow matching
RDT:
机器人 diffusion transformer 路线,偏大规模机器人策略建模
OpenVLA-OFT 项目页称,在 ALOHA 真实机器人实验中,fine-tuned VLAs 整体优于从零训练的 ACT 和 Diffusion Policy,其中 OpenVLA-OFT+ 平均表现最高。([Fine-Tuning Models][4])
11. 针对做具身机器人 / Jetson Orin 最小 VLA 的启示
如果要做一个最小可运行 VLA 系统,不建议一开始就全量复现 OpenVLA-OFT。
更合理路线是:
阶段 1:先做 ACT / Diffusion Policy 基线
text
输入:
RGB 图像 + proprioception
输出:
action chunk
目标:
跑通数据采集、动作同步、ROS2 控制闭环
阶段 2:接入 OpenVLA 做离线 policy server
text
相机图像 + 指令
↓
OpenVLA / OpenVLA-OFT server
↓
动作 chunk
↓
ROS2 action bridge
阶段 3:做任务级微调
数据格式建议设计成:
json
{
"image_primary": "cam_front/000001.jpg",
"image_wrist": "cam_wrist/000001.jpg",
"instruction": "pick up the red block and place it into the box",
"proprio": [0.1, 0.2, 0.3, "..."],
"action": [dx, dy, dz, droll, dpitch, dyaw, gripper]
}
阶段 4:引入 OFT 思路
重点实现:
text
1. action chunk
2. continuous action head
3. L1 loss
4. multi-view image input
5. proprio projector
6. safety filter
12. 总结
OpenVLA 的价值是:
text
把 VLM 的语义理解能力迁移到机器人动作控制
OpenVLA-OFT 的价值是:
text
把 OpenVLA 从"能生成动作"优化成"更适合真实机器人高频控制"
最核心差异:
text
OpenVLA = 图像 + 语言 → 自回归动作 token
OpenVLA-OFT = 图像/多图像 + 语言 + proprioception → 并行连续动作 chunk
对工程落地来说,OpenVLA-OFT 比原版 OpenVLA 更值得参考,尤其是它的:
text
parallel decoding
action chunking
continuous action head
L1 regression
multi-camera input
proprioception projector
FiLM language grounding
参考链接:
1\]: https://openvla.github.io/ "OpenVLA: An Open-Source Vision-Language-Action Model" \[2\]: https://github.com/openvla/openvla "GitHub - openvla/openvla: OpenVLA: An open-source vision-language-action model for robotic manipulation. · GitHub" \[3\]: https://arxiv.org/html/2502.19645v1 "Fine-Tuning Vision-Language-Action Models: Optimizing Speed and Success" \[4\]: https://openvla-oft.github.io/ "Fine-Tuning Vision-Language-Action Models: Optimizing Speed and Success" \[5\]: https://github.com/moojink/openvla-oft "GitHub - moojink/openvla-oft: Fine-Tuning Vision-Language-Action Models: Optimizing Speed and Success · GitHub"