🚀 DeepEyes: 強化学習による「画像を用いた思考」の促進
DeepEyesは、強化学習を通じて「画像を用いた思考」能力を向上させる画像テキスト生成モデルです。画像情報を直接推論に活用し、高解像度ベンチマークで優れた性能を発揮します。
DeepEyes: Incentivizing “Thinking with Images” via Reinforcement Learning
* ロゴは甲骨文の「目」をヒントにデザインされています。
🚀 クイックスタート
環境設定
pip install -e .
bash scripts/install_deepeyes.sh
トレーニングの開始
私たちは、強化学習トレーニングの基礎モデルとしてQwen-2.5-VL-7B-Instructを使用しています。Qwen-2.5-VL-32B-Instructもサポートされています。
7Bモデルのトレーニングには32GPU以上(4ノード x 8GPU)、32Bモデルのトレーニングには64GPU以上(8ノード x 8GPU)の使用を推奨します。各ノードには、V* およびArxivQAデータセットの高解像度画像が大量のメモリを消費するため、1200GB以上のCPU RAMを使用することを推奨します。
ステップ1: Qwen-2.5-72B-Instructのvllmサービングを起動し、llm-as-a-judge検証を行います。
huggingface-cli download --resume-download https://huggingface.co/Qwen/Qwen2.5-72B-Instruct --local-dir /path/to/your/local/filedir --local-dir-use-symlinks False
vllm serve /path/to/your/local/filedir \
--port 18901 \
--gpu-memory-utilization 0.8 \
--max-model-len 32768 \
--tensor-parallel-size 8 \
--served-model-name "judge" \
--trust-remote-code \
--disable-log-requests
ステップ2: すべてのトレーニングノードに対してrayクラスターを構築します。トレーニングを開始する前にデータを準備します。私たちのトレーニングデータセットはhuggingfaceからダウンロードできます。
ステップ3: 以下のスクリプトのいずれかを使用してトレーニングを開始します。
wandb login
export LLM_AS_A_JUDGE_BASE="http://your.vllm.machine.ip:18901/v1"
export WORLD_SIZE=8
bash examples/agent/final_merged_v1v8_thinklite.sh
bash examples/agent/final_merged_v1v8_thinklite_32b.sh
トレーニングスクリプトでは、wandbとRL Logging Board(素晴らしい作品)の両方を使用してトレーニングのダイナミクスを可視化します。
✨ 主な機能
- DeepEyesの画像を用いた思考能力は、エンドツーエンドの強化学習によって学習されます。結果の報酬信号によって直接ガイドされ、コールドスタートや教師あり微調整を必要とせず、特殊な外部モデルにも依存しません。
- 中間ステップに直接的な監督が適用されていないにもかかわらず、RLトレーニング段階で接地IoUとツール呼び出し精度の両方が向上しました。
- エンドツーエンドのRLトレーニングにより、高解像度ベンチマークで大幅な性能向上が得られ、視覚的な接地、幻覚の軽減、数学問題の解決タスクに対する強い汎化能力が示されました。
- RLトレーニングプロセス中に、小さなオブジェクトの視覚的な探索、異なる領域間の視覚的な比較、回答の検証のための
image_zoom_in_tools
の使用など、思考パターンの出現が観察されました。
📚 ドキュメント
コードの一般的な説明
このリポジトリのコードは、VeRLに基づく一般的なエージェント強化学習トレーニングフレームワークです。DeepEyes以外にも、このコード実装を使用して任意の形式の一般的なエージェント強化学習(マルチターンRL)トレーニングを行うことができます。
コードは以下のニーズを満たすように設計されています。
- 高効率なエージェントRLトレーニング:エージェントのロールアウトは、すべてのデータ並列グループ間で非同期で行われます。
- エージェントの観測における動的なマルチモーダル入力の許可:これは「画像を用いた思考」能力のRLトレーニングの鍵となります。
- 異なるツールを持つエージェントデータと非エージェントデータのハイブリッドトレーニングの許可:ツールの使用はロールアウトループにハードコーディングされておらず、各サンプルは
env_name
フィールドを介して独自のツール使用制約を指定できます。
- アルゴリズムのサポート:PPO、GRPO、およびreinforce++がサポートされています。Qwen-VLモデルのアドバンテージ推定、ポリシー損失マスク、およびmropeを変更して、エージェントマルチターンRLトレーニングのインターリーブ構造と互換性を持たせました。
- 最新のVeRL更新への互換性:エージェント強化学習トレーニングはVeRLのプラグインとして実装されており、最新のVeRL更新とのマージが容易です。プラグインスイッチをオフにすると、機能は元のVeRLバージョンと変わりません。
カスタムデータセットでのトレーニング
独自のデータを使用する
データのパーケットファイルに追加のフィールドenv_name
を追加します。各サンプルのenv_name
は、エージェントのロールアウトを実行する際に使用可能なツールを指定する必要があります。非エージェントトレーニングデータの場合は、env_name
をNoneまたは空の文字列にしてください。
DeepEyesスタイルのトレーニングの場合、例えばenv_name
はvisual_toolbox_v2
と指定する必要があります。
残りの部分は元のVeRLデータセット形式と変わりません。詳細については、VeRL公式ドキュメントを参照してください。
カスタムツールでのトレーニング
独自のツールを実装する
verl/workers/agent/tool_envs.pyのToolBase
クラスを基底クラスとする新しいクラスにツール関数を実装します。
サブクラスにはname
変数が含まれている必要があり、その値はトレーニングデータのパーケットファイルのenv_name
フィールドに対応します。
execute
およびreset
関数を実装します。以下は簡単な例です。
class CustomTool(ToolBase):
name = "custom_tool_v0"
def __init__(self, _name, _desc, _params, **kwargs):
super().__init__(name=self.name)
def execute(self, action_string: str, **kwargs) -> tuple:
"""
LLMが生成したテキストに基づいてツールの機能を実行します。
この関数はvllm.generateの後に毎回呼び出されます。
Args:
action_string: vllm.generateによってLLMが生成した文字列。
Returns:
observation: 処理された画像を含む構造化された観測値。
reward: 中間ステップの最後に生成されたトークンに報酬を割り当てる場合は、非ゼロの値を設定します。
done: エピソードが終了したかどうか。
info: 追加情報。
"""
pass
def reset(self, raw_prompt, multi_modal_data, origin_multi_modal_data, **kwargs):
"""
この関数はツールを初期化するときに一度だけ呼び出されます。
Args:
raw_prompt: 生のプロンプト入力を取得するには、設定パラメータ`data.return_raw_chat=True`を設定します。
multi_modal_data: 詳細についてはvllmドキュメントを参照してください https://docs.vllm.ai/en/stable/features/multimodal_inputs.html
origin_multi_modal_data: VLMビジョンプロセッサは、元の画像が小さすぎたり大きすぎたりする場合、通常はリサイズすることによって変更することができます。変更されていないビジョン入力にアクセスする場合は、このパラメータを使用します。
"""
pass
DeepEyesのimage_zoom_in_tool
の例として、verl/workers/agent/envs/mm_process_engine/visual_toolbox_v2.pyを参照してください。
重要: verl/workers/agent/init.pyでカスタムツールをインポートします。
from .envs.your_custom_tool import CustomTool
最新のVeRLコードを使用する
最新のVeRLコードをトレーニングに使用する場合は、以下のコマンドを実行します。
git remote add official https://github.com/volcengine/verl.git
git pull official main
📄 ライセンス
このプロジェクトはApacheライセンスの下で公開されています。
引用
@article{zheng2025deepeyesincentivizingthinkingimages,
title={DeepEyes: Incentivizing "Thinking with Images" via Reinforcement Learning},
author={Ziwei Zheng, Michael Yang, Jack Hong, Chenxiao Zhao, Guohai Xu, Le Yang, Chao Shen, Xing Yu},
year={2025},
eprint={2505.14362},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2505.14362},
}
📦 モデル情報
属性 |
详情 |
モデルタイプ |
画像テキスト生成モデル |
訓練データ |
huggingfaceからダウンロード可能なデータセット |
ベースモデル |
Qwen/Qwen2.5-VL-7B-Instruct |
ライブラリ名 |
transformers |
パイプラインタグ |
image-text-to-text |
ライセンス |
apache-2.0 |