【读代码】DeepEyes:基于强化学习的“视觉思考”智能体训练框架深度解析
DeepEyes是由Visual-Agent团队开源的创新型AI项目,其核心目标是通过端到端的强化学习(RL)训练,赋予大语言模型"用图像思考"的能力。项目基于VeRL框架构建,支持Qwen-VL系列视觉语言模型(7B/32B),在视觉定位、幻觉抑制和复杂数学问题解决等场景表现出色。核心突破无需监督微调,直接通过RL信号学习多模态推理能力训练过程中涌现出图像缩放、区域对比等自主思考模式在4096x
·
一、基本介绍
DeepEyes是由Visual-Agent团队开源的创新型AI项目,其核心目标是通过端到端的强化学习(RL)训练,赋予大语言模型"用图像思考"的能力。项目基于VeRL框架构建,支持Qwen-VL系列视觉语言模型(7B/32B),在视觉定位、幻觉抑制和复杂数学问题解决等场景表现出色。
核心突破:
- 无需监督微调,直接通过RL信号学习多模态推理能力
- 训练过程中涌现出图像缩放、区域对比等自主思考模式
- 在4096x4096高分辨率基准测试中准确率提升32%
- 支持多工具动态调用,实现视觉搜索与验证的闭环
二、快速上手指南
环境配置:
# 安装基础依赖
pip install -e .
bash scripts/install_deepeyes.sh
# 启动评判模型服务(需Qwen-2.5-72B-Instruct)
vllm serve /path/to/qwen-72b --port 18901 --tensor-parallel-size 8
训练启动:
# 7B模型训练配置示例(需32+ GPU)
export WORLD_SIZE=8
export LLM_AS_A_JUDGE_BASE="http://your.vllm:18901/v1"
bash examples/agent/final_merged_v1v8_thinklite.sh
关键训练参数:
# verl/trainer/config/ppo_trainer.yaml
agent:
activate_agent: true
max_turns: 50
single_response_max_tokens: 16384
concurrent_workers: 4
max_vllm_images: 32
三、典型应用场景
场景1:微小物体定位
# visual_toolbox_v2.py中的图像放大工具
def image_zoom_in(self, bbox, scale=4):
""" 对指定区域进行4倍放大 """
x1,y1,x2,y2 = [int(x*self.orig_w) for x in bbox]
cropped = self.orig_img[y1:y2, x1:x2]
return cv2.resize(cropped, (0,0), fx=scale, fy=scale)
应用效果:在显微镜图像分析中,模型通过多次放大定位5μm级细胞结构,定位精度较基线提升47%。
场景2:数学问题验证
# reward_score/vl_agent.py中的验证逻辑
def verify_math_answer(pred, gt):
try:
pred_num = extract_numbers(pred)[-1]
return abs(pred_num - gt) < 1e-3
except:
return any(str(gt) in pred)
测试数据:在GSM8K测试集上,验证准确率从68%提升至83%。
四、系统架构设计
模型结构:
# verl/models/qwen2_vl/megatron/modeling_qwen2_megatron.py
class QwenVLForCausalLM(MegatronModule):
def __init__(self, config):
self.vision_model = CLIPVisionModel(config.vision_config)
self.language_model = Qwen2Model(config.text_config)
self.mm_projector = nn.Linear(
config.vision_config.hidden_size,
config.text_config.hidden_size
)
训练流程:
- 数据预处理:混合47K代理数据与非代理数据
- 策略优化:采用GRPO算法,λ=0.95的GAE优势估计
- 价值函数:基于KL散度的自适应熵正则化项
- 奖励设计:复合奖励函数R = 0.6R_accuracy + 0.3R_efficiency + 0.1R_safety
关键参数:
| 参数 | 7B模型 | 32B模型 |
|---|---|---|
| Batch Size | 1024 | 2048 |
| Learning Rate | 1e-5 | 5e-6 |
| PPO Epochs | 4 | 3 |
| Max Seq Length | 32768 | 65536 |
五、核心创新点
- 动态视觉处理引擎:
# visual_toolbox_v2.py中的多模态处理
def process_observation(self):
visual_features = []
for img in self.images:
feat = self.vit(img) # 使用ViT提取特征
visual_features.append(self.projector(feat))
return torch.cat(visual_features)
- 混合训练机制:
- 代理数据与非代理数据比例动态调整(1:1 → 3:1)
- 渐进式课程学习:从单轮对话逐步扩展至50轮复杂交互
- 分布式推理优化:
# 使用vLLM进行分布式推理
vllm_worker --model qwen2.5-vl-7b \
--tensor-parallel-size 8 \
--max-num-batched-tokens 16000
六、典型代码解析
工具定义示例:
# verl/workers/agent/envs/mm_process_engine/visual_toolbox_v2.py
class VisualToolbox(ToolBase):
name = "visual_toolbox_v2"
def execute(self, action_str):
if "zoom_in" in action_str:
bbox = parse_bbox(action_str)
return self.image_zoom_in(bbox)
elif "compare" in action_str:
return self.region_comparison()
训练监控:
# verl/utils/rl_logging_board_utils.py
class TrainingMonitor:
def log_metrics(self):
wandb.log({
"reward": self.reward_buffer.mean(),
"kl_div": self.kl_values[-100:].mean(),
"tool_usage": self.tool_counter
})
更多推荐
所有评论(0)