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 é uma política Vision-Language-Action para controle de robôs. A implementação do LeRobot integra o EO-1 com o treinamento, a avaliação e a interface de processador padrão do LeRobot.

Visão geral do modelo

O EO-1 utiliza um backbone Qwen2.5-VL para compreensão de visão-linguagem e adiciona uma cabeça de ação de fluxo contínuo (flow-matching) para controle de robôs. A política formata cada amostra de controle de robô como uma conversa multimodal: as imagens da câmera são passadas para o Qwen2.5-VL, o estado do robô é representado com tokens de estado do EO-1 e o trecho de ação futuro é representado com tokens de ação do EO-1.

An overview of EO-1

Durante o treinamento, o EO-1 aprende a desruidar trechos contínuos de ações nas posições de tokens de ação. Durante a inferência, ele amostra um trecho de ações, retorna ações contínuas e executa n_action_steps do trecho antes de amostrar novamente.

O que a Integração do LeRobot Abrange

  • Configuração padrão policy.type=eo1 por meio do LeRobot
  • Pré-processamento de imagem e texto do Qwen2.5-VL por meio de processadores de política
  • Previsão de ações por fluxo contínuo
  • Salvamento/carregamento de checkpoints por meio das APIs de política do LeRobot
  • Treinamento com lerobot-train e avaliação com lerobot-eval

O projeto mais amplo do EO-1 também inclui pré-treinamento intercalado de visão-texto-ação e fluxos de trabalho de raciocínio multimodal. Esta página foca no caminho de política de controle de robô do LeRobot.

Requisitos de instalação

  1. Instale o LeRobot seguindo o Guia de Instalação.

  2. Instale as dependências do EO-1 executando:

    pip install -e ".[eo1]"
  3. Se você deseja treinar ou avaliar no LIBERO, instale também as dependências do LIBERO:

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

O EO-1 pode usar o backend padrão de atenção de produto escalar do PyTorch por meio de policy.attn_implementation=sdpa. Se o seu ambiente tiver uma instalação compatível do flash_attn, você pode solicitar policy.attn_implementation=flash_attention_2.

Requisitos de Dados

O EO-1 espera um dataset LeRobot com:

  • Pelo menos uma observação visual, por exemplo observation.images.image
  • observation.state
  • action
  • Uma instrução de tarefa de linguagem por meio do campo task do conjunto de dados

Se o seu conjunto de dados usa nomes de observação diferentes, use rename_map para alinhá-los com os nomes esperados pela sua configuração de treinamento ou avaliação.

Uso

Para usar o EO-1 em uma configuração do LeRobot, especifique o tipo de política como:

policy.type=eo1

Use o checkpoint de release convertido para começar a partir do pré-treinamento intercalado de visão-texto-ação do EO-1:

--policy.path=lerobot/eo1-base

lerobot/eo1-base é uma conversão nativa do LeRobot de IPEC-COMMUNITY/EO-1-3B. Ele preserva os pesos de visão-linguagem Qwen liberados e a cabeça de ação flow-matching treinada. O tamanho do chunk de ação é 16, correspondendo ao checkpoint upstream. Para inicializar apenas a partir do backbone Qwen original, omita policy.path e defina policy.vlm_base=Qwen/Qwen2.5-VL-3B-Instruct.

Carregue outro checkpoint EO-1 no formato LeRobot, ajustado finamente, com:

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

Geração de texto e controle interativo

O EO-1 expõe o backbone do Qwen por meio do contrato de texto de política compartilhado. O Runtime adiciona query_kind e query_text e, em seguida, executa o processador de entrada padrão do 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 preserva a pergunta do chamador. next_subtask aplica a receita armazenada na configuração de política do EO-1. O EO-1 herda generate_text(processed_batch) e sobrescreve supports_text_generation e generate_text; nenhum VLM separado é carregado.

Com o runtime de linguagem interativo, o EO-1 pode gerar uma subtarefa e reconstruir seu prompt de ação a partir dessa subtarefa atual:

# 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

Após /start, use /vqa <question>, /autosteer <goal> ou /subtask <text>.

Treinamento

Exemplo de Comando de Treinamento

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

Treinar com anotações de linguagem

