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 es un benchmark de robustez para modelos Vision-Language-Action (VLA) construido sobre LIBERO. Pone a prueba de forma sistemática las políticas aplicando siete dimensiones de perturbación independientes al conjunto de tareas original de LIBERO, exponiendo modos de fallo que los benchmarks estándar pasan por alto.

An overview of the LIBERO-plus benchmark perturbation dimensions

Dimensiones de perturbación

LIBERO-plus crea ~10 000 variantes de tareas perturbando cada tarea original de LIBERO a lo largo de estos ejes:

DimensiónQué cambia
Distribución de objetosPosición objetivo, presencia de objetos confusos
Puntos de vista de la cámaraPosición, orientación y campo de visión de la cámara
Estados iniciales del robotPostura inicial del manipulador
Instrucciones de idiomaDescripción de la tarea reescrita por un LLM (paráfrasis / sinónimo)
Condiciones de luzIntensidad, dirección, color, sombra
Texturas de fondoSuperficie de la escena y apariencia de los objetos
Ruido del sensorDistorsiones fotométricas y degradación de imagen

Suites de tareas disponibles

LIBERO-plus perturba las 40 tareas originales de las suites Spatial, Object, Goal y Long. Cada tarea registrada en estas cuatro suites es una variante perturbada, en lugar de una de las tareas originales. El fork también conserva las 90 tareas no perturbadas de LIBERO-90.

SuiteNombre de la CLITareas originalesTareas registradasPasos máximosDescripción
LIBERO-Spatiallibero_spatial102,402280Tareas que requieren razonamiento sobre relaciones espaciales
LIBERO-Objectlibero_object102,518280Tareas centradas en la manipulación de diferentes objetos
LIBERO-Goallibero_goal102,591300Tareas condicionadas por objetivos con metas cambiantes
LIBERO-90libero_909090400Tareas de LIBERO de horizonte corto no perturbadas
LIBERO-Longlibero_10102,519520Tareas de horizonte largo de la colección LIBERO-100

Estas cifras provienen del registro de tareas de la fuente. Los cuatro conjuntos perturbados contienen un total de 10.030 variantes de tareas; LIBERO-90 no está incluido en ese total. Las cifras y los índices de tareas dependen de la revisión del fork instalado.

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]"`.

Instalación

Dependencias del sistema (solo Linux)

sudo apt install libexpat1 libfontconfig1-dev libmagickwand-dev

Paquete de 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 se instala desde su bifurcación de GitHub en lugar de desde un extra de pyproject: la bifurcación se distribuye como un paquete de espacio de nombres que pip no puede gestionar, por lo que debe clonarse y añadirse a PYTHONPATH. Consulte docker/Dockerfile.benchmark.libero_plus para la instalación canónica. MuJoCo es obligatorio, por lo que solo se admite Linux.

Set the MuJoCo rendering backend before running evaluation:
export MUJOCO_GL=egl   # headless / HPC / cloud

Descargar los recursos de LIBERO-plus

LIBERO-plus distribuye su paquete de recursos extendido por separado. Descargue assets.zip desde el conjunto de datos de Hugging Face y extráigalo en el directorio del paquete 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/

Evaluación

Evaluación predeterminada (recomendada)

Evalúe cada variante registrada en los cuatro conjuntos perturbados, utilizando un episodio por variante, tal como se recomienda en la guía de evaluación de la fuente:

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

Esto ejecuta 10.030 episodios para el registro anterior. Con --eval.n_episodes=10, el mismo comando ejecuta 100.300 episodios, no 400.

Prueba de humo

Antes de lanzar una evaluación completa, compruebe su configuración con una variante registrada y un episodio:

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

Esta es una comprobación de configuración, no una evaluación representativa de robustez.

Evaluación de un solo conjunto

