LIBERO-plus
LIBERO-plus 是一个针对视觉-语言-动作(VLA)模型的鲁棒性基准测试,构建在 LIBERO 之上。它通过对原始 LIBERO 任务集应用七个独立的扰动维度来系统地压力测试策略,暴露标准基准测试遗漏的失败模式。
- 论文:In-depth Robustness Analysis of Vision-Language-Action Models
- GitHub:sylvestf/LIBERO-plus
- 数据集:lerobot/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_spatial、libero_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 uint8observation.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 接口(
LiberoEnv、LiberoProcessorStep) - 相同的相机名称和观测/动作格式
- 相同的任务套件名称
- 安装在相同的
liberoPython 包名称下(不同的 GitHub 仓库)
要使用原始 LIBERO 基准测试,请参阅 LIBERO 并使用 --env.type=libero。