EO1Config inclui uma receita para treinar a partir das colunas de linguagem opcionais do LeRobot. A receita conjunta integrada supervisiona uma resposta de assistente selecionada e seu trecho de ação contínuo na mesma sequência:

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

As voltas do assistente direcionadas recebem a entropia cruzada do próximo token, enquanto os fluxos da receita low_level recebem supervisão de ação de fluxo. Uma linha pode receber qualquer um dos objetivos ou ambos. Prompts do usuário, imagens, tokens de estado, tokens de ação e preenchimento são excluídos da perda de texto. Defina policy.recipe=null para desabilitar a renderização da receita e usar o caminho de treinamento original apenas com ações.

Consulte Colunas de idioma e receitas para o esquema de anotação e a estrutura da receita. recipe_path pode apontar para uma substituição externa explícita em YAML; o LeRobot não fornece arquivos de receita padrão compartilhados. O prompt de sistema padrão faz parte da receita do EO1 e pode ser substituído por um turno de sistema personalizado. As entradas renderizadas sem um turno de sistema, incluindo prompts de VQA, permanecem sem um. O caminho apenas de ação, sem mensagens renderizadas, mantém o prompt de sistema padrão. EO1PrepareModelMessagesStep adiciona imagens e tokens de estado/ação às mensagens renderizadas antes do formatamento e da tokenização do Qwen.

Parâmetros Principais de Treinamento

ParâmetroPadrãoDescrição
policy.pathlerobot/eo1-basePesos do EO-1 convertidos para o formato nativo do LeRobot
policy.vlm_baseQwen/Qwen2.5-VL-3B-InstructProcessador/backbone do Qwen usado apenas quando o treinamento é realizado sem policy.path
policy.dtypebfloat16Solicitação de dtype do backbone: um nome de dtype do torch, por exemplo, bfloat16, float32
policy.attn_implementationNoneBackend de atenção Qwen opcional, como sdpa
policy.gradient_checkpointingfalseReduz o uso de memória durante o treinamento
policy.chunk_size16Número de ações futuras previstas por bloco
policy.n_action_steps16Número de ações consumidas de um bloco amostrado
policy.num_denoise_steps10Número de etapas de desruidamento de flow-matching usadas durante a amostragem
policy.max_state_dim32Dimensão de preenchimento do estado
policy.max_action_dim32Dimensão de preenchimento de ação
policy.force_fp32_autocasttrueMantém a cabeça de fluxo em fp32, mesmo quando o backbone usa precisão mista
policy.supervise_padding_action_dimstrueControla se as dimensões de ação preenchidas são supervisionadas
policy.supervise_padding_actionstrueControla se as linhas de ação futura com preenchimento são supervisionadas
policy.recipe_pathNonePermite supervisão de texto e de ações por amostra orientada por receitas
policy.text_loss_weight0.01Peso para a entropia cruzada de tokens assistentes supervisionados
policy.flow_loss_weight1.0Peso para a perda de fluxo-ação contínua
policy.tokenizer_max_length1000Comprimento máximo da sequência conjunta de visão-linguagem-ação

Avaliação

O EO-1 pode ser avaliado por meio de lerobot-eval uma vez que você tenha um checkpoint no 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 dados ou ambientes cujos nomes de câmera diferem da configuração do checkpoint, passe um 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 configuração

Processamento de Imagens

O EO-1 usa o processador Qwen2.5-VL. As configurações policy.image_min_pixels e policy.image_max_pixels controlam os limites de redimensionamento da imagem antes que os tokens visuais sejam passados para o backbone.

Dimensões de Estado e Ação

A política adiciona padding aos vetores de estado e ação até policy.max_state_dim e policy.max_action_dim antes da cabeça de fluxo EO-1. As previsões são recortadas de volta para a dimensão original da ação antes de serem retornadas pela política.

Backend de Atenção

Use policy.attn_implementation=sdpa para uma configuração portátil. Use flash_attention_2 apenas quando flash_attn estiver instalado e compatível com o seu ambiente.

Referências

Citação

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

Licença

Esta integração do LeRobot segue a Apache 2.0 License utilizada pelo LeRobot. Consulte as páginas do modelo e do dataset upstream do EO-1 para verificar as licenças dos checkpoints e dos dados do EO-1 liberados.

Update on GitHub