LIBERO-plus

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

An overview of the LIBERO-plus benchmark perturbation dimensions

扰动维度

LIBERO-plus 通过沿以下轴扰动每个原始 LIBERO 任务,创建了约 10 000 个任务变体:

维度变化内容
物体布局目标位置、干扰物体的存在与否
相机视角相机位置、朝向、视场角
机器人初始 state机械臂起始位姿
语言指令LLM 改写后的任务描述(改写 / 同义词)
光照条件强度、方向、颜色、阴影
背景纹理场景表面和物体外观
传感器噪声光度失真和图像退化

可用的任务套件

LIBERO-plus 涵盖与 LIBERO 相同的五个套件:

套件CLI 名称任务数最大步数描述
LIBERO-Spatiallibero_spatial10280需要 inference 空间关系的任务
LIBERO-Objectlibero_object10280专注于操作不同物体的任务
LIBERO-Goallibero_goal10300目标条件任务,目标会发生变化
LIBERO-90libero_9090400来自 LIBERO-100 集合的短时域任务
LIBERO-Longlibero_1010520来自 LIBERO-100 集合的长时域任务
安装 LIBERO-plus 会**替换** vanilla LIBERO——它会卸载 `hf-libero`, 从而使 `import libero` 解析到 LIBERO-plus 分支。你不能同时安装这两个版本。 要切换回 vanilla LIBERO,请卸载该分支并使用 `pip install -e ".[libero]"` 重新安装。

安装

系统依赖(仅限 Linux)

sudo apt install libexpat1 libfontconfig1-dev libmagickwand-dev

Python 包

pip 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 fork

LIBERO-plus 从其 GitHub 分支安装,而不是作为 pyproject 额外扩展——该分支以 pip 无法处理的命名空间包形式发布,因此必须克隆它并将其添加到 PYTHONPATH。规范的安装方式请参阅 docker/Dockerfile.benchmark.libero_plus。需要 MuJoCo,因此只支持 Linux。

在运行评估之前设置 MuJoCo 渲染后端:
export MUJOCO_GL=egl   # headless / HPC / cloud

下载 LIBERO-plus 资源

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_spatiallibero_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=10

控制模式

LIBERO-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 结果时请使用硬重置。

policy 输入和输出

observation:

  • observation.state — 8 维本体感受特征(end-effector 位置、轴角朝向、gripper qpos)
  • observation.images.image — 主相机视角(agentview_image),HWC uint8
  • observation.images.image2 — 腕部相机视角(robot0_eye_in_hand_image),HWC uint8

action:

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

推荐的评估 episode 数

为了可复现的 benchmark,请在全部四个标准套件(Spatial、Object、Goal、Long)中使用每个任务 10 个 episode。这样总共得到 400 个 episode,与已发表结果所用的协议一致。

训练

dataset

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=1000

与 LIBERO 的关系

LIBERO-plus 是 LIBERO 的直接扩展:

  • 相同的 Python gym 接口(LiberoEnvLiberoProcessorStep
  • 相同的相机名称和 observation/action 格式
  • 相同的任务套件名称
  • 以相同的 libero Python 包名安装(不同的 GitHub 仓库)

要使用原始的 LIBERO benchmark,请参阅 LIBERO,并使用 --env.type=libero

在 GitHub 上更新