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バックボーンを使用し、ロボット制御のために連続フローマッチングアクションヘッドを追加しています。このポリシーは、各ロボット制御サンプルをマルチモーダル会話としてフォーマットします。カメラ画像はQwen2.5-VLに渡され、ロボット状態はEO-1状態トークンで、将来のアクションチャンクはEO-1アクショントークンで表されます。

An overview of EO-1

学習中、EO-1はアクショントークンの位置で連続的なアクションチャンクをデノイズすることを学習します。推論時、EO-1はアクションチャンクをサンプリングし、連続的なアクションを返却し、チャンクからn_action_steps分を実行してから、再度サンプリングを行います。

LeRobot統合の範囲

  • LeRobotによる標準的なpolicy.type=eo1設定
  • Qwen2.5-VLの画像とテキストの前処理をポリシープロセッサを通じて行います
  • 連続フローマッチングによるアクション予測
  • LeRobotのポリシーAPIによるチェックポイントの保存/読み込み
  • 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は、policy.attn_implementation=sdpa を通じて標準の PyTorch スケールド・ドットプロダクト・アテンション バックエンドを使用できます。環境に互換性のある flash_attn インストールがある場合、policy.attn_implementation=flash_attention_2 を指定できます。

データ要件

EO-1は、以下のLeRobotデータセットを前提としています:

  • 少なくとも1つの視覚的観測、例えばobservation.images.image
  • observation.state
  • action
  • データセットのtaskフィールドによる言語タスクの指示

データセットで異なる観測名を使用している場合は、rename_map を使用して、学習または評価の設定で期待される名前に合わせてください。

使用方法

LeRobot の設定で EO-1 を使用するには、ポリシータイプを以下のように指定します:

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バックボーンを公開します。ランタイムは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 を設定すると、レシピのレンダリングが無効になり、元のアクションのみの学習パスが使用されます。

アノテーションスキーマとレシピの構造については、Language columns and recipesを参照してください。recipe_pathは明示的な外部YAMLオーバーライドを指す場合があります。LeRobotは共有デフォルトのレシピファイルを提供していません。デフォルトのシステムプロンプトはEO1のレシピの一部であり、カスタムのシステムターンで置き換えることができます。システムターンを含まないレンダリング済み入力(VQAプロンプトを含む)は、システムターンなしのままになります。レンダリング済みメッセージを含まないアクション専用のパスでは、デフォルトのシステムプロンプトが保持されます。EO1PrepareModelMessagesStepは、Qwenのフォーマットとトークン化の前に、レンダリング済みメッセージに画像と状態/アクショントークンを追加します。

主要な学習パラメータ

パラメータデフォルト説明
policy.pathlerobot/eo1-baseEO-1の重みをLeRobotのネイティブ形式に変換してリリースしました
policy.vlm_baseQwen/Qwen2.5-VL-3B-Instructpolicy.pathなしで学習する場合にのみ使用されるQwenプロセッサ/バックボーン
policy.dtypebfloat16Backboneのdtype指定: torchのdtype名、例: bfloat16、float32
policy.attn_implementationNonesdpa などの任意の Qwen アテンションバックエンド
policy.gradient_checkpointingfalse学習時のメモリ使用量を削減します
policy.chunk_size16チャンクごとに予測される将来アクションの数
policy.n_action_steps16サンプリングされたチャンクから消費されたアクションの数
policy.num_denoise_steps10サンプリング時に使用されるフローマッチングのデノイジングステップ数
policy.max_state_dim32パディング次元の状態
policy.max_action_dim32アクションの埋め込み次元
policy.force_fp32_autocasttrueバックボーンが混合精度を使用している場合でも、フローヘッドをfp32のままに保ちます
policy.supervise_padding_action_dimstrueパディングされたアクション次元が教師信号の対象となるかどうかを制御します
policy.supervise_padding_actionstrueパディングされた将来のアクション行が教師信号の対象となるかどうかを制御します
policy.recipe_pathNoneレシピ駆動のテキストおよびサンプルごとのアクションの監督を有効にします
policy.text_loss_weight0.01教師ありアシスタントトークンのクロスエントロピーの重み
policy.flow_loss_weight1.0連続フローアクション損失の重み
policy.tokenizer_max_length1000最大ジョイントビジョン・言語・アクションシーケンス長

評価

LeRobot形式のチェックポイントが用意できたら、lerobot-evalを通じてEO-1を評価できます。

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の設定は、ビジュアルトークンがバックボーンに渡される前の画像リサイズ範囲を制御します。

状態とアクションの次元

ポリシーは、EO-1フローヘッドの前に、状態ベクトルとアクションベクトルをpolicy.max_state_dimおよびpolicy.max_action_dimにパディングします。予測値は、ポリシーによって返される前に、元のアクション次元にクロップされます。

アテンションバックエンド

ポータブルなセットアップには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統合は、LeRobotで使用されているApache 2.0 Licenseに従います。公開されているEO-1のチェックポイントおよびデータのライセンスについては、アップストリームのEO-1モデルおよびデータセットのページを確認してください。

Update on GitHub