Evaluar en un solo conjunto de 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 selecciona la suite (libero_spatial, libero_object, etc.).
  • --env.task_ids restringe la ejecución a los índices de tareas registrados ([0], [1,2,3], etc.), que identifican las variantes en las cuatro suites perturbadas. Omita este parámetro para ejecutar todas las tareas registradas. Al evaluar varias suites, la misma lista de índices se aplica de forma independiente a cada suite.
  • --eval.batch_size controla cuántos entornos se ejecutan en paralelo.
  • --eval.n_episodes define cuántos episodios se ejecutan por cada tarea registrada. Aumentar este valor repite la evaluación de las variantes seleccionadas; no selecciona variantes distintas adicionales.

Evaluación multi-suite

Ejecute una política en varias suites a la vez pasando una lista separada por comas:

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

Modo de control

LIBERO-plus admite dos modos de control: relative (predeterminado) y absolute. Los distintos puntos de control de VLA se entrenan con diferentes parametrizaciones de acción, por lo que asegúrese de que el modo coincida con su política:

--env.control_mode=relative   # or "absolute"

Restablecer el rendimiento

Por defecto, LeRobot conserva el comportamiento de reinicio duro de LIBERO. Con los estados iniciales fijos habilitados, puedes optar por reinicios suaves para omitir la reconstrucción del modelo del simulador y del renderizador en cada episodio:

--env.init_states=true --env.hard_reset=false

Los reinicios suaves son más rápidos, pero no son idénticos a nivel de bit a los reinicios duros después de los pasos de estabilización del entorno, por lo que las observaciones de la cámara y los resultados de la política pueden diferir ligeramente. Utilice reinicios duros al reproducir resultados de benchmarks.

Entradas y salidas de la política

Observaciones:

  • observation.state — características propioceptivas de 8 dimensiones (posición del eef, orientación axis-angle, qpos del agarre)
  • observation.images.image — vista de la cámara principal (agentview_image), HWC uint8
  • observation.images.image2 — vista de la cámara de la muñeca (robot0_eye_in_hand_image), HWC uint8

Acciones:

  • Control continuo en Box(-1, 1, shape=(7,)) — delta de efector final 6D + pinza 1D

Carga de trabajo de evaluación y reproducibilidad

El número total de episodios de evaluación es el número de tareas registradas seleccionadas en todos los conjuntos × --eval.n_episodes. Por ejemplo, todas las variantes de Spatial con un episodio cada una dan 2.402 episodios; seleccionar --env.task_ids='[0,1,2]' en Spatial y Object con un episodio cada una da seis episodios.

El cálculo de 400 episodios (40 tareas originales × 10 episodios) se aplica a LIBERO vanilla, no a una evaluación completa de LIBERO-plus. Para LIBERO-plus, comience con un episodio por cada variante registrada. Los episodios repetidos de una variante no son equivalentes a muestrear variantes distintas de una tarea original.

Para un subconjunto personalizado, utiliza la clasificación de tareas del fork para identificar las categorías de perturbación y los niveles de dificultad. No asumas que cada tarea original tiene diez variantes distintas en cada categoría de perturbación. Registra la revisión del fork, los nombres de las suites seleccionadas y los índices de las tareas, los episodios por variante, la semilla y la configuración de reinicio al informar los resultados. Para comparar con resultados publicados, sigue el protocolo de muestreo y agregación del benchmark en lugar de tratar un subconjunto arbitrario como equivalente.

Entrenamiento

Dataset

Se encuentra disponible un conjunto de datos de entrenamiento en formato LeRobot para LIBERO-plus en:

Ejemplo de comando de entrenamiento

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

Relación con LIBERO

LIBERO-plus es una extensión de LIBERO que se puede usar directamente:

  • Misma interfaz de gimnasio de Python (LiberoEnv, LiberoProcessorStep)
  • Mismos nombres de cámaras y formato de observación/acción
  • Nombres de suites de tareas idénticos
  • Se instala bajo el mismo nombre de paquete de Python libero (repositorio de GitHub diferente)

Para usar el benchmark original de LIBERO, consulte LIBERO y use --env.type=libero.

Update on GitHub