LeRobot documentation

EO-1

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

EO-1

EO-1 est une politique Vision-Language-Action pour le contrôle de robots. L'implémentation LeRobot intègre EO-1 avec l'interface standard de formation, d'évaluation et de processeur de LeRobot.

Aperçu du modèle

EO-1 utilise un backbone Qwen2.5-VL pour la compréhension vision-langage et ajoute une tête d’action continue par flow-matching pour le contrôle robotique. La politique formate chaque échantillon de contrôle robotique comme une conversation multimodale : les images de la caméra sont transmises à Qwen2.5-VL, l’état du robot est représenté par des jetons d’état EO-1, et le bloc d’actions futur est représenté par des jetons d’action EO-1.

An overview of EO-1

Lors de l’entraînement, EO-1 apprend à débruitiser des segments d’actions continues aux positions des jetons d’action. Lors de l’inférence, il échantillonne un segment d’actions, renvoie des actions continues et exécute n_action_steps du segment avant de rééchantillonner.

Ce que couvre l'intégration LeRobot

  • Configuration standard policy.type=eo1 via LeRobot
  • Prétraitement des images et du texte de Qwen2.5-VL via les processeurs de politique
  • Prédiction d'action par correspondance de flux continue
  • Sauvegarde/chargement de points de contrôle via les API de politique LeRobot
  • Entraînement avec lerobot-train et évaluation avec lerobot-eval

Le projet plus large EO-1 inclut également le pré-entraînement intercalé vision-texte-action et les flux de travail de raisonnement multimodal. Cette page se concentre sur le chemin de la politique de contrôle robotique LeRobot.

Prérequis d'installation

  1. Installez LeRobot en suivant le Guide d'installation.

  2. Installez les dépendances d'EO-1 en exécutant :

    pip install -e ".[eo1]"
  3. Si vous souhaitez entraîner ou évaluer sur LIBERO, installez également les dépendances de LIBERO :

    pip install -e ".[eo1,libero]"

EO-1 peut utiliser le backend standard d’attention à point produit mis à l’échelle de PyTorch via policy.attn_implementation=sdpa. Si votre environnement dispose d’une installation compatible de flash_attn, vous pouvez demander policy.attn_implementation=flash_attention_2.

Exigences en matière de données

EO-1 s'attend à un jeu de données LeRobot avec :

  • Au moins une observation visuelle, par exemple observation.images.image
  • observation.state
  • action
  • Une instruction de tâche linguistique via le champ task du jeu de données

Si votre jeu de données utilise des noms d’observations différents, utilisez rename_map pour les aligner sur les noms attendus par votre configuration d’entraînement ou d’évaluation.

Utilisation

Pour utiliser EO-1 dans une configuration LeRobot, spécifiez le type de politique comme suit :

policy.type=eo1

Utilisez le point de contrôle de la version convertie pour démarrer à partir du pré-entraînement vision-texte-action entrelacé d’EO-1 :

--policy.path=lerobot/eo1-base

lerobot/eo1-base est une conversion native LeRobot de IPEC-COMMUNITY/EO-1-3B. Il conserve les poids vision-langage Qwen publiés ainsi que la tête d’action flow-matching entraînée. Sa taille de chunk d’action est de 16, ce qui correspond au checkpoint amont. Pour initialiser uniquement à partir du backbone Qwen d’origine, omettez policy.path et définissez policy.vlm_base=Qwen/Qwen2.5-VL-3B-Instruct.

Charger un autre point de contrôle EO-1 au format LeRobot, fine-tuné, avec :

policy.path=your-org/your-eo1-checkpoint

Génération de texte et contrôle interactif

EO-1 expose le backbone Qwen via le contrat de texte de politique partagé. Le runtime ajoute query_kind et query_text, puis exécute le processeur d’entrée standard d’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 conserve la question de l’appelant. next_subtask applique la recette stockée dans la configuration de politique EO-1. EO-1 hérite de generate_text(processed_batch) et redéfinit supports_text_generation et generate_text ; aucun VLM distinct n’est chargé.

Avec le runtime de langage interactif, EO-1 peut générer une sous-tâche et reconstruire son prompt d’action à partir de cette sous-tâche actuelle :

# 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=true

Après /start, utilisez /vqa <question>, /autosteer <goal> ou /subtask <text>.

Entraînement

Exemple de commande d'entraînement

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=cuda

