跳转至

LIBERO-plus

LIBERO-plus 是一个针对视觉-语言-动作(VLA)模型的鲁棒性基准测试,构建在 LIBERO 之上。它通过对原始 LIBERO 任务集应用七个独立的扰动维度来系统地压力测试策略,暴露标准基准测试遗漏的失败模式。

LIBERO-plus 基准测试扰动维度概览

扰动维度

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

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

可用任务套件

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

套件 CLI 名称 任务数 最大步数 描述
LIBERO-Spatial libero_spatial 10 280 需要空间关系推理的任务
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 集合的长时域任务

Warning

安装 LIBERO-plus 会替换原版 LIBERO — 它会卸载 hf-libero,以便 import libero 解析到 LIBERO-plus 分支。您不能同时安装两者。要切换回原版 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  # 以便 `import libero` 解析到分支

LIBERO-plus 从其 GitHub 分支安装,而不是 pyproject extra — 该分支作为命名空间包发布,pip 无法处理,因此必须克隆并添加到 PYTHONPATH。参见 docker/Dockerfile.benchmark.libero_plus 获取规范安装。需要 MuJoCo,因此仅支持 Linux。

Tip

在运行评估之前设置 MuJoCo 渲染后端:

export MUJOCO_GL=egl   # 无头 / HPC / 云

下载 LIBERO-plus 资源

LIBERO-plus 单独发布其扩展资源包。从 Hugging Face 数据集下载 assets.zip 并将其解压到 LIBERO-plus 包目录:

# 安装包后,找到它的安装位置:
python -c "import libero; print(libero.__file__)"
# 然后将 assets.zip 解压到 <package_root>/libero/assets/

评估

默认评估(推荐)

在四个标准套件上评估(每个任务 10 个回合):

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 设置每个任务运行的回合数。

多套件评估

通过传递逗号分隔的列表一次性在多个套件上对策略进行基准测试:

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 检查点使用不同的动作参数化训练,因此请确保模式与您的策略匹配:

--env.control_mode=relative   # 或 "absolute"

策略输入和输出

观测:

  • observation.state — 8 维本体感觉特征(末端执行器位置、轴角方向、夹爪 qpos)
  • observation.images.image — 主相机视图(agentview_image),HWC uint8
  • observation.images.image2 — 腕部相机视图(robot0_eye_in_hand_image),HWC uint8

动作:

  • Box(-1, 1, shape=(7,)) 中的连续控制 — 6D 末端执行器增量 + 1D 夹爪

推荐评估回合数

对于可重现的基准测试,在所有四个标准套件(Spatial、Object、Goal、Long)上使用每个任务 10 个回合。这给出 400 个总回合,并与发布结果使用的协议匹配。

训练

数据集

LeRobot 格式的 LIBERO-plus 训练数据集可在以下位置获得:

示例训练命令

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

与 LIBERO 的关系

LIBERO-plus 是 LIBERO 的即插即用扩展:

  • 相同的 Python gym 接口(LiberoEnvLiberoProcessorStep
  • 相同的相机名称和观测/动作格式
  • 相同的任务套件名称
  • 安装在相同的 libero Python 包名称下(不同的 GitHub 仓库)

要使用原始 LIBERO 基准测试,请参阅 LIBERO 并使用 --env.type=libero