Meta-World

Meta-World 是一个开源 simulation benchmark,用于连续控制机器人操作中的多任务与元强化学习。它包含 50 个多样化的操作任务,使用日常物体和通用的桌面 Sawyer 机械臂,为测试算法能否学习多种不同任务并快速泛化到新任务提供了一个标准化实验平台。

MetaWorld MT10 demo

可用任务

Meta-World 提供 50 个任务,并按难度分组。在 LeRobot 中,你可以针对单个任务、难度分组或完整的 MT50 套件进行评估:

分组CLI 名称任务说明
简单easy28具有简单动力学和单步目标的任务
中等medium11需要多步 inference 的任务
困难hard6具有复杂接触和精细操作的任务
极难very_hard5套件中最具挑战性的任务
MT50(全部)逗号分隔的列表50全部 50 个任务——最具挑战性的多任务设置

你也可以直接传入单个任务名称(例如 assembly-v3dial-turn-v3)。

我们在 HF Hub 上提供了适用于 LeRobot 的 Meta-World MT50 dataset:lerobot/metaworld_mt50。该 dataset 为 MT50 评估格式化,使用全部 50 个任务并固定物体/目标位置,采用 one-hot 任务向量以保持一致。

安装

按照 LeRobot 安装说明操作后:

pip install -e ".[metaworld]"
如果在运行 Meta-World 环境时遇到 `AssertionError: ['human', 'rgb_array', 'depth_array']`,这是 Meta-World 与你的 Gymnasium 版本不匹配所致。可通过以下方式修复:
pip install "gymnasium==1.1.0"

评估

默认评估(推荐)

在中等难度划分上评估(覆盖范围与计算量之间的良好平衡):

lerobot-eval \
  --policy.path="your-policy-id" \
  --env.type=metaworld \
  --env.task=medium \
  --eval.batch_size=1 \
  --eval.n_episodes=10

单任务评估

在特定任务上评估:

lerobot-eval \
  --policy.path="your-policy-id" \
  --env.type=metaworld \
  --env.task=assembly-v3 \
  --eval.batch_size=1 \
  --eval.n_episodes=10

多任务评估

跨多个任务或难度分组进行评估:

lerobot-eval \
  --policy.path="your-policy-id" \
  --env.type=metaworld \
  --env.task=assembly-v3,dial-turn-v3,handle-press-side-v3 \
  --eval.batch_size=1 \
  --eval.n_episodes=10
  • --env.task 接受显式的任务列表(逗号分隔)或难度分组(例如 easymediumhardvery_hard)。
  • --eval.batch_size 控制并行运行的环境数量。
  • --eval.n_episodes 设置每个任务运行的 episode 数。

policy 输入与输出

observation:

  • observation.image——单相机视图(corner2),480x480 HWC uint8
  • observation.state——4 维本体感知 state(end-effector 位置 + gripper)

action:

  • Box(-1, 1, shape=(4,)) 中的连续控制——3D end-effector 增量 + 1D gripper

推荐的评估 episode 数

为获得可复现的 benchmark 结果,请使用每个任务 10 个 episode。对于完整的 MT50 套件,这总计为 500 个 episode。如果你关注泛化能力,请在完整的 MT50 上运行——它故意设计得很有挑战性,比少数几个狭窄任务更能揭示优势与不足。

训练

示例训练命令

在 Meta-World 任务的一个子集上训练 SmolVLA policy:

lerobot-train \
  --policy.type=smolvla \
  --policy.repo_id=${HF_USER}/metaworld-test \
  --policy.load_vlm_weights=true \
  --dataset.repo_id=lerobot/metaworld_mt50 \
  --env.type=metaworld \
  --env.task=assembly-v3,dial-turn-v3,handle-press-side-v3 \
  --output_dir=./outputs/ \
  --steps=100000 \
  --batch_size=4 \
  --eval.batch_size=1 \
  --eval.n_episodes=1 \
  --env_eval_freq=1000

实用建议

  • 在多任务训练中使用 one-hot 任务条件(MT10/MT50 约定),使 policy 具有明确的任务上下文。
  • 在编写后处理或日志时,检查 dataset 任务描述和 info["is_success"] 键,使你的成功率指标与 benchmark 保持一致。
  • 调整 batch_sizestepsenv_eval_freq 以匹配你的计算预算。
在 GitHub 上更新