LeRobot documentation

EO-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 — это политика Vision-Language-Action для управления роботами. Реализация в LeRobot интегрирует EO-1 со стандартным интерфейсом обучения, оценки и процессора LeRobot.

Обзор модели

EO-1 использует базовую модель Qwen2.5-VL для понимания визуальных и языковых данных и добавляет непрерывную головку flow-matching для управления роботом. Политика форматирует каждый образец управления роботом как мультимодальный диалог: изображения с камер передаются в Qwen2.5-VL, состояние робота представлено токенами состояния EO-1, а будущий блок действий — токенами действий EO-1.

An overview of EO-1

В процессе обучения EO-1 учится удалять шум из непрерывных блоков действий в позициях токенов действий. Во время инференса он сэмплирует блок действий, возвращает непрерывные действия и выполняет n_action_steps из блока перед следующим сэмплированием.

Что охватывает интеграция LeRobot

  • Стандартная конфигурация policy.type=eo1 через LeRobot
  • Предобработка изображений и текста в Qwen2.5-VL с помощью процессоров политики
  • Непрерывное предсказание действий с помощью flow-matching
  • Сохранение и загрузка контрольных точек через API политик LeRobot
  • Обучение с помощью lerobot-train и оценка с помощью lerobot-eval

Более широкий проект EO-1 также включает в себя чередующееся предобучение по данным «зрение-текст-действие» и рабочие процессы мультимодального рассуждения. Эта страница посвящена пути политики управления роботом LeRobot.

Требования к установке

  1. Установите LeRobot, следуя Руководству по установке.

  2. Установите зависимости EO-1, выполнив:

    pip install -e ".[eo1]"
  3. Если вы хотите обучать или оценивать модели на LIBERO, установите также зависимости LIBERO:

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

EO-1 может использовать стандартный бэкенд PyTorch для масштабированного внимания на основе скалярного произведения через policy.attn_implementation=sdpa. Если в вашей среде установлена совместимая версия flash_attn, вы можете запросить policy.attn_implementation=flash_attention_2.

Требования к данным

EO-1 ожидает набор данных LeRobot со следующими характеристиками:

  • Хотя бы одно визуальное наблюдение, например observation.images.image
  • observation.state
  • action
  • Инструкция языковой задачи через поле task набора данных

Если в вашем наборе данных используются другие имена наблюдений, используйте rename_map, чтобы привести их к именам, ожидаемым вашей конфигурацией обучения или оценки.

Использование

Чтобы использовать EO-1 в конфигурации LeRobot, укажите тип политики как:

policy.type=eo1

Используйте преобразованный контрольный пункт выпуска, чтобы начать с чередующегося предобучения «зрение-текст-действие» в EO-1:

--policy.path=lerobot/eo1-base

lerobot/eo1-base — это нативная конвертация IPEC-COMMUNITY/EO-1-3B в формат LeRobot. Она сохраняет опубликованные веса зрительно-языковой модели Qwen и обученную голову действия с flow-matching. Размер чанка действий составляет 16, что соответствует исходной контрольной точке. Чтобы инициализировать модель только из оригинального бэкбона Qwen, опустите policy.path и установите policy.vlm_base=Qwen/Qwen2.5-VL-3B-Instruct.

Загрузите другой дообученный чекпоинт в формате LeRobot для EO-1 с помощью:

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

Генерация текста и интерактивное управление

EO-1 предоставляет доступ к основе Qwen через общий текстовый контракт политики. Runtime добавляет query_kind и query_text, а затем запускает стандартный обработчик входных данных 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 сохраняет вопрос вызывающей стороны. next_subtask применяет рецепт, сохранённый в конфигурации политики EO-1. EO-1 наследует generate_text(processed_batch) и переопределяет supports_text_generation и generate_text; отдельная VLM не загружается.

С интерактивным языковым рантаймом EO-1 может генерировать подзадачу и перестроить свой промпт действий на основе этой текущей подзадачи:

# 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

После /start используйте /vqa <question>, /autosteer <goal> или /subtask <text>.

Обучение

Пример команды обучения

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

Обучение с языковыми аннотациями

