OpenVLA-OFT+ 在真实世界 ALOHA 机器人任务中的应用

相关文件

评估

  • experiments/robot/aloha/:ALOHA 训练和评估文件
    • run_aloha_eval.py:ALOHA 评估脚本(客户端;见下文 “服务器端”)
    • aloha_utils.py:ALOHA 评估工具
    • 从原始 ALOHA GitHub 仓库 复制的其他 ALOHA 机器人环境文件:
      • constants.py
      • real_env.py
      • robot_utils.py
  • experiments/robot/:通用评估工具文件
    • openvla_utils.py:OpenVLA 特定的评估工具
    • robot_utils.py:其他评估工具
  • vla-scripts/deploy.py:VLA 服务器部署脚本(服务器端)

注意:与 LIBERO 评估设置不同,这里我们使用服务器 - 客户端接口。如果用户用于控制机器人的机器无法访问具有足够规格的本地 GPU 来运行微调后的 VLA 策略,这将特别有用。

训练

  • experiments/robot/aloha/:ALOHA 训练和评估文件
    • preprocess_split_aloha_data.py:ALOHA 数据预处理脚本
  • vla-scripts/finetune.py:VLA 微调脚本

设置

为训练策略和在 VLA 服务器上部署它们设置一个 conda 环境(参见 SETUP.md 中的说明)。

在 ALOHA 机器人数据上进行微调

我们假设您已经收集了一组关于 ALOHA 机器人的专家演示。

首先,使用我们的 preprocess_split_aloha_data.py 脚本预处理原始 ALOHA 数据集:将图像从 480x640 缩小到 256x256,并分割为训练集和验证集。以下是我们论文中 “将 X 放入锅中” 任务的示例(每个情节有 3 个可能的目标对象):

python experiments/robot/aloha/preprocess_split_aloha_data.py \ --dataset_path /scr/moojink/data/aloha1_raw/put_green_pepper_into_pot/ \ --out_base_dir /scr/moojink/data/aloha1_preprocessed/ \ --percent_val 0.05 python experiments/robot/aloha/preprocess_split_aloha_data.py \ --dataset_path /scr/moojink/data/aloha1_raw/put_red_pepper_into_pot/ \ --out_base_dir /scr/moojink/data/aloha1_preprocessed/ \ --percent_val 0.05 python experiments/robot/aloha/preprocess_split_aloha_data.py \ --dataset_path /scr/moojink/data/aloha1_raw/put_yellow_corn_into_pot/ \ --out_base_dir /scr/moojink/data/aloha1_preprocessed/ \ --percent_val 0.05 

然后,将预处理后的 ALOHA 数据集转换为与 OpenVLA 微调兼容的单个 RLDS 数据集。此过程与原始 OpenVLA 仓库中的过程相同。有关转换为 RLDS 的说明,请参见 此处(示例 ALOHA 预处理到 RLDS 的转换脚本可在 此处 获得;该脚本将上述三个预处理数据集转换为一个统一的 RLDS 数据集,并包含训练 / 验证拆分)。

转换为 RLDS 后,通过在 configs.py此处)、transforms.py此处)和 mixtures.py此处)中为其添加条目,将数据集(对于上面的示例任务,称为 aloha1_put_X_into_pot_300_demos)注册到我们的数据加载器。作为参考,在每个这些文件中,都有我们在论文中使用的 ALOHA 数据集的示例条目。

微调之前,在 prismatic/vla/constants.py 中设置所需的 ALOHA 动作块大小(参见 ALOHA_CONSTANTS 中的 NUM_ACTIONS_CHUNK)。我们默认将其设置为 25,因为在 ALOHA 设置中,我们使用 25 Hz 的控制频率以降低存储成本和训练时间(同时仍保持机器人运动的平滑性)。如果您使用 50 Hz,我们建议将 NUM_ACTIONS_CHUNK 设置为 50。一般来说,1 秒长的动作块是一个不错的默认值。不要修改 ACTION_PROPRIO_NORMALIZATION_TYPE:由于 ALOHA 机器人动作空间是绝对关节角度,我们不希望使用会剪辑异常值的归一化方案(例如我们在 LIBERO 中用于相对末端执行器姿态动作的 Q1-Q99 归一化),因为这会阻止模型输出某些对解决任务至关重要的机器人关节角度。

现在开始微调!以下是使用我们的 OFT+ 方法在上面的 “将 X 放入锅中” 任务上微调 OpenVLA 的示例命令(“OFT+” 中的 “+” 表示包含 FiLM 以增强语言接地)。将第一行中的 X 替换为您可用的 GPU 数量。

