LeRobot documentation

LIBERO-plus

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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 — это бенчмарк устойчивости для моделей Vision-Language-Action (VLA), построенный на базе LIBERO. Он систематически проверяет политики на прочность, применяя семь независимых измерений возмущений к исходному набору задач LIBERO, что выявляет режимы отказа, которые стандартные бенчмарки упускают из виду.

An overview of the LIBERO-plus benchmark perturbation dimensions

Размеры возмущений

LIBERO-plus создаёт ~10 000 вариантов задач, изменяя каждую исходную задачу LIBERO по следующим осям:

РазмерностьЧто изменилось
Расположение объектовЦелевое положение, наличие мешающих объектов
Точки обзора камерыПоложение, ориентация и угол обзора камеры
Начальные состояния роботаНачальное положение манипулятора
Инструкции по языкамОписание задачи, переписанное LLM (парафраз / синоним)
Световые условияИнтенсивность, направление, цвет, тень
Фоновые текстурыПоверхность сцены и внешний вид объектов
Шум датчикаФотометрические искажения и деградация изображений

Доступные наборы задач

LIBERO-plus вносит изменения в 40 исходных задач из наборов Spatial, Object, Goal и Long. Каждая зарегистрированная задача в этих четырёх наборах является изменённым вариантом, а не одной из исходных задач. Вилка также сохраняет 90 неизменённых задач из LIBERO-90.

SuiteИмя CLIИсходные задачиЗарегистрированные задачиМаксимальное количество шаговОписание
LIBERO-Spatiallibero_spatial102,402280Задачи, требующие рассуждений о пространственных отношениях
LIBERO-Objectlibero_object102,518280Задачи, связанные с манипулированием различными объектами
LIBERO-Goallibero_goal102,591300Задачи с целевым условием и изменяющимися целями
LIBERO-90libero_909090400Неизменённые задачи LIBERO с коротким горизонтом
LIBERO-Longlibero_10102,519520Долгосрочные задачи из коллекции 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 fork

LIBERO-plus устанавливается из его GitHub-форка, а не через pyproject extra — форк поставляется как namespace-пакет, с которым pip не может работать, поэтому его необходимо клонировать и добавить в PYTHONPATH. См. этап libero_plus_native в docker/Dockerfile.sim для канонической установки. Требуется 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 uint8
  • observation.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) и канонические наблюдения
  • Одинаковые имена камер и формат наблюдений/действий
  • Одинаковые имена наборов задач
  • Устанавливается под тем же именем Python-пакета libero (другой репозиторий на GitHub)

Чтобы использовать исходный бенчмарк LIBERO, см. LIBERO и используйте --env.type=libero.

Update on GitHub