【多模态】Simple o3 提高多模态模型准确率
Simple o3: Towards Interleaved Vision-Language Reasoning,旨在通过动态的视觉工具交互(如裁剪、放大、复用)来增强多模态大语言模型(MLLM)的“以图思考”能力,实现 interleaved vision-language reasoning。
**这一做法有些类似于SAHI,感觉很靠谱,但是对于一些特殊内容的理解,可能还需要进一步训练模型。**核心做法是构建一个可扩展的“观察-推理-操作”数据生成管道,自动生成包含可执行视觉指令的高质量推理链,并采用图像掩码监督微调,使模型能像人类一样迭代地操纵视觉信息并进行文本推理。
一、 数据构造:TWI-Tools-146K
1.1 构造流程:观察-推理-操作 (Observe-Reason-Act) 循环
- 输入: 一个问题-图像对
(Q, I)
。 - 过程:
- 推理与规划 (
Rt
): 使用一个强大的基础MLLM(论文中使用gemini-2.5-Flash
)作为“协调器”。模型观察当前图像I
,生成一个原子推理步骤和一个视觉操作规划,并用<reasoning>
标签包裹。- 关键约束:在
<reasoning>
标签内不得提及任何具体的参数(如坐标、缩放比例),只描述意图。 Rt
是什么?Rt
是模型在第t
步生成的“推理内容”,它包含两部分:(rt, pt)
,即“原子推理步骤”和“视觉操作规划”。- 示例 (来自 Fig. 10):
这里,<reasoning> The question asks about the food on the table. The image shows two plates of food. To accurately identify all items, I will first focus on the top plate which contains what appears to be a main dish and rice. </reasoning>
Rt
就是这段被<reasoning>
标签包裹的文本。它解释了“为什么”要进行下一步操作(识别桌上的食物),并规划了“做什么”(聚焦于顶部的盘子)。
- 示例 (来自 Fig. 10):
- 关键约束:在
- 工具调用 (
Ct
): 模型根据规划,生成一个结构化的工具调用指令,用<function>
标签包裹。Ct
是什么?Ct
是模型在第t
步生成的“工具命令”,它是一个JSON对象,指定了要调用的工具名称和具体参数。- 示例 (来自 Fig. 9 & Fig. 10):
这里,<function> {"name":"focus_area","arguments":{"coordinates":[0, 0, 923, 768]}} </function>
Ct
就是这个JSON对象。它精确地告诉系统:调用focus_area
工具,并将坐标[0, 0, 923, 768]
作为参数。
- 示例 (来自 Fig. 9 & Fig. 10):
- 执行与观察 (
It
): 系统根据<function>
指令,调用对应的视觉工具处理图像,生成一个新的视觉状态I'
,并用<observation>
标签包裹。It
是什么?It
是系统在第t
步执行工具命令Ct
后,返回给模型的新图像。它代表了环境的“观察结果”。- 示例: 在 Fig. 10 中,执行第一个
focus_area
命令后,系统会返回一个只包含图像顶部区域(坐标 0,0 到 923,768)的裁剪后图片。这个新图片就是I1
。虽然论文没有直接展示I1
的像素内容,但它在轨迹中被<observation>
标签标记,是模型进行下一步推理的视觉输入。
- 示例: 在 Fig. 10 中,执行第一个
- 循环: 将
I'
作为新的输入图像,重复步骤1-3,直到模型认为已收集足够信息。 - 生成答案: 模型进行总结推理,并在
<answer>
标签内给出最终答案。
- 推理与规划 (
- 输出: 一个完整的、多轮的交错推理轨迹
S = {s0, s1, ..., st, A}
,其中st = (Rt, Ct, It)
。
1.2 质量控制:两步验证模块
- 第一步:工具验证 (Tool Verification)
- 目的: 确保生成的工具命令
Ct
与推理内容Rt
在语义上一致,且参数有效。 - 方法: 使用另一个LLM(
gemini-2.5-flash-lite
)作为验证器。- 对于
focus_area
:验证返回的坐标框是否精确匹配或完全包含目标实体/区域。 - 对于
zoom_in
和reuse
:验证工具命令是否与视觉操作规划的语义一致。- 这句话是什么意思?
这意味着验证器会检查<function>
标签里的JSON命令,是否与<reasoning>
标签里描述的“意图”在逻辑上吻合。- 示例1 (Zoom_in):
Rt
(推理内容): “The text is small and difficult to read clearly. Therefore, I will zoom in on the text to make it legible.” (文本太小看不清,因此我将放大文本。)Ct
(工具命令):{"name":"zoom_in","arguments":{"scale": 2}}
- 验证: 语义一致。推理说要“放大”,命令确实是调用
zoom_in
。
- 示例2 (Reuse):
Rt
(推理内容): “I will reuse the image as it seems clear enough to make a judgment.” (我将复用原图,因为它足够清晰可以做出判断。)Ct
(工具命令):{"name":"reuse","arguments":{}}
- 验证: 语义一致。推理说要“复用”,命令确实是调用
reuse
。
- 反例 (语义不一致):
Rt
: “I need to get a closer look at the small text.” (我需要仔细看看小字。)Ct
:{"name":"reuse","arguments":{}}
- 验证: 语义不一致。推理意图是“放大细节”,但命令却是“复用原图”,这无法达成推理目标。此样本会被过滤掉。
- 示例1 (Zoom_in):
- 这句话是什么意思?
- 对于
- 示例Prompt (来自 Fig. 6):
“You are an expert evaluator… Returns ‘TRUE’ if the output JSON argument is semantically consistent with the visual operation planning… NOW EVALUATE THE FOLLOWING: Reasoning Content: {res_text} JSON Arguments: {arguments}”
- 目的: 确保生成的工具命令
- 第二步:答案验证 (Answer Verification)
- 目的: 确保最终答案
A
与Ground Truth一致。 - 方法: 使用
Qwen3-turbo
作为验证器,判断答案在语义上是否等价。 - 示例Prompt (来自 Fig. 7):
“You are an expert evaluator… Apply the following evaluation criteria, and respond TRUE if: - Focus on semantic equivalence… Now evaluate the following: Question: {question} GROUND TRUTH: {gt} SYSTEM ANSWER: {ans}”
- 目的: 确保最终答案
2.训练方式
在《Simple o3》论文的训练方式中,图像通过标准的视觉编码器(Vision Encoder)处理后,作为视觉令牌(Visual Tokens)与文本令牌交错地输入给多模态大语言模型(MLLM)。
具体流程和技术细节如下:
-
输入格式:训练数据被格式化为单轮的
(用户输入, 助手输出)
结构。用户输入包含原始问题和初始图像。助手输出是一个完整的、多轮的交错推理轨迹,其中包含<reasoning>
、<function>
和<observation>
标签。- 关键点:
<observation>
标签内包裹的是经过工具处理后的新图像。在数据预处理阶段,这些图像会被视觉编码器处理。
- 关键点:
-
视觉编码器处理:
- 模型的基础架构是
Qwen2.5-VL-7B
,它本身具备处理图像的能力。 - 在训练时,出现在
<observation>
标签中的每一张图像(无论是原始图像还是经过focus_area
、zoom_in
处理后的图像),都会被模型的视觉编码器独立处理。 - 视觉编码器将图像转换为一序列的视觉特征向量,这些向量随后被多模态投影器(Multi-modal Projector) 映射到与文本嵌入(Text Embeddings)相同的向量空间,形成视觉令牌(Visual Tokens)。
- 模型的基础架构是
-
交错序列构建:
- 模型的输入是一个图文交错的长序列。例如,一个轨迹可能如下所示:
[用户问题文本令牌] + [初始图像视觉令牌] + <reasoning>[推理文本令牌]</reasoning> + <function>[工具调用文本令牌(JSON)]</function> + <observation>[新图像视觉令牌]</observation> + <reasoning>[下一轮推理文本令牌]</reasoning> + ... + <answer>[最终答案文本令牌]</answer>
- 在这个序列中,视觉令牌和文本令牌是按顺序拼接在一起的,模型在自回归生成时,会依次“看到”这些令牌。
- 模型的输入是一个图文交错的长序列。例如,一个轨迹可能如下所示:
-
图像掩码(Image Masking)的应用:
- 在计算损失函数时,只对文本令牌计算损失,视觉令牌的损失被设为0。
- 这是通过一个二进制掩码
Mt
实现的:Mt = 1
当zt
是文本令牌时(计算损失)。Mt = 0
当zt
是视觉令牌时(忽略损失)。
- 目的:确保模型学习的目标是生成正确的文本(推理、工具调用、答案),而不是去“预测”或“重建”图像特征。视觉令牌仅作为上下文信息,帮助模型决定下一步该生成什么文本。
-
分辨率处理:
- 论文提到,输入图像的分辨率是动态调整的,范围从
4x28x28
到1024x28x28
像素。这意味着视觉编码器需要能够处理不同尺寸的输入,这是Qwen2.5-VL
等现代视觉语言模型的标准能力。
- 论文提到,输入图像的分辨率是动态调整的,范围从
总结来说:图像不是以原始像素矩阵的形式直接“传给”语言模型,而是先通过一个专用的视觉编码器转换为视觉令牌序列,然后这些令牌与文本令牌交错拼接,共同构成模型的输入序列。模型在训练时,会利用这些视觉令牌作为上下文来生成后续的文本,但不会尝试去预测这些视觉令牌本身,这是通过图像掩码机制保证的。