OpenVLA开源项目:机器人视觉语言动作模型的完整指南
·
OpenVLA开源项目:机器人视觉语言动作模型的完整指南
OpenVLA(Vision-Language-Action)是一个开源的视觉语言动作模型,专门设计用于机器人操作任务的研究和开发。这个拥有7亿参数的模型基于Open X-Embodiment数据集进行预训练,包含了超过97万个机器人操作序列,能够泛化到不同的机器人平台上执行复杂的任务。
项目核心特性
OpenVLA项目具有以下突出特性:
- 多样化数据集支持:原生支持RLDS格式的任意数据集,包括Open X-Embodiment数据集中的任意混合数据
- 易于扩展:基于PyTorch FSDP和Flash-Attention技术,能够快速高效地训练1B到34B参数的模型
- 内置微调支持:提供完整的微调支持,包括完整微调、部分微调和LoRA微调
- 多机器人兼容性:支持多种机器人平台,只需提供相应的传感器数据即可适应不同机器人的控制
快速开始
安装依赖
首先安装必要的依赖项:
pip install torch torchvision rlds prismatic
克隆仓库
git clone https://gitcode.com/gh_mirrors/op/openvla.git
cd openvla
基础推理示例
from transformers import AutoModelForVision2Seq, AutoProcessor
from PIL import Image
import torch
# 加载处理器和VLA模型
processor = AutoProcessor.from_pretrained("openvla/openvla-7b", trust_remote_code=True)
vla = AutoModelForVision2Seq.from_pretrained(
"openvla/openvla-7b",
attn_implementation="flash_attention_2",
torch_dtype=torch.bfloat16,
low_cpu_mem_usage=True,
trust_remote_code=True
).to("cuda:0")
# 获取图像输入并格式化提示
image = get_from_camera(...)
prompt = "In: What action should the robot take to {<INSTRUCTION>}?\nOut:"
# 预测动作(7自由度;针对BridgeData V2进行反规范化)
inputs = processor(prompt, image).to("cuda:0", dtype=torch.bfloat16)
action = vla.predict_action(**inputs, unnorm_key="bridge_orig", do_sample=False)
# 执行动作
robot.act(action, ...)
预训练模型
OpenVLA项目发布了两个主要的预训练模型:
openvla-7b
这是论文中的旗舰模型,基于Prismatic prism-dinosiglip-224px VLM训练,融合了DINOv2和SigLIP视觉主干以及Llama-2 LLM。在包含970K轨迹的Open X-Embodiment大型数据集混合上进行训练。
openvla-v01-7b
开发过程中使用的早期模型,基于Prismatic siglip-224px VLM训练,使用单一的SigLIP视觉主干和Vicuña v1.5 LLM。
完整安装指南
对于完整的预训练和分布式微调,需要按照以下步骤进行完整安装:
# 创建并激活conda环境
conda create -n openvla python=3.10 -y
conda activate openvla
# 安装PyTorch(根据您的计算平台调整)
conda install pytorch torchvision torchaudio pytorch-cuda=12.4 -c pytorch -c nvidia -y
# 克隆并安装openvla仓库
git clone https://gitcode.com/gh_mirrors/op/openvla.git
cd openvla
pip install -e .
# 安装Flash Attention 2用于训练
pip install packaging ninja
pip install "flash-attn==2.5.5" --no-build-isolation
LoRA微调OpenVLA
使用Low-Rank Adaptation(LoRA)方法可以高效地对OpenVLA进行微调:
torchrun --standalone --nnodes 1 --nproc-per-node 1 vla-scripts/finetune.py \
--vla_path "openvla/openvla-7b" \
--data_root_dir <数据集根目录> \
--dataset_name bridge_orig \
--run_root_dir <日志/检查点目录> \
--adapter_tmp_dir <适配器权重临时保存目录> \
--lora_rank 32 \
--batch_size 16 \
--grad_accumulation_steps 1 \
--learning_rate 5e-4 \
--image_aug True \
--wandb_project <项目名称> \
--wandb_entity <实体名称> \
--save_steps <每多少梯度步保存检查点>
完整微调OpenVLA
如果需要完全微调所有75亿参数,可以使用以下命令:
torchrun --standalone --nnodes 1 --nproc-per-node 8 vla-scripts/train.py \
--pretrained_checkpoint <预训练检查点路径> \
--vla.type prism-dinosiglip-224px+mx-bridge \
--data_root_dir <数据集根目录> \
--run_root_dir <日志/检查点目录> \
--run_id <可选的WandB运行ID> \
--image_aug True \
--wandb_project <项目名称> \
--wandb_entity <实体名称> \
--save_interval <每多少梯度步保存检查点> \
--is_resume False
从零开始训练VLA
OpenVLA提供了完整的配置和脚本来在Open X-Embodiment数据集的任意子集上训练VLA模型:
# 在BridgeData V2上使用Prismatic DINO-SigLIP 224px主干训练VLA
torchrun --standalone --nnodes 1 --nproc-per-node 8 vla-scripts/train.py \
--vla.type "prism-dinosiglip-224px+mx-bridge" \
--data_root_dir <OXE数据根目录> \
--run_root_dir <日志/检查点根目录> \
--wandb_project "<项目名称>" \
--wandb_entity "<实体名称>"
项目结构
OpenVLA项目采用模块化设计,主要目录结构包括:
prismatic/: 核心模型和训练代码vla-scripts/: VLA特定的训练和微调脚本experiments/: 实验代码和机器人相关工具scripts/: 预处理和预训练脚本
技术栈
OpenVLA构建于以下强大的技术栈之上:
- PyTorch: 深度学习框架基础
- FSDP: Facebook Scale Data Parallelism,用于大规模模型训练
- Flash-Attention: 计算注意力机制的优化库
- RLDS: 强化学习数据集标准库
- Open X-Embodiment Dataset: 提供多样化机器人操作场景的数据集
- Prismatic VLMs: 可扩展的视觉语言模型基础架构
应用场景
OpenVLA适用于多种机器人操作场景:
- 工业自动化: 生产线上的物体抓取和放置
- 家庭服务机器人: 日常家务任务的执行
- 医疗机器人: 辅助手术和康复训练
- 仓储物流: 货物分拣和搬运
- 科研教育: 机器人学习算法研究
最佳实践
在使用OpenVLA时,建议遵循以下最佳实践:
- 数据预处理: 确保输入数据格式符合RLDS标准
- 模型选择: 根据任务复杂度选择合适的模型规模
- 微调策略: 对于新任务,优先尝试LoRA微调
- 硬件配置: 确保有足够的GPU内存进行训练和推理
- 评估指标: 使用适当的评估指标来验证模型性能
OpenVLA为机器人视觉语言动作建模提供了一个强大而灵活的开源框架,无论是学术研究还是工业应用,都能从中受益。
更多推荐

所有评论(0)