Entraîner avec des annotations linguistiques

EO1Config inclut une recette pour entraîner à partir des colonnes de langage facultatives de LeRobot. La recette conjointe intégrée supervise une réponse d’assistant sélectionnée et son bloc d’actions continu dans la même séquence :

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

Les tours de l’assistant ciblées reçoivent une entropie croisée du jeton suivant, tandis que les flux de la recette low_level reçoivent une supervision d’action de flux. Une ligne peut recevoir l’un ou l’autre de ces objectifs, ou les deux. Les invites utilisateur, les images, les jetons d’état, les jetons d’action et le bourrage sont exclus de la perte de texte. Définissez policy.recipe=null pour désactiver le rendu de la recette et utiliser le chemin d’entraînement original basé uniquement sur les actions.

Voir Colonnes de langue et recettes pour le schéma d’annotation et la structure des recettes. recipe_path peut pointer vers un fichier YAML externe explicite ; LeRobot ne fournit pas de fichiers de recette par défaut partagés. Le prompt système par défaut fait partie de la recette d’EO1 et peut être remplacé par un tour système personnalisé. Les entrées rendues sans tour système, y compris les prompts VQA, en restent dépourvues. Le chemin d’action uniquement, sans messages rendus, conserve le prompt système par défaut. EO1PrepareModelMessagesStep ajoute les images et les jetons d’état/action aux messages rendus avant le formatage et la tokenisation Qwen.

Paramètres d'entraînement clés

ParamètrePar défautDescription
policy.pathlerobot/eo1-basePoids EO-1 publiés, convertis au format natif LeRobot
policy.vlm_baseQwen/Qwen2.5-VL-3B-InstructQwen processeur/backbone utilisé uniquement lors de l'entraînement sans policy.path
policy.dtypebfloat16Demande de type de données du backbone : un nom de type torch, par exemple bfloat16, float32
policy.attn_implementationNoneBackend d'attention Qwen facultatif, tel que sdpa
policy.gradient_checkpointingfalseRéduit l'utilisation de la mémoire pendant l'entraînement
policy.chunk_size16Nombre d'actions futures prédites par bloc
policy.n_action_steps16Nombre d'actions consommées depuis un échantillon
policy.num_denoise_steps10Nombre d'étapes de débruitage par correspondance de flux utilisées lors de l'échantillonnage
policy.max_state_dim32Dimension de bourrage de l'état
policy.max_action_dim32Dimension du padding des actions
policy.force_fp32_autocasttrueConserve la tête de flux en fp32 même lorsque le backbone utilise la précision mixte
policy.supervise_padding_action_dimstrueContrôle si les dimensions d'action remplies sont supervisées
policy.supervise_padding_actionstrueContrôle si les lignes d'action future remplies sont supervisées
policy.recipe_pathNoneActive la supervision par recette du texte et des actions par échantillon
policy.text_loss_weight0.01Poids pour l'entropie croisée des jetons d'assistant supervisés
policy.flow_loss_weight1.0Poids pour la perte d'action-flux continue
policy.tokenizer_max_length1000Longueur maximale de la séquence conjointe vision-langage-action

Évaluation

EO-1 peut être évalué via lerobot-eval une fois que vous disposez d'un point de contrôle au format 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

Pour les jeux de données ou les environnements dont les noms de caméras diffèrent de la configuration du point de contrôle, passez 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"}'

Notes de configuration

Traitement d'images

EO-1 utilise le processeur Qwen2.5-VL. Les paramètres policy.image_min_pixels et policy.image_max_pixels contrôlent les limites de redimensionnement des images avant que les jetons visuels ne soient transmis au backbone.

Dimensions de l'état et de l'action

La politique remplit les vecteurs d'état et d'action jusqu'à policy.max_state_dim et policy.max_action_dim avant la tête de flux EO-1. Les prédictions sont recadrées à la dimension d'action d'origine avant d'être renvoyées par la politique.

Backend d'attention

Utilisez policy.attn_implementation=sdpa pour une configuration portable. Utilisez flash_attention_2 uniquement si flash_attn est installé et compatible avec votre environnement.

Références

Citation

@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}
}

Licence

Cette intégration LeRobot suit la licence Apache 2.0 utilisée par LeRobot. Consultez les pages du modèle et du jeu de données EO-1 en amont pour connaître les licences des points de contrôle et des données EO-1 publiés.

Update on GitHub