LIBERO-plus 是构建在 LIBERO 之上的鲁棒性 benchmark,用于评估 Vision-Language-Action(VLA)模型。它通过向原始 LIBERO 任务集施加七个独立的扰动维度来系统性地压测 policy,揭示标准 benchmark 未能发现的失败模式。

LIBERO-plus 通过沿以下轴扰动每个原始 LIBERO 任务,创建了约 10 000 个任务变体:
| 维度 | 变化内容 |
|---|---|
| 物体布局 | 目标位置、干扰物体的存在与否 |
| 相机视角 | 相机位置、朝向、视场角 |
| 机器人初始 state | 机械臂起始位姿 |
| 语言指令 | LLM 改写后的任务描述(改写 / 同义词) |
| 光照条件 | 强度、方向、颜色、阴影 |
| 背景纹理 | 场景表面和物体外观 |
| 传感器噪声 | 光度失真和图像退化 |
LIBERO-plus 涵盖与 LIBERO 相同的五个套件:
| 套件 | CLI 名称 | 任务数 | 最大步数 | 描述 |
|---|---|---|---|---|
| LIBERO-Spatial | libero_spatial | 10 | 280 | 需要 inference 空间关系的任务 |
| LIBERO-Object | libero_object | 10 | 280 | 专注于操作不同物体的任务 |
| LIBERO-Goal | libero_goal | 10 | 300 | 目标条件任务,目标会发生变化 |
| LIBERO-90 | libero_90 | 90 | 400 | 来自 LIBERO-100 集合的短时域任务 |
| LIBERO-Long | libero_10 | 10 | 520 | 来自 LIBERO-100 集合的长时域任务 |
安装 LIBERO-plus 会**替换** vanilla LIBERO——它会卸载 `hf-libero`, 从而使 `import libero` 解析到 LIBERO-plus 分支。你不能同时安装这两个版本。 要切换回 vanilla LIBERO,请卸载该分支并使用 `pip install -e ".[libero]"` 重新安装。
sudo apt install libexpat1 libfontconfig1-dev libmagickwand-devpip install -e ".[libero]" "robosuite==1.4.1" bddl easydict mujoco wand scikit-image gym
git clone https://github.com/sylvestf/LIBERO-plus.git
cd LIBERO-plus && pip install --no-deps -e .
pip uninstall -y hf-libero # so `import libero` resolves to the forkLIBERO-plus 从其 GitHub 分支安装,而不是作为 pyproject 额外扩展——该分支以 pip 无法处理的命名空间包形式发布,因此必须克隆它并将其添加到 PYTHONPATH。规范的安装方式请参阅 docker/Dockerfile.benchmark.libero_plus。需要 MuJoCo,因此只支持 Linux。
在运行评估之前设置 MuJoCo 渲染后端:export MUJOCO_GL=egl # headless / HPC / cloud
LIBERO-plus 单独发布其扩展资源包。从 Hugging Face dataset 下载 assets.zip,并将其解压到 LIBERO-plus 包目录中:
# After installing the package, find where it was installed:
python -c "import libero; print(libero.__file__)"
# Then extract assets.zip into <package_root>/libero/assets/在四个标准套件上评估(每个任务 10 个 episode):
lerobot-eval \
--policy.path="your-policy-id" \
--env.type=libero_plus \
--env.task=libero_spatial,libero_object,libero_goal,libero_10 \
--eval.batch_size=1 \
--eval.n_episodes=10 \
--env.max_parallel_tasks=1在一个 LIBERO-plus 套件上评估:
lerobot-eval \
--policy.path="your-policy-id" \
--env.type=libero_plus \
--env.task=libero_spatial \
--eval.batch_size=1 \
--eval.n_episodes=10--env.task 用于选择套件(libero_spatial、libero_object 等)。--env.task_ids 用于限制为特定的任务索引([0]、[1,2,3] 等)。省略该项可运行套件中的所有任务。--eval.batch_size 控制并行运行多少个环境。--eval.n_episodes 设置每个任务运行多少个 episode。通过传递逗号分隔的列表,一次在多个套件上对 policy 进行 benchmark:
lerobot-eval \
--policy.path="your-policy-id" \
--env.type=libero_plus \
--env.task=libero_spatial,libero_object \
--eval.batch_size=1 \
--eval.n_episodes=10LIBERO-plus 支持两种控制模式——relative(默认)和 absolute。不同的 VLA checkpoint 使用不同的 action 参数化进行训练,因此请确保模式与你的 policy 匹配:
--env.control_mode=relative # or "absolute"默认情况下,LeRobot 保留 LIBERO 的硬重置行为。在启用固定初始 state 后,你可以选择软重置,以跳过在每个 episode 重建 simulation 器模型和渲染器:
--env.init_states=true --env.hard_reset=false软重置更快,但在环境的稳定步进之后与硬重置并非完全一致,因此相机 observation 和 policy 结果可能会有轻微差异。在复现 benchmark 结果时请使用硬重置。
observation:
observation.state — 8 维本体感受特征(end-effector 位置、轴角朝向、gripper qpos)observation.images.image — 主相机视角(agentview_image),HWC uint8observation.images.image2 — 腕部相机视角(robot0_eye_in_hand_image),HWC uint8action:
Box(-1, 1, shape=(7,)) 中的连续控制 — 6D end-effector 增量 + 1D gripper为了可复现的 benchmark,请在全部四个标准套件(Spatial、Object、Goal、Long)中使用每个任务 10 个 episode。这样总共得到 400 个 episode,与已发表结果所用的协议一致。
LIBERO-plus 的 LeRobot 格式训练 dataset 可在以下位置获取:
lerobot-train \
--policy.type=smolvla \
--policy.repo_id=${HF_USER}/smolvla_libero_plus \
--policy.load_vlm_weights=true \
--dataset.repo_id=lerobot/libero_plus \
--env.type=libero_plus \
--env.task=libero_spatial \
--output_dir=./outputs/ \
--steps=100000 \
--batch_size=4 \
--eval.batch_size=1 \
--eval.n_episodes=1 \
--env_eval_freq=1000LIBERO-plus 是 LIBERO 的直接扩展:
LiberoEnv、LiberoProcessorStep)libero Python 包名安装(不同的 GitHub 仓库)要使用原始的 LIBERO benchmark,请参阅 LIBERO,并使用 --env.type=libero。