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

快速搭建个人AI知识库教程(超详细+实战)从零入门到精通,一篇全掌握!

本文详细介绍了一款名为PandaWiki的开源个人知识库工具,它结合传统文档管理与AI检索增强生成技术。文章演示了如何在Linux系统上通过Docker一键部署PandaWiki,配置各类模型,以及从飞书等平台导入文档创建个人AI知识库。该工具支持离线文件上传、AI生成摘要、文档分类管理等功能,并提供多种问答机器人接入方式,是个人知识管理和AI学习的理想解决方案。 最近有点忙,拖更比较久了,大家见谅… 今天我们一起来聊聊知识库。 当下,RAG 技术已经非常成熟了,市面上的各种 AI 知识库产品也很丰富。 在这个 AI 时代的浪潮下,如果你还用传统的笔记软件来管理个人知识,就有点显得 Out 了。 不过,想要选到一款称心如意的知识库工具,似乎也不是那么简单。 首先是数据隐私上的考虑,虽然现在很多在线 AI 平台似乎都支持了知识库上传的能力,但有些 “私密” 的知识我们可能不想上传到 “云端”。 另外,虽然有很多大厂直接提供了非常全面的私有化部署方案,但是动辄几万的费用让人望而却步。 那就只能从开源工具上下手了,作为个人的知识库管理工具,我希望使用一款 “小而美” 的产品,

AI 驱动游戏:鸿蒙生态的机会在哪里?

AI 驱动游戏:鸿蒙生态的机会在哪里?

子玥酱(掘金 / 知乎 / ZEEKLOG / 简书 同名) 大家好,我是子玥酱,一名长期深耕在一线的前端程序媛 👩‍💻。曾就职于多家知名互联网大厂,目前在某国企负责前端软件研发相关工作,主要聚焦于业务型系统的工程化建设与长期维护。 我持续输出和沉淀前端领域的实战经验,日常关注并分享的技术方向包括前端工程化、小程序、React / RN、Flutter、跨端方案, 在复杂业务落地、组件抽象、性能优化以及多端协作方面积累了大量真实项目经验。 技术方向:前端 / 跨端 / 小程序 / 移动端工程化 内容平台:掘金、知乎、ZEEKLOG、简书 创作特点:实战导向、源码拆解、少空谈多落地 文章状态:长期稳定更新,大量原创输出 我的内容主要围绕 前端技术实战、真实业务踩坑总结、框架与方案选型思考、行业趋势解读 展开。文章不会停留在“API 怎么用”,而是更关注为什么这么设计、在什么场景下容易踩坑、

2026年3月大模型全景深度解析:国产登顶、百万上下文落地、Agent工业化,AI实用时代全面来临[特殊字符]

2026年3月大模型全景深度解析:国产登顶、百万上下文落地、Agent工业化,AI实用时代全面来临[特殊字符]

🔥个人主页:北极的代码(欢迎来访) 🎬作者简介:java后端学习者 ❄️个人专栏:苍穹外卖日记,SSM框架深入,JavaWeb ✨命运的结局尽可永在,不屈的挑战却不可须臾或缺! 前言: 2026年3月,全球大模型领域迎来颠覆性变革——国产模型实现全球调用量反超,百万上下文从“实验室概念”变成“工业级标配”,Agent智能体摆脱“玩具级应用”,正式进入千行百业。本文将从行业格局、核心技术、产业落地 3大维度,结合具体产品参数、技术细节和实战案例,全面拆解当前大模型最新动态,帮开发者精准把握AI时代红利(干货密集,建议收藏反复研读)。 一、行业炸点:国产大模型历史性反超,全球格局彻底重塑(附权威数据) 2026年3月,OpenRouter(全球最大AI模型调用统计平台)、斯坦福HAI研究院联合发布《全球大模型发展月报》,核心数据颠覆行业认知:中国大模型周调用量达4.69万亿Token,同比增长320%,连续两周超越美国(4.21万亿Token),全球调用量TOP10中,

Flutter 组件 tavily_dart 的适配 鸿蒙Harmony 实战 - 驾驭 AI 搜索引擎集成、实现鸿蒙端互联网知识精密获取与语义增强方案

Flutter 组件 tavily_dart 的适配 鸿蒙Harmony 实战 - 驾驭 AI 搜索引擎集成、实现鸿蒙端互联网知识精密获取与语义增强方案

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 tavily_dart 的适配 鸿蒙Harmony 实战 - 驾驭 AI 搜索引擎集成、实现鸿蒙端互联网知识精密获取与语义增强方案 前言 在鸿蒙(OpenHarmony)生态的智能个人助理、行业垂直类知识中枢以及需要实时获取互联网最新动态并进行 AI 语义加工的各种前沿应用开发中,“信息的有效检索与精准抽取”是决定 AI 应用是否具备“生命感”的关键泵口。面对浩如烟海且充满噪声的互联网网页。如果仅仅依靠传统的关键词匹配。那么不仅会导致应用返回大量无关紧要的垃圾信息。更会因为无法将网页内容转化为 AI 易于理解的结构化上下文(Context),引发严重的 LLM(大语言模型)幻觉风险。 我们需要一种“AI 驱动、语义过滤”的搜索艺术。 tavily_dart 是一套专为 AI