LeRobot documentation
LIBERO-plus
LIBERO-plus
LIBERO-plus — это бенчмарк устойчивости для моделей Vision-Language-Action (VLA), построенный на базе LIBERO. Он систематически проверяет политики на прочность, применяя семь независимых измерений возмущений к исходному набору задач LIBERO, что выявляет режимы отказа, которые стандартные бенчмарки упускают из виду.
- Статья: Детальный анализ устойчивости моделей «зрение-язык-действие»
- GitHub: sylvestf/LIBERO-plus
- Набор данных: lerobot/libero_plus

Размеры возмущений
LIBERO-plus создаёт ~10 000 вариантов задач, изменяя каждую исходную задачу LIBERO по следующим осям:
| Размерность | Что изменилось |
|---|---|
| Расположение объектов | Целевое положение, наличие мешающих объектов |
| Точки обзора камеры | Положение, ориентация и угол обзора камеры |
| Начальные состояния робота | Начальное положение манипулятора |
| Инструкции по языкам | Описание задачи, переписанное LLM (парафраз / синоним) |
| Световые условия | Интенсивность, направление, цвет, тень |
| Фоновые текстуры | Поверхность сцены и внешний вид объектов |
| Шум датчика | Фотометрические искажения и деградация изображений |
Доступные наборы задач
LIBERO-plus вносит изменения в 40 исходных задач из наборов Spatial, Object, Goal и Long. Каждая зарегистрированная задача в этих четырёх наборах является изменённым вариантом, а не одной из исходных задач. Вилка также сохраняет 90 неизменённых задач из LIBERO-90.
| Suite | Имя 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 в эту сумму не входит. Количество задач и их индексы зависят от установленной ревизии форка.
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-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 forkLIBERO-plus устанавливается из его GitHub-форка, а не через pyproject extra — форк поставляется как namespace-пакет, с которым pip не может работать, поэтому его необходимо клонировать и добавить в PYTHONPATH. Канонический способ установки описан в docker/Dockerfile.benchmark.libero_plus. Требуется MuJoCo, поэтому поддерживается только Linux.
Set the MuJoCo rendering backend before running evaluation:export MUJOCO_GL=egl # headless / HPC / cloud
Скачать ресурсы LIBERO-plus
LIBERO-plus распространяет расширенный набор ассетов отдельно. Скачайте assets.zip из датасета на Hugging Face и распакуйте его в каталог пакета 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/Оценка
Оценка по умолчанию (рекомендуется)
Оцените каждый зарегистрированный вариант на четырёх модифицированных наборах, используя один эпизод на вариант, как рекомендуется в руководстве по оценке upstream:
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 сохраняет поведение жёсткого сброса (hard-reset) LIBERO. При включённых фиксированных начальных состояниях можно перейти на мягкий сброс (soft reset), чтобы избежать повторной сборки модели симулятора и рендерера для каждого эпизода:
--env.init_states=true --env.hard_reset=falseМягкие сбросы выполняются быстрее, но после шагов стабилизации среды они не совпадают с жёсткими сбросами на уровне битов, поэтому наблюдения камеры и результаты политики могут незначительно отличаться. Используйте жёсткие сбросы при воспроизведении результатов бенчмарков.
Входы и выходы политики
Наблюдения:
observation.state— 8-мерные проприоцептивные признаки (позиция eef, ориентация в формате ось-угол, qpos захвата)observation.images.image— вид с основной камеры (agentview_image), HWC uint8observation.images.image2— вид с камеры на запястье (robot0_eye_in_hand_image), HWC uint8
Действия:
- Непрерывное управление в
Box(-1, 1, shape=(7,))— дельта 6D для конечного эффектора + захват 1D
Нагрузочное тестирование и воспроизводимость
Общее количество эпизодов оценки равно числу выбранных зарегистрированных задач во всех наборах × --eval.n_episodes. Например, все варианты Spatial с одним эпизодом каждый дают 2402 эпизода; выбор --env.task_ids='[0,1,2]' в Spatial и Object с одним эпизодом каждый даёт шесть эпизодов.
Расчёт на 400 эпизодов (40 исходных задач × 10 эпизодов) относится к базовой версии LIBERO, а не к полной оценке LIBERO-plus. Для LIBERO-plus начните с одного эпизода на каждый зарегистрированный вариант. Повторные эпизоды одного варианта не эквивалентны выборке различных вариантов исходной задачи.
Для пользовательского подмножества используйте классификацию задач в форке, чтобы определить категории возмущений и уровни сложности. Не предполагайте, что для каждой исходной задачи существует десять различных вариантов в каждой категории возмущений. При публикации результатов фиксируйте ревизию форка, имена выбранных наборов и индексы задач, количество эпизодов на вариант, seed и настройки сброса. Для сравнения с опубликованными результатами следуйте протоколу выборки и агрегации бенчмарка, а не считайте произвольное подмножество эквивалентным.
Обучение
Набор данных
Набор данных для обучения в формате 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 \
--env_eval_freq=1000Связь с LIBERO
LIBERO-plus — это модульное расширение LIBERO:
- Тот же интерфейс Python gym (
LiberoEnv,LiberoProcessorStep) - Одинаковые имена камер и формат наблюдений/действий
- Одинаковые имена наборов задач
- Устанавливается под тем же именем Python-пакета
libero(другой репозиторий на GitHub)
Чтобы использовать исходный бенчмарк LIBERO, см. LIBERO и используйте --env.type=libero.