OpenVLA & OpenVLA-OFT 技术讲解

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 AutoProcessorAutoModelForVision2Seq 加载,输入图像和 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"

相关推荐
w_t_y_y2 小时前
AI工程化设计(五)Agent设计范式(4)Multi-Agent——demo
人工智能
墨染天姬2 小时前
【AI】kimi开源MUON优化器
人工智能·开源
人工智能培训2 小时前
AI模型部署进阶:Docker容器化部署AI项目
人工智能·深度学习·机器学习·docker·容器·transformer·知识图谱
佳xuan2 小时前
部署大模型
人工智能
AI服务老曹2 小时前
深度架构解析:如何构建兼容 X86/ARM 及异构计算(GPU/NPU)的级联级 AI 视频管理平台
arm开发·人工智能·架构
哦哦~9212 小时前
揭示多功能合成界面,增强致密厚复合电极的机械和电化学性能
服务器·网络·人工智能
企业架构师老王2 小时前
注册审批申报材料自动校验:如何利用实在Agent构建非侵入式架构并降低数据误报率?
大数据·人工智能·ai·架构
吃鱼的灰太狼2 小时前
Hermes 全配置指南:从裸版到 AI Agent 天花板
人工智能
HoneyMoose2 小时前
Discourse 提供 AI 总结功能
人工智能