LeRobot documentation
LIBERO-plus
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.
- Artículo: Análisis en profundidad de la robustez de los modelos de visión-lenguaje-acción
- GitHub: sylvestf/LIBERO-plus
- Conjunto de datos: lerobot/libero_plus

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ón | Qué cambia |
|---|---|
| Distribución de objetos | Posición objetivo, presencia de objetos confusos |
| Puntos de vista de la cámara | Posición, orientación y campo de visión de la cámara |
| Estados iniciales del robot | Postura inicial del manipulador |
| Instrucciones de idioma | Descripción de la tarea reescrita por un LLM (paráfrasis / sinónimo) |
| Condiciones de luz | Intensidad, dirección, color, sombra |
| Texturas de fondo | Superficie de la escena y apariencia de los objetos |
| Ruido del sensor | Distorsiones 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.
| Suite | Nombre de la CLI | Tareas originales | Tareas registradas | Pasos máximos | Descripción |
|---|---|---|---|---|---|
| LIBERO-Spatial | libero_spatial | 10 | 2,402 | 280 | Tareas que requieren razonamiento sobre relaciones espaciales |
| LIBERO-Object | libero_object | 10 | 2,518 | 280 | Tareas centradas en la manipulación de diferentes objetos |
| LIBERO-Goal | libero_goal | 10 | 2,591 | 300 | Tareas condicionadas por objetivos con metas cambiantes |
| LIBERO-90 | libero_90 | 90 | 90 | 400 | Tareas de LIBERO de horizonte corto no perturbadas |
| LIBERO-Long | libero_10 | 10 | 2,519 | 520 | Tareas 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-devPaquete 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 forkLIBERO-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=1Esto 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=1Esta 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.taskselecciona la suite (libero_spatial,libero_object, etc.).--env.task_idsrestringe 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_sizecontrola cuántos entornos se ejecutan en paralelo.--eval.n_episodesdefine 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=1Modo 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=falseLos 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 uint8observation.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=1000Relació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.