LeRobot documentation
LIBERO-plus
LIBERO-plus
The commands below run the simulator locally. To keep its dependencies away from your policy's, serve it instead with `lerobot-env-server --config_path=docker/sim/configs/libero_plus.yaml --sim.task=--docker=true`, where ` ` is the command's `--env.task`, and add `--env.server.endpoint=tcp/127.0.0.1:7448` to the command. A server runs the task it was started with (see [Simulation: local or served](./simulation)).
LIBERO-plus 是一个构建在 LIBERO 之上的、面向视觉-语言-动作(VLA)模型的鲁棒性基准。它通过对原始 LIBERO 任务集施加七个独立的扰动维度,对策略进行系统性的压力测试,从而揭示标准基准所遗漏的失效模式。
- 论文:视觉-语言-动作模型的深入鲁棒性分析
- GitHub: sylvestf/LIBERO-plus
- 数据集: lerobot/libero_plus

扰动维度
LIBERO-plus 通过沿以下维度对每个原始 LIBERO 任务进行扰动,生成了约 10 000 个任务变体:
| 维度 | 有哪些更改 |
|---|---|
| 对象布局 | 目标位置、是否存在干扰物体 |
| 相机视角 | 相机位置、朝向、视场 |
| 机器人初始状态 | 操作器初始位姿 |
| 语言说明 | 由 LLM 重写的任务描述(释义 / 同义词) |
| 光照条件 | 强度、方向、颜色、阴影 |
| 背景纹理 | 场景表面和物体外观 |
| 传感器噪声 | 光度畸变与图像退化 |
可用的任务套件
LIBERO-plus 对 Spatial、Object、Goal 和 Long 套件中的 40 个原始任务进行了扰动。这四个套件中注册的每个任务都是扰动后的变体,而非原始任务之一。该分支还保留了 LIBERO-90 中的 90 个未扰动任务。
| 套件 | CLI 名称 | 原始任务 | 已注册的任务 | 最大步数 | 描述 |
|---|---|---|---|---|---|
| LIBERO-Spatial | libero_spatial | 10 | 2,402 | 280 | 需要推理空间关系的任务 |
| LIBERO-Object | libero_object | 10 | 2,518 | 280 | 以操作不同对象为中心的任务 |
| LIBERO-Goal | libero_goal | 10 | 2,591 | 300 | 目标条件任务,目标会发生变化 |
| LIBERO-90 | libero_90 | 90 | 90 | 400 | 未受扰动的短期 LIBERO 任务 |
| LIBERO-Long | libero_10 | 10 | 2,519 | 520 | 来自 LIBERO-100 数据集的长时程任务 |
这些计数来自上游的 任务注册表。四个扰动套件总共包含 10,030 个任务变体;LIBERO-90 未计入该总数。计数和任务索引取决于已安装的 fork 版本。
Installing LIBERO-plus **replaces** vanilla LIBERO — it uninstalls `hf-libero` so that `import libero` resolves to the LIBERO-plus fork. You cannot have both installed at the same time. To switch back to vanilla LIBERO, uninstall the fork and reinstall with `pip install -e ".[libero]"`.
安装
系统依赖项(仅限 Linux)
sudo apt install libexpat1 libfontconfig1-dev libmagickwand-devPython 包
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 forkLIBERO-plus 从其 GitHub fork 安装,而非通过 pyproject extra 安装——该 fork 以命名空间包的形式发布,pip 无法处理,因此必须将其克隆并添加到 PYTHONPATH 中。标准安装方式参见 docker/Dockerfile.sim 中的 libero_plus_native 阶段。由于需要 MuJoCo,因此仅支持 Linux。
Set the MuJoCo rendering backend before running evaluation:export MUJOCO_GL=egl # headless / HPC / cloud
下载 LIBERO-plus 资源
LIBERO-plus 的扩展资源包是单独发布的。请从 Hugging Face 数据集 下载 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/评估
默认本地评估
按照上游评估指南的建议,每个变体使用一个回合,在四个扰动测试套件上评估所有已注册的变体:
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=1 \
--env.max_parallel_tasks=1这将为上述注册表运行 10,030 个回合。使用 --eval.n_episodes=10 时,同一命令将运行 100,300 个回合,而不是 400 个。
冒烟测试
在启动完整评估之前,请使用一个已注册的变体和一个回合来检查您的配置:
lerobot-eval \
--policy.path="your-policy-id" \
--env.type=libero_plus \
--env.task=libero_spatial \
--env.task_ids='[0]' \
--eval.batch_size=1 \
--eval.n_episodes=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=1--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=1控制模式
LIBERO-plus 支持两种控制模式——relative(默认)和 absolute。不同的 VLA 检查点采用不同的动作参数化方式训练,因此请确保所选模式与您的策略相匹配:
--env.control_mode=relative # or "absolute"重置性能
默认情况下,LeRobot 会保留 LIBERO 的硬重置行为。在启用固定初始状态后,您可以选择使用软重置,以跳过在每个 episode 中重建模拟器模型和渲染器:
--env.init_states=true --env.hard_reset=false软重置速度更快,但在环境稳定步骤之后,其结果与硬重置并非逐位一致,因此相机观测值和策略结果可能存在细微差异。在复现基准测试结果时,请使用硬重置。
策略输入和输出
观察:
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,))中的连续控制 — 6 维末端执行器增量 + 1 维夹爪
评估工作负载与可复现性
评估回合的总数为 所有套件中选中的已注册任务数量 × --eval.n_episodes。例如,Spatial 的所有变体各运行一个回合,共计 2,402 个回合;在 Spatial 和 Object 中分别选择 --env.task_ids='[0,1,2]' 且各运行一个回合,则共计六个回合。
400 集的计算(40 个原始任务 × 10 集)适用于原版 LIBERO,而非完整的 LIBERO-plus 评估。对于 LIBERO-plus,请从每个已注册的变体各运行一集开始。对同一变体重复运行多集,并不等同于对原始任务的不同变体进行采样。
对于自定义子集,请使用该 fork 的 task classification 来识别扰动类别和难度级别。不要假设每个原始任务在每个扰动类别中都有十个不同的变体。在报告结果时,请记录 fork 版本、所选套件名称和任务索引、每个变体的 episode 数、随机种子以及重置设置。为了与已发表的结果进行比较,请遵循该基准的采样和聚合协议,而不是将任意子集视为等效。
训练
数据集
LIBERO-plus 的 LeRobot 格式训练数据集可在以下位置获取:
示例训练命令
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 接口(
LiberoEnv)和标准观测 - 相同的相机名称和观测/操作格式
- 相同的任务套件名称
- 安装在相同的
liberoPython 包名称下(不同的 GitHub 仓库)
要使用原始的 LIBERO 基准,请参阅 LIBERO 并使用 --env.type=libero。