LeRobot documentation
EO-1
EO-1
EO-1 es una política Vision-Language-Action para el control de robots. La implementación de LeRobot integra EO-1 con la interfaz estándar de entrenamiento, evaluación y procesador de LeRobot.
Resumen del modelo
EO-1 utiliza un backbone Qwen2.5-VL para la comprensión de visión-lenguaje y añade una cabeza de flujo continuo para el control de robots. La política formatea cada muestra de control de robot como una conversación multimodal: las imágenes de la cámara se pasan a Qwen2.5-VL, el estado del robot se representa con tokens de estado de EO-1 y el trozo de acción futuro se representa con tokens de acción de EO-1.
Durante el entrenamiento, EO-1 aprende a desruidar trozos de acciones continuas en las posiciones de tokens de acción. Durante la inferencia, muestrea un trozo de acciones, devuelve acciones continuas y ejecuta n_action_steps del trozo antes de volver a muestrear.
Lo que abarca la integración de LeRobot
- Configuración estándar
policy.type=eo1a través de LeRobot - Preprocesamiento de imágenes y texto de Qwen2.5-VL a través de procesadores de política
- Predicción de acciones mediante flujo continuo
- Guardado y carga de puntos de control a través de las APIs de políticas de LeRobot
- Entrenamiento con
lerobot-trainy evaluación conlerobot-eval
El proyecto EO-1 más amplio también incluye el preentrenamiento intercalado de visión-texto-acción y flujos de trabajo de razonamiento multimodal. Esta página se centra en la ruta de la política de control de robots de LeRobot.
Requisitos de instalación
Instala LeRobot siguiendo la Guía de instalación.
Instale las dependencias de EO-1 ejecutando:
pip install -e ".[eo1]"Si desea entrenar o evaluar en LIBERO, instale también las dependencias de LIBERO:
pip install -e ".[eo1,libero]"
EO-1 puede utilizar el backend estándar de atención de producto escalar de PyTorch a través de policy.attn_implementation=sdpa. Si su entorno tiene una instalación compatible de flash_attn, puede solicitar policy.attn_implementation=flash_attention_2.
Requisitos de datos
EO-1 espera un conjunto de datos de LeRobot con:
- Al menos una observación visual, por ejemplo
observation.images.image observation.stateaction- Una instrucción de tarea de lenguaje a través del campo
taskdel conjunto de datos
Si tu conjunto de datos usa nombres de observación diferentes, usa rename_map para alinearlos con los nombres esperados por tu configuración de entrenamiento o evaluación.
Uso
Para usar EO-1 en una configuración de LeRobot, especifique el tipo de política como:
policy.type=eo1Use el punto de control de la versión convertida para comenzar desde el preentrenamiento intercalado de visión, texto y acción de EO-1:
--policy.path=lerobot/eo1-base
lerobot/eo1-base es una conversión nativa de LeRobot de IPEC-COMMUNITY/EO-1-3B.
Conserva los pesos de visión-lenguaje de Qwen publicados y la cabeza de acciones de flow-matching entrenada. Su tamaño de chunk de acciones es 16, coincidiendo con el checkpoint upstream. Para inicializar solo desde el backbone original de Qwen, omita policy.path y establezca policy.vlm_base=Qwen/Qwen2.5-VL-3B-Instruct.
Cargue otro punto de control de EO-1 en formato LeRobot afinado con:
policy.path=your-org/your-eo1-checkpoint
Generación de texto y control interactivo
EO-1 expone el backbone de Qwen a través del contrato de texto de política compartido. Runtime
agrega query_kind y query_text y luego ejecuta el procesador de entrada normal de EO-1:
request = {
**observation,
"query_kind": "vqa",
"query_text": "Which object is closest to the gripper?",
}
processed_batch = preprocessor(request)
answer = policy.generate_text(processed_batch)vqa conserva la pregunta del llamador. next_subtask aplica la receta almacenada en la configuración de la política EO-1. EO-1 hereda generate_text(processed_batch) y sobrescribe supports_text_generation y generate_text; no se carga un VLM separado.
Con el tiempo de ejecución de lenguaje interactivo, EO-1 puede generar una subtarea y reconstruir su prompt de acción a partir de esa subtarea actual:
# Use the robot, port and cameras your checkpoint was trained with
lerobot-rollout \
--policy.path=your-org/your-eo1-checkpoint \
--policy.device=cuda \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \
--robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}}" \
--task="clear the table" \
--interactive=trueDespués de /start, usa /vqa <question>, /autosteer <goal> o /subtask <text>.
Entrenamiento
Ejemplo de comando de entrenamiento
lerobot-train \
--dataset.repo_id=your_org/your_dataset \
--policy.path=lerobot/eo1-base \
--policy.dtype=bfloat16 \
--policy.attn_implementation=sdpa \
--policy.gradient_checkpointing=false \
--output_dir=./outputs/eo1_training \
--job_name=eo1_training \
--steps=300000 \
--batch_size=16 \
--policy.device=cudaEntrenar con anotaciones de lenguaje
EO1Config incluye una receta para entrenar a partir de las columnas de lenguaje opcionales de LeRobot. La receta conjunta integrada supervisa una respuesta seleccionada del asistente y su trozo de acción continuo en la misma secuencia:
lerobot-train \ --dataset.repo_id=your_org/your_language_annotated_dataset \ --policy.type=eo1 \ --policy.text_loss_weight=0.01 \ --policy.flow_loss_weight=1.0 \ --policy.device=cuda \ --batch_size=1 \ --steps=20000
Las respuestas dirigidas del asistente reciben la entropía cruzada del siguiente token, mientras que los flujos de la receta low_level reciben supervisión de acciones de flujo. Una fila puede recibir cualquiera de estos objetivos o ambos. Los prompts del usuario, las imágenes, los tokens de estado, los tokens de acción y el relleno se excluyen de la pérdida de texto. Establezca policy.recipe=null para deshabilitar el renderizado de la receta y usar la ruta de entrenamiento original solo con acciones.
Consulte Columnas de idioma y recetas para el esquema de anotación y la estructura de la receta. recipe_path puede apuntar a una superposición externa YAML explícita; LeRobot no proporciona archivos de receta predeterminados compartidos. El prompt de sistema predeterminado forma parte de la receta de EO1 y puede reemplazarse por un turno de sistema personalizado. Las entradas renderizadas sin un turno de sistema, incluidos los prompts de VQA, permanecen sin uno. La ruta solo de acción sin mensajes renderizados mantiene el prompt de sistema predeterminado. EO1PrepareModelMessagesStep añade imágenes y tokens de estado/acción a los mensajes renderizados antes del formato y la tokenización de Qwen.
Parámetros clave de entrenamiento
| Parámetro | Predeterminado | Descripción |
|---|---|---|
policy.path | lerobot/eo1-base | Se han publicado los pesos de EO-1 convertidos al formato nativo de LeRobot |
policy.vlm_base | Qwen/Qwen2.5-VL-3B-Instruct | Procesador/backbone de Qwen utilizado solo cuando se entrena sin policy.path |
policy.dtype | bfloat16 | Solicitud de dtype del backbone: un nombre de dtype de torch, p. ej. bfloat16, float32 |
policy.attn_implementation | None | Backend de atención de Qwen opcional, como sdpa |
policy.gradient_checkpointing | false | Reduce el uso de memoria durante el entrenamiento |
policy.chunk_size | 16 | Número de acciones futuras predichas por bloque |
policy.n_action_steps | 16 | Número de acciones consumidas de un fragmento muestreado |
policy.num_denoise_steps | 10 | Número de pasos de desruido de flow-matching utilizados durante la muestreo |
policy.max_state_dim | 32 | Dimensión de relleno del estado |
policy.max_action_dim | 32 | Dimensión de relleno de la acción |
policy.force_fp32_autocast | true | Mantiene la cabeza de flujo en fp32 incluso cuando el backbone utiliza precisión mixta |
policy.supervise_padding_action_dims | true | Controla si las dimensiones de acción rellenas se supervisan |
policy.supervise_padding_actions | true | Controla si las filas de acciones futuras rellenas se supervisan |
policy.recipe_path | None | Permite la supervisión de texto basada en recetas y la supervisión de acciones por muestra |
policy.text_loss_weight | 0.01 | Peso para la entropía cruzada de tokens de asistente supervisados |
policy.flow_loss_weight | 1.0 | Peso para la pérdida de flujo-acción continua |
policy.tokenizer_max_length | 1000 | Longitud máxima de la secuencia conjunta de visión-lenguaje-acción |
Evaluación
EO-1 se puede evaluar mediante lerobot-eval una vez que se dispone de un punto de control en formato LeRobot:
lerobot-eval \ --policy.path=your-org/your-eo1-checkpoint \ --env.type=libero \ --env.task=libero_object \ --eval.batch_size=1 \ --eval.n_episodes=20
Para conjuntos de datos o entornos cuyos nombres de cámara difieren de la configuración del punto de control, pase un rename_map:
lerobot-eval \
--policy.path=your-org/your-eo1-checkpoint \
--env.type=libero \
--env.task=libero_object \
--rename_map='{"observation.images.image2":"observation.images.wrist_image"}'Notas de configuración
Procesamiento de imágenes
EO-1 utiliza el procesador Qwen2.5-VL. Las configuraciones policy.image_min_pixels y policy.image_max_pixels controlan los límites de redimensionamiento de la imagen antes de que los tokens visuales se pasen al backbone.
Dimensiones del estado y de la acción
La política rellena los vectores de estado y acción hasta policy.max_state_dim y policy.max_action_dim antes de la cabeza de flujo EO-1. Las predicciones se recortan de nuevo a la dimensión de acción original antes de ser devueltas por la política.
Backend de atención
Use policy.attn_implementation=sdpa para una configuración portable. Use flash_attention_2 solo cuando flash_attn esté instalado y sea compatible con su entorno.
Referencias
Cita
@article{eo1,
title={EO-1: Interleaved Vision-Text-Action Pretraining for General Robot Control},
author={Delin Qu and Haoming Song and Qizhi Chen and Zhaoqing Chen and Xianqiang Gao and Xinyi Ye and Qi Lv and Modi Shi and Guanghui Ren and Cheng Ruan and Maoqing Yao and Haoran Yang and Jiacheng Bao and Bin Zhao and Dong Wang},
journal={arXiv preprint},
year={2025},
url={https://arxiv.org/abs/2508.21112}
}Licencia
Esta integración de LeRobot sigue la Apache 2.0 License utilizada por LeRobot. Consulte las páginas del modelo y el conjunto de datos EO-1 de origen para conocer las licencias de los puntos de control y los datos de EO-1 publicados.
Update on GitHub