LeRobot documentation

LIBERO-plus

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.6.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

LIBERO-plus

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. Канонический способ установки описан в 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 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, LiberoProcessorStep)
  • Одинаковые имена камер и формат наблюдений/действий
  • Одинаковые имена наборов задач
  • Устанавливается под тем же именем Python-пакета libero (другой репозиторий на GitHub)

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

Update on GitHub