torchrun --standalone --nnodes 1 --nproc-per-node X vla-scripts/finetune.py \ --vla_path openvla/openvla-7b \ --data_root_dir /PATH/TO/RLDS/DATASETS/DIR/ \ --dataset_name aloha1_put_X_into_pot_300_demos \ --run_root_dir /YOUR/CHECKPOINTS/AND/LOG/DIR/ \ --use_l1_regression True \ --use_diffusion False \ --use_film True \ --num_images_in_input 3 \ --use_proprio True \ --batch_size 4 \ --learning_rate 5e-4 \ --num_steps_before_decay 50000 \ --max_steps 100005 \ --use_val_set True \ --val_freq 10000 \ --save_freq 10000 \ --save_latest_checkpoint_only False \ --image_aug True \ --lora_rank 32 \ --wandb_entity "YOUR_WANDB_ENTITY" \ --wandb_project "YOUR_WANDB_PROJECT" \ --run_id_note parallel_dec--25_acts_chunk--continuous_acts--L1_regression--3rd_person_img--left_right_wrist_imgs--proprio_state--film 

如果 X = 8 并且评估 100K 步 checkpoint,上述训练命令应该能复现我们在 “将 X 放入锅中” 任务上的 OpenVLA-OFT+ 结果。它将使用 3 个输入图像(1 个第三人称图像 + 2 个手腕相机图像)微调 OpenVLA。请注意,我们在某个时间点(上面的命令中是 50K 步)后使用学习率衰减,因为这样做可以加快训练收敛(根据我们的经验,训练 L1 损失会大幅下降)。

微调的最佳实践:

  • 一般来说,我们建议微调直到训练 L1 损失低于 0.01 并开始趋于稳定。
    • 实现这一点的一种方法是使用我们默认的学习率 5e-4 进行微调,直到损失开始非常缓慢地下降,然后将学习率衰减 10 倍至 5e-5(这应该会使损失大幅下降),并训练直到训练 L1 损失最终趋于稳定。
  • 根据您的数据集大小,您可能需要调整一些超参数。例如,如果您使用包含超过 300 个演示的大型数据集,您可能需要稍后衰减学习率并训练更长时间以获得最佳性能。过早衰减可能会导致次优策略。
  • 如果您的任务不需要良好的语言接地(例如,如果只有一个语言指令),则 FiLM 不是必需的;考虑设置 --use_film False 来训练更少的模型参数。
  • 请确保使用训练时使用的相同设备 / GPU 测试您的策略!否则,性能可能会大幅下降。如果您在用于测试的下游设备上(例如,在 H100 上训练,然后在 A100 上合并后在 A100 上测试)将 LoRA 权重合并到基础模型中,您可能能够避免性能下降。您可以查看我们的脚本 vla-scripts/merge_lora_weights_and_save.py 以离线将 LoRA 适配器合并到基础模型中。如果您在微调期间已经将 LoRA 权重合并到基础 OpenVLA 模型中也没关系;只要您仍然拥有 LoRA 适配器,您总是可以重新下载基础模型并再次合并(merge_lora_weights_and_save.py 将为您处理此问题)。

如果您遇到任何问题,请打开一个新的 GitHub 问题。

启动 ALOHA 机器人评估

在您将用于启动 VLA 服务器的主要 conda 环境(openvla-oft)中,安装一些用于服务器 - 客户端接口的包:

conda activate openvla-oft pip install uvicorn fastapi json-numpy 

在您将用于控制机器人的机器上,设置第二个 conda 环境,该环境将用于运行机器人环境、查询 VLA 服务器并在环境中执行动作:

# 创建并激活客户端 conda 环境 conda create -n openvla-oft-aloha python=3.10 -y conda activate openvla-oft-aloha # 安装 PyTorch # 使用特定于您机器的命令:https://pytorch.org/get-started/locally/ pip3 install torch torchvision torchaudio # 克隆 openvla-oft 仓库并通过 pip 安装以下载依赖项 git clone https://github.com/moojink/openvla-oft.git cd openvla-oft pip install -e . # 安装 ALOHA 机器人环境所需的包 pip install -r experiments/robot/aloha/requirements_aloha.txt 

在具有您将用于运行模型推理的 GPU 的机器上启动 VLA 服务器(使用 openvla-oft conda 环境)。以下是为此的示例命令(根据需要更改):

python vla-scripts/deploy.py \ --pretrained_checkpoint /PATH/TO/FINETUNED/MODEL/CHECKPOINT/DIR/ \ --use_l1_regression True \ --use_film True \ --num_images_in_input 3 \ --use_proprio True \ --center_crop True \ --unnorm_key aloha1_put_X_into_pot_300_demos 

然后,运行 ALOHA 评估脚本。在 vla_server_url 参数中指定 VLA 服务器 URL 或 IP 地址。以下是示例命令:

python experiments/robot/aloha/run_aloha_eval.py \ --center_crop True \ --num_open_loop_steps 25 \ --use_vla_server True \ --vla_server_url <VLA 服务器的 URL> \ --num_rollouts_planned <测试滚动次数> \ --max_steps <每次滚动的最大步数> 

如果您遇到任何问题,请打开一个新的 GitHub 问题。

故障排除提示

