LeRobot documentation
EO-1
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.
В процессе обучения EO-1 учится удалять шум из непрерывных блоков действий в позициях токенов действий. Во время инференса он сэмплирует блок действий, возвращает непрерывные действия и выполняет n_action_steps из блока перед следующим сэмплированием.
Что охватывает интеграция LeRobot
- Стандартная конфигурация
policy.type=eo1через LeRobot - Предобработка изображений и текста в Qwen2.5-VL с помощью процессоров политики
- Непрерывное предсказание действий с помощью flow-matching
- Сохранение и загрузка контрольных точек через API политик LeRobot
- Обучение с помощью
lerobot-trainи оценка с помощьюlerobot-eval
Более широкий проект EO-1 также включает в себя чередующееся предобучение по данным «зрение-текст-действие» и рабочие процессы мультимодального рассуждения. Эта страница посвящена пути политики управления роботом LeRobot.
Требования к установке
Установите LeRobot, следуя Руководству по установке.
Установите зависимости EO-1, выполнив:
pip install -e ".[eo1]"Если вы хотите обучать или оценивать модели на 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.stateaction- Инструкция языковой задачи через поле
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.path | lerobot/eo1-base | Опубликованы веса EO-1, преобразованные в нативный формат LeRobot |
policy.vlm_base | Qwen/Qwen2.5-VL-3B-Instruct | Процессор/бэкбон Qwen, используемый только при обучении без policy.path |
policy.dtype | bfloat16 | Запрос типа данных для базовой модели: имя типа данных torch, например bfloat16, float32 |
policy.attn_implementation | None | Необязательный бэкенд внимания Qwen, например sdpa |
policy.gradient_checkpointing | false | Снижает потребление памяти во время обучения |
policy.chunk_size | 16 | Количество предсказываемых будущих действий на чанк |
policy.n_action_steps | 16 | Количество действий, извлечённых из выборки |
policy.num_denoise_steps | 10 | Количество шагов денуазинга flow-matching, используемых при выборке |
policy.max_state_dim | 32 | Размер измерения отступов |
policy.max_action_dim | 32 | Размер отступов для действий |
policy.force_fp32_autocast | true | Держит head потока в fp32, даже если backbone использует смешанную точность |
policy.supervise_padding_action_dims | true | Определяет, контролируются ли дополненные (padded) измерения действий |
policy.supervise_padding_actions | true | Управляет тем, применяются ли потери к строкам будущих действий, дополненным заполнителями |
policy.recipe_path | None | Включает управление текстом и действиями для каждой выборки на основе рецептов |
policy.text_loss_weight | 0.01 | Вес для кросс-энтропии супервизированных токенов ассистента |
policy.flow_loss_weight | 1.0 | Вес для непрерывной потери потока-действия |
policy.tokenizer_max_length | 1000 | Максимальная длина последовательности «зрение-язык-действие» |
Оценка
Модель 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