EO1Config содержит рецепт для обучения по необязательным языковым столбцам LeRobot. Встроенный совместный рецепт контролирует выбранный ответ ассистента и его непрерывный блок действий в одной последовательности:

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

Целевые ответы ассистента получают кросс-энтропию следующего токена, а потоки рецепта low_level получают надзор по действиям потока. Строка может получать либо один из этих критериев, либо оба. Промпты пользователя, изображения, токены состояния, токены действий и заполнители исключаются из текстовой функции потерь. Установите policy.recipe=null, чтобы отключить рендеринг рецепта и использовать исходный путь обучения только по действиям.

См. Языковые столбцы и рецепты для схемы аннотаций и структуры рецептов. recipe_path может указывать на явный внешний файл переопределения в формате YAML; LeRobot не предоставляет общих файлов рецептов по умолчанию. Системный промпт по умолчанию является частью рецепта EO1 и может быть заменён пользовательским системным ходом. Отрендеренные входные данные без системного хода, включая промпты VQA, остаются без него. Путь только с действиями без отрендеренных сообщений сохраняет системный промпт по умолчанию. EO1PrepareModelMessagesStep добавляет изображения и токены состояния/действия к отрендеренным сообщениям перед форматированием и токенизацией Qwen.

Ключевые параметры обучения

ПараметрПо умолчаниюОписание
policy.pathlerobot/eo1-baseОпубликованы веса EO-1, преобразованные в нативный формат LeRobot
policy.vlm_baseQwen/Qwen2.5-VL-3B-InstructПроцессор/бэкбон Qwen, используемый только при обучении без policy.path
policy.dtypebfloat16Запрос типа данных для базовой модели: имя типа данных torch, например bfloat16, float32
policy.attn_implementationNoneНеобязательный бэкенд внимания Qwen, например sdpa
policy.gradient_checkpointingfalseСнижает потребление памяти во время обучения
policy.chunk_size16Количество предсказываемых будущих действий на чанк
policy.n_action_steps16Количество действий, извлечённых из выборки
policy.num_denoise_steps10Количество шагов денуазинга flow-matching, используемых при выборке
policy.max_state_dim32Размер измерения отступов
policy.max_action_dim32Размер отступов для действий
policy.force_fp32_autocasttrueДержит head потока в fp32, даже если backbone использует смешанную точность
policy.supervise_padding_action_dimstrueОпределяет, контролируются ли дополненные (padded) измерения действий
policy.supervise_padding_actionstrueУправляет тем, применяются ли потери к строкам будущих действий, дополненным заполнителями
policy.recipe_pathNoneВключает управление текстом и действиями для каждой выборки на основе рецептов
policy.text_loss_weight0.01Вес для кросс-энтропии супервизированных токенов ассистента
policy.flow_loss_weight1.0Вес для непрерывной потери потока-действия
policy.tokenizer_max_length1000Максимальная длина последовательности «зрение-язык-действие»

Оценка

Модель EO-1 можно оценить с помощью lerobot-eval, если у вас есть контрольная точка в формате 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

Для наборов данных или сред, в которых имена камер отличаются от конфигурации контрольной точки, передайте 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"}'

Заметки по конфигурации

Обработка изображений

EO-1 использует процессор Qwen2.5-VL. Настройки policy.image_min_pixels и policy.image_max_pixels задают границы изменения размера изображения перед передачей визуальных токенов в базовую модель.

Размерности состояния и действия

Политика дополняет векторы состояния и действия до policy.max_state_dim и policy.max_action_dim перед головой потока EO-1. Прогнозы обрезаются обратно до исходного измерения действия перед возвратом политикой.

Бэкенд внимания

Используйте policy.attn_implementation=sdpa для переносимой конфигурации. Используйте flash_attention_2 только в том случае, если flash_attn установлен и совместим с вашей средой.

Ссылки

Цитирование

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

Лицензия

Интеграция LeRobot следует лицензии Apache 2.0, используемой в LeRobot. Проверьте лицензии на опубликованные контрольные точки и данные модели EO-1 на страницах исходной модели и набора данных.

Update on GitHub