提示 #1:如果您遇到 ROS 错误,例如 ImportError: /lib/x86_64-linux-gnu/libp11-kit.so.0: undefined symbol: ffi_type_pointer, version LIBFFI_BASE_7.0,请尝试在您的客户端 conda 环境(openvla-oft-aloha)中运行以下命令:plaintext

conda install -c conda-forge libffi

Read more

VSCode自定义Copilot Agent与Awesome Agent

VSCode自定义Copilot Agent与Awesome Agent

本文将介绍如何在VSCode中创建自定义的Agent,以及哪里可以获取到现有的Agent模板 当我们在VSCode中使用Copilot时,可以选择以下几种模式。 Ask, Edit, Agent, 以及在2025年末时我们可以使用的全新的Plan模式。 不过除此之外,其实我们还有办法自定义属于自己的Agent。 选择右下角Agent菜单,选择Configure Custom Agents... 如选择.github\agents 则会在本工作区域中生成该路径并创建一个指定命名的agent.md文件 如果选择User Data则是会创建全局的Agent模板 在vscode中,也可以直接在文件中通过Configure Tools轻松配置所需要使用的tools,非常方便。 然后我们便可以在copilot中使用自己的Agent了. 当然,自己编写一个相对复杂的agent模板比较耗时,而awesome-copilot项目为我们提供了许多的模板,当然不止是agent,也提供了丰富的提示词模板(prompt)和指导词模板(instructions),以及

快速掌握PyMAVLink:无人机通信的Python实战指南

快速掌握PyMAVLink:无人机通信的Python实战指南 【免费下载链接】pymavlinkpython MAVLink interface and utilities 项目地址: https://gitcode.com/gh_mirrors/py/pymavlink 在当今无人机技术飞速发展的时代,PyMAVLink作为Python实现的MAVLink协议库,已经成为连接地面站与飞行器的关键桥梁。这个强大的工具库不仅简化了无人机通信的复杂性,更为开发者提供了完整的解决方案。 从零开始:PyMAVLink架构解析 核心通信层设计 PyMAVLink的核心架构围绕MAVLink协议栈构建,通过mavutil.py模块实现了与无人机的高效通信。该模块提供了多种连接方式,包括串口、TCP/UDP网络连接等,确保开发者能够灵活应对不同的应用场景。 协议版本支持:项目支持完整的MAVLink协议版本演进,从v0.9到v2.0,每个版本都有对应的dialects目录实现。这种分层架构确保了向后兼容性和协议扩展性。 多语言代码生成引擎 generator/mavgen.py是整

本地部署智能家居集成解决方案 ESPHome 并实现外部访问( Linux 版本)

本地部署智能家居集成解决方案 ESPHome 并实现外部访问( Linux 版本)

ESPHome 是一款用于 ESP8266 和 ESP32 芯片设备的开源系统,它允许用户通过定义简单的 YAML 配置文件来创建复杂的物联网( IoT )设备应用,而无需直接编写底层代码,特别适合于智能家居解决方案,可以与 Home Assistant 完美集成,但也可以独立使用。本文将详细介绍如何在 Linux 系统局域网内部署 ESPHome 并结合路由侠实现外网访问局域网内部署的 ESPHome 。 第一步,本地部署 ESPHome 1,本教程使用 Linux Ubuntu 系统进行演示,首先输入以下命令更新软件包列表并安装一些必要的依赖项。 sudo apt-get update && sudo apt-get install -y python3-pip python3-dev git 2,安装虚拟环境 venv 模块。 sudo

基于ROS的视觉导航系统实战:黑线循迹+激光笔跟随双模态实现(冰达机器人Nano改造)

基于ROS的视觉导航系统实战:黑线循迹+激光笔跟随双模态实现(冰达机器人Nano改造)

本篇内容是对另一篇文章《双轮智能平衡车基于图像识别技术探究道路自动驾驶理论模型与应用》的补充,有兴趣的同学可以先去那篇文章补一下课,再来看本篇文章效果更佳哦!!! 同时本次分享内容资源均同步上传至github与ZEEKLOG,想要深入学习的同学可以去下载学习!! (资源名称:基于ROS的视觉导航系统实战) 话不多说让我们进入正题吧!         在机器人室内导航场景中,视觉导航凭借低成本、高灵活性的优势成为教育机器人与服务机器人的主流方案。本文基于冰达机器人Nano系列进行硬件改造与软件开发,搭建了一套基于ROS的轻量级视觉导航系统,实现黑线循迹与红外激光笔动态跟随双模态功能。系统兼容ROS Melodic/Noetic版本,针对冰达机器人Nano的算力与底盘特性进行深度优化,低算力依赖、实时性强,非常适合入门级机器人开发者学习与二次拓展。本文将从项目设计、硬件改造、环境配置、代码实现、运行调试到扩展方向进行全流程精细讲解,并附上完整可运行代码与问题排查指南。 目录 1. 项目概述与核心亮点 2. 硬件配置与冰达机器人Nano改造方案 3. 软件环境配置(含版本适