Chapter 2:图像综合理解与通用 VQA 基准
1. 开篇段落:从“看图说话”到“视觉推理”
在多模态大模型(MLLM)的评估体系中,通用视觉问答(General VQA) 处于金字塔的基座位置。它不局限于某一类特定任务(如单纯的 OCR 或 图表分析),而是模拟人类在面对一张陌生图像时,调用综合知识进行理解、推理和表达的过程。
本章的学习目标是让你具备“鉴赏”和“诊断”基准的能力:
- 历史的镜像:通过 VQAv2 和 GQA 理解数据集偏差(Bias)是如何误导模型评估的。
- 现代基准的内核:深度解析 MMBench 的循环评估(Circular Eval)机制、MMVet 的能力交集理论,以及 MME 的二元诊断法。
- 评测实战方法论:掌握 Zero-shot 与 Chain-of-Thought (CoT) 在视觉任务中的适用边界。
- 结果解读:如何透过 Top-1 Accuracy 看到模型的真实缺陷(如幻觉、位置偏差)。
2. 文字论述
2.1 传统 VQA 的遗产:偏差与局限
在 Transformer 和 LLM 统治视觉领域之前,VQA 被视为一个“多分类问题”(从固定的 3000 个答案词表中选一个)。虽然现在的模型是生成式的(Generative),但经典数据集揭示了评估中永恒的难题:Shortcut Learning(捷径学习)。
A. VQAv2:语言偏差的教科书
B. GQA:组合性推理(Compositionality)
C. VizWiz:真实世界的混乱与拒答
- 来源:由盲人用户通过手机拍摄并提问。
- 独特性:
- 图像质量极差:模糊、手指遮挡镜头、光照不足。
- 不可回答(Unanswerable):这是 VizWiz 最伟大的贡献。很多时候图片是一片黑,用户问“这是什么药?”。模型必须学会说“我看不到”或“图片太模糊”,而不是产生幻觉瞎编一个药名。
D. CLEVR:逻辑的纯净室
- 内容:简单的几何体(球、立方体、圆柱)合成图像。
- 用途:消融实验专用。如果模型在自然图像上推理很差,你不知道是视觉编码器(ViT)太弱看不清物体,还是语言模型(LLM)逻辑太差。CLEVR 视觉极简,如果这里也做不对,那就是逻辑推理模块的问题。
2.2 现代综合基准:为了评估 MLLM 而生
随着 LLM 的接入,模型不再受限于固定词表,评估的重点转向了长文本生成、复杂推理和鲁棒性。
A. MMBench:反击“位置偏差”与“随机猜测”
MMBench 是目前 Leaderboard 上最流行的基准之一,它引入了 Circular Evaluation(循环评估) 机制。
ASCII 图解:Circular Evaluation 流程
----------------------------------------------------
[ 原始题目 ]
图: 🍎 问: 这是什么?
选项: (A) 苹果 (B) 香蕉 (C) 橘子
----------------------------------------------------
Pass 1: 输入 (A)苹果 (B)香蕉 (C)橘子 -> 模型输出: A ✅
Pass 2: 输入 (A)香蕉 (B)橘子 (C)苹果 -> 模型输出: C ✅ (对应苹果)
Pass 3: 输入 (A)橘子 (B)苹果 (C)香蕉 -> 模型输出: B ✅ (对应苹果)
----------------------------------------------------
判定结果: 3次全部命中内容 "苹果" -> Hit! (得1分)
若有一次选错 (例如 Pass 2 选了 A) -> Miss! (得0分)
B. MMVet:能力的交集(Intersection)与 LLM 评分
MMVet 关注“解决复杂问题往往需要多种能力的组合”。
C. MME:感知与认知的快速体检
MME 是一套非常全面的“体检套餐”,包含 14 个子任务。
D. SEED-Bench:时间维度与规模
SEED-Bench 的特点是规模大(19K 题目)且包含视频理解。它在图像部分不仅考查静态理解,还特别设计了 Instance Interaction(物体交互)类别,考察模型对动作和状态的理解。
2.3 评测策略:Zero-shot, Few-shot 与 CoT
在实际评测中,Prompt 的写法决定了生与死。
- Zero-shot(零样本):
- Prompt: “Answer the question based on the image.”
- 适用:这是目前 VLM 评测的标准配置(Standard Setting)。最能反映模型的 Base 能力。
- 注意:大部分 Leaderboard 分数都是 Zero-shot。
- Few-shot (In-Context Learning):
- Prompt: “Image 1: [图] Q: [问] A: [答] … Image N: [图] Q: [问] A: [?]”
- Gotcha:在纯文本 LLM 中,Few-shot 几乎总是有效的。但在 VLM 中,Few-shot 经常导致性能下降。
- 原因:多个图像的 Visual Tokens 挤占了上下文窗口,且不同图像之间存在注意力干扰(Cross-image attention interference)。除非模型专门做过 Interleaved Image-Text 训练(如 Idefics, GPT-4V),否则慎用。
- Chain-of-Thought (CoT):
- Prompt: “Let’s think step by step.”
- 适用:数学计算(MathVista)、复杂推理(MMMU)。
- 不适用:简单的感知任务(如“这是什么颜色?”)。强行 CoT 会导致模型产生幻觉,编造推理过程。
3. 本章小结
- 警惕捷径:老旧数据集(VQAv2)可能测的是语言模型概率,而不是视觉能力。
- 拥抱循环:MMBench 的循环评估(Circular Eval)是目前消除随机猜测和位置偏差的黄金标准。
- 区分能力:MME 适合快速诊断感知/认知短板;MMVet 适合评估综合应用能力;VizWiz 适合评估拒答和鲁棒性。
- 评测是一门艺术:不仅要看总分,还要看 Prompt 策略(Zero-shot vs CoT)和解析方式(Regex vs LLM Judge)。
4. 练习题
基础题 (50%):概念巩固
Q1: 语言偏差 (Language Bias)
你训练了一个 VLM,在 VQAv2 上准确率达到了 80%,但在实际测试中,无论你给它看什么颜色的草地图片,问“草是什么颜色?”,它都回答“绿色”。
- 请解释为什么会发生这种情况?
- 如果你要构建一个新的验证集来揭露这个问题,你应该包含什么样的图片?
点击展开答案与提示
* **提示**:想想“反常识”的数据。
* **答案**:
1. **原因**:模型学习到了训练数据中“草”和“绿色”之间极强的文本统计关联(Prior),从而忽略了视觉信号。这被称为语言先验偏差。
2. **验证集构建**:包含“枯黄的草”、“被雪覆盖的白草”、“人工染色的红草”等图片。这类样本被称为 **Counter-Intuitive(反直觉)** 样本或 **Out-of-Distribution(分布外)** 样本。
Q2: 循环评估 (Circular Eval)
在 MMBench 中,一个模型在某道 4 选项题目上进行了 4 次轮转测试。
第一次:选对;第二次:选错;第三次:选对;第四次:选对。
请问该模型这道题得分为多少?为什么这样设计?
点击展开答案与提示
* **提示**:MMBench 的核心是“稳健”。
* **答案**:**得分是 0 分**。
* MMBench 要求 All-pass(全通过)或者极高比例的通过才能判定为“真懂”。只要有一次在选项打乱后选错,就说明模型对该知识点的掌握是不稳定的,或者受到了位置偏差的影响。
Q3: 幻觉与 VizWiz
为什么在 VizWiz 数据集上评估模型时,普通的 Accuracy 指标可能会误导开发者?
点击展开答案与提示
* **提示**:VizWiz 里有很多问题是根本无法回答的。
* **答案**:VizWiz 包含大量“Unanswerable”的问题。如果模型倾向于“不懂装懂”(幻觉严重),它可能会强行编造答案。如果评测集里可回答的问题占多数,单纯的 Accuracy 无法反映出模型在不可回答问题上的灾难性表现。更合适的指标应该区分 Answerable Accuracy 和 Unanswerable Precision。
挑战题 (50%):深度思考
Q4: 评测的“不可能性”
你正在使用 MMVet 进行评测,使用 Llama-3-70B 作为 Judge。你发现你的小模型(7B)的分数异常高,甚至超过了 GPT-4V。经过检查,你发现你的小模型倾向于输出非常冗长的解释,而 GPT-4V 输出很简洁。
这揭示了 LLM-based Evaluation 的什么缺陷?如何缓解?
点击展开答案与提示
* **提示**:LLM 也是有偏好的,它喜欢“看起来很厉害”的长文本。
* **答案**:
* **缺陷**:**Verbosity Bias(冗长偏差)**。作为裁判的 LLM 往往倾向于给更长、更复杂的回答打高分,即使内容的准确度并不比简洁回答高。
* **缓解**:
1. 在 Judge Prompt 中明确约束:强制要求裁判关注关键事实(Factuality)而非长度。
2. Reference-guided Evaluation:提供标准的简短参考答案,要求裁判计算与参考答案的语义重叠度。
3. 使用 Pairwise Comparison:让裁判同时看长短两个回答,并在 Prompt 中警告不要偏向长文本。
Q5: CoT 的反作用
在 MME 的“存在性判断”(Existence)任务中(例如:图里有狗吗?Yes/No),使用 Chain-of-Thought (CoT) Prompt 往往会导致分数下降。请从 Transformer 的解码机制和任务性质角度分析原因。
点击展开答案与提示
* **提示**:简单任务需要直觉。解释越多,错误概率累积越高。
* **答案**:
1. **过度推理(Over-reasoning)**:对于简单的感知任务,视觉特征是直接且明显的。强制模型输出“Let's think step by step... 首先我看左上角,然后看...”增加了序列长度。
2. **错误累积(Error Propagation)**:在生成推理链的过程中,一旦模型产生了一点点微小的幻觉(比如看错了一个像素块),这个错误会被后续的 token 生成放大,最终导致结论错误。
3. **形式不匹配**:Yes/No 任务需要的是判别式输出,CoT 强行将其转为生成式推理,增加了不确定性。
Q6: 数据污染侦探
你拿到一个新的开源 VLM,它在 MMMU(高难度多学科基准)上的 Zero-shot 分数高得离谱。你怀疑它的训练数据污染了测试集。除了直接搜索训练数据(假设不可得),你可以设计什么实验来验证你的猜想?
点击展开答案与提示
* **提示**:记忆是僵化的,理解是灵活的。
* **答案**:
1. **Paraphrasing(问题重述)**:微调问题的措辞,保持语义不变但改变句式。如果模型依靠“背题”,分数会剧烈下降。
2. **Visual Perturbation(视觉扰动)**:对图像做轻微的裁剪、旋转或像素攻击。真正的理解具有鲁棒性,而过拟合记忆对像素级变化非常敏感。
3. **Option Shuffling(选项打乱)**:类似于 MMBench,如果模型记住了“选 C”,打乱后它可能还是选 C 位置的错误答案。
4. **Language Check**:如果题目是英文,用中文问一遍。如果模型没学过跨语言对齐但答对了,说明它可能只记住了原题的英文 Token 序列。
5. 常见陷阱与错误 (Gotchas)
1. 提取器的正则表达式噩梦
- 场景:模型输出了 “The answer is likely A.”,但你的提取脚本写的是
prediction = output[0]。
- 后果:脚本提取到了 “T”,导致判错。
- 调试:在评测代码中,永远不要假设模型只输出一个字符。
- Bad:
return response[0]
- Good: 使用复杂的正则
re.findall(r"([A-D])", response) 并取最后一个匹配项(通常结论在最后),或者使用专门的 Rule-based Parser。
2. 图像分辨率的静默杀手
- 场景:你在评测 ChartQA(图表)或 DocVQA(文档)。模型在 demo 里能看清小字,但在批量评测时全错。
- 原因:许多评测框架(如 VLMEvalKit 或自定义脚本)默认会将图像 Resize 到 224x224 或 336x336。对于包含密集文本的文档图,这相当于把文字“马赛克化”了。
- 对策:检查评测配置中的
image_resolution。对于文档/图表任务,必须开启动态分辨率(AnyRes / HighRes)或切片策略。
3. 系统提示词(System Prompt)的干扰
- 场景:模型在训练时使用了特定的 System Prompt(如 “You are a helpful assistant…“),但在评测时你没有加,或者加了不一样的。
- 后果:模型可能处于“分布外”状态,导致拒绝回答或格式混乱。
- 对策:严格复现训练时的对话模板(Chat Template)。这比调整 Temperature 更重要。
4. 显存优化导致的精度损失
- 场景:为了跑得快,你把模型量化到了 4-bit (INT4)。
- 后果:对于文字识别(OCR)等对细节敏感的任务,量化可能会导致字符级错误(比如把 “8” 看成 “3”),从而导致 OCRBench 或 MathVista 分数暴跌。
- Rule of Thumb:评测 Benchmark 时,尽量使用 FP16 或 BF16。如果必须量化,先在一个小数据集上验证精度损失。