如何用 LeRobot 在 MetaWorld MT50 基准上评估策略?
【免费下载链接】lerobot🤗 LeRobot: Making AI for Robotics more accessible with end-to-end learning项目地址: https://gitcode.com/GitHub_Trending/le/lerobot
你手上已经有一个训练好的策略(VLA 或通用操作策略),想在 LeRobot 内置的 Meta-World 仿真环境中,用完整的 MT50(50 个任务)基准衡量它的多任务表现。完成这篇文章后,你会得到一次覆盖 50 个任务、每任务 10 个回合(共 500 个回合)的评估,以及按任务组和整体汇总的成功率指标。前提是:已按 LeRobot 官方安装说明装好 LeRobot,并且策略与 Meta-World 环境的观测/动作接口一致。
MT50 基准包含什么
Meta-World 是面向多任务与元强化学习的连续控制操作仿真基准,在固定的 Sawyer 机械臂桌面上捆绑了 50 个任务。LeRobot 支持按单个任务、难度分组或完整 MT50 来评估,分组如下(引自 Meta-World 文档):
| 分组 | CLI 名称 | 任务数 | 说明 |
|---|---|---|---|
| Easy | easy | 28 | 简单动力学、单步目标 |
| Medium | medium | 11 | 需要多步推理 |
| Hard | hard | 6 | 复杂接触与精细操作 |
| Very Hard | very_hard | 5 | 套件中最难的任务 |
| MT50(全部) | 逗号分隔列表 | 50 | 完整多任务设置 |
四个难度组合计 28 + 11 + 6 + 5 = 50,正好覆盖全部任务,所以--env.task=easy,medium,hard,very_hard等价于跑完整 MT50(文档中 MT50 一行给出的 CLI 形式是「Comma-separated list」,即把 50 个任务名用逗号列出)。文档同时说明 MT50 评估使用固定物体/目标位置与 one-hot 任务向量来保持一致性,并在 HF Hub 提供了对应的 LeRobot 格式数据集lerobot/metaworld_mt50(若你还没有策略,它是训练侧的配套数据)。
策略侧需要匹配的接口(来自同一文档的 "Policy inputs and outputs" 一节):
observation.image—— 单个corner2相机视角,480x480 HWC uint8;observation.state—— 4 维本体感知(末端位置 + 夹爪);- 动作 ——
Box(-1, 1, shape=(4,)),即 3 维末端增量 + 1 维夹爪。
准备环境
在按 LeRobot 官方安装说明完成安装之后,追加 Meta-World 扩展依赖:
pip install -e ".[metaworld]"该 extra 会同时安装lerobot[dataset]、metaworld==3.0.0与lerobot[scipy-dep](见 pyproject.toml 的依赖定义)。
文档给出了一个明确的排错项:如果在运行 Meta-World 环境时遇到AssertionError: ['human', 'rgb_array', 'depth_array'],这是 Meta-World 与你的 Gymnasium 版本不匹配,用下面命令修复:
pip install "gymnasium==1.1.0"策略路径是评估命令的前置条件。--policy.path可以填 Hub 上策略的 repo ID,或指向一个用Policy.save_pretrained保存的本地目录(见 eval 配置)。注意:如果完全不提供该参数,LeRobot 会用随机权重从零构建策略并只发出一条警告,此时评估结果没有意义,务必检查输出日志确认加载的是你的策略。
运行 MT50 评估
最短主路径——完整 MT50、每任务 10 个回合(文档推荐的可复现基准设置,50 个任务共 500 个回合):
lerobot-eval \ --policy.path="your-policy-id" \ --env.type=metaworld \ --env.task=easy,medium,hard,very_hard \ --eval.batch_size=1 \ --eval.n_episodes=10其中your-policy-id替换为你的策略 repo ID 或本地权重目录路径,其余参数与文档示例一致:
--env.task接受逗号分隔的显式任务名列表(如assembly-v3,dial-turn-v3)或难度组名;--eval.batch_size控制并行运行的环境数量;--eval.n_episodes设定每个任务运行的回合数。
在跑完整 MT50 之前,可以先用文档标注为 "Default evaluation (recommended)" 的 medium 分组(11 个任务)做一次快速验证,确认策略能正常加载、环境能出图:
lerobot-eval \ --policy.path="your-policy-id" \ --env.type=metaworld \ --env.task=medium \ --eval.batch_size=1 \ --eval.n_episodes=10medium 是覆盖度与算力之间的平衡点;确认流程跑通后再切换回上面的 MT50 命令。
验证评估结果
运行过程中,lerobot-eval会在进度条上实时显示running_success_rate(百分比),成功判定取自每个环境info["is_success"]键(见 eval 脚本 中的final_info处理逻辑,以及 Meta-World 环境实现 中每步写入的is_success字段)。跑完后,脚本按"任务组"和"整体"两个层面累计sum_rewards、max_rewards、successes等指标(见 eval 脚本 中的_accumulate_to聚合逻辑),这就是你与 MT50 基准对齐的最终成功率。文档也提醒:写后处理或日志时以info["is_success"]作为成功指标,才能与基准口径一致。
评估产物默认写入outputs/eval/<日期>/<时间>_<job_name>目录(未指定--output_dir时,见 eval 配置)。
限制与注意事项
- 单个回合最多 500 步:环境按 MT1 配置构建,
max_path_length=500(Meta-World 环境实现 中的_max_episode_steps),达到上限即截断,成功与否以is_success为准。 - 完整 MT50 共 500 个回合,算力开销明显高于 medium(11 个任务);
--eval.batch_size越大并行环境越多,文档示例统一使用 1,可按机器情况调整。 - 若你计划训练多任务策略再回来评估,文档建议采用 MT10/MT50 惯例的 one-hot 任务条件化,让策略拥有显式任务上下文。
- 遇到前面提到的 Gymnasium 断言错误时,直接按
pip install "gymnasium==1.1.0"处理,不要升级其他依赖猜测修复。
【免费下载链接】lerobot🤗 LeRobot: Making AI for Robotics more accessible with end-to-end learning项目地址: https://gitcode.com/GitHub_Trending/le/lerobot
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考