Chapter 2:图像综合理解与通用 VQA 基准

1. 开篇段落:从“看图说话”到“视觉推理”

在多模态大模型(MLLM)的评估体系中,通用视觉问答(General VQA) 处于金字塔的基座位置。它不局限于某一类特定任务(如单纯的 OCR 或 图表分析),而是模拟人类在面对一张陌生图像时,调用综合知识进行理解、推理和表达的过程。

本章的学习目标是让你具备“鉴赏”和“诊断”基准的能力:

  1. 历史的镜像:通过 VQAv2 和 GQA 理解数据集偏差(Bias)是如何误导模型评估的。
  2. 现代基准的内核:深度解析 MMBench 的循环评估(Circular Eval)机制、MMVet 的能力交集理论,以及 MME 的二元诊断法。
  3. 评测实战方法论:掌握 Zero-shot 与 Chain-of-Thought (CoT) 在视觉任务中的适用边界。
  4. 结果解读:如何透过 Top-1 Accuracy 看到模型的真实缺陷(如幻觉、位置偏差)。

2. 文字论述

2.1 传统 VQA 的遗产:偏差与局限

在 Transformer 和 LLM 统治视觉领域之前,VQA 被视为一个“多分类问题”(从固定的 3000 个答案词表中选一个)。虽然现在的模型是生成式的(Generative),但经典数据集揭示了评估中永恒的难题:Shortcut Learning(捷径学习)

A. VQAv2:语言偏差的教科书

  • 内容:基于 COCO 数据集的自然图像问答。
  • 致命缺陷(Language Bias)
  • 模型发现训练集中 80% 的“什么颜色”问题答案都是“白色”或“黑色”,40% 的“是什么运动”答案是“网球”。
  • 后果:模型可以闭着眼睛(不看图),只看文本问题就能猜对一半的题。这被称为 Blind VQA

  • 现代启示:当你看到一个模型在 VQAv2 上分数很高,但在实际使用中总是“答非所问”,通常是因为它过拟合了数据的统计规律,而非真正理解了图像。

B. GQA:组合性推理(Compositionality)

  • 设计初衷:为了解决 VQAv2 的“猜答案”问题,GQA 基于场景图(Scene Graph)自动生成问题。
  • 核心能力:它强迫模型理解 关系(Relation)属性(Attribute) 的组合。
  • 普通问题:“那个人在干什么?”
  • GQA 问题:“那个穿着红色衬衫、站在桌子左边的男人,手里拿的是什么?”

  • Rule of Thumb:如果你的模型总是搞混物体之间的关系(例如把“骑在马上的人”识别成“站在马旁边的人”),GQA 是最好的诊断工具。

C. VizWiz:真实世界的混乱与拒答

  • 来源:由盲人用户通过手机拍摄并提问。
  • 独特性: 1. 图像质量极差:模糊、手指遮挡镜头、光照不足。 2. 不可回答(Unanswerable):这是 VizWiz 最伟大的贡献。很多时候图片是一片黑,用户问“这是什么药?”。模型必须学会说“我看不到”或“图片太模糊”,而不是产生幻觉瞎编一个药名。

D. CLEVR:逻辑的纯净室

  • 内容:简单的几何体(球、立方体、圆柱)合成图像。
  • 用途消融实验专用。如果模型在自然图像上推理很差,你不知道是视觉编码器(ViT)太弱看不清物体,还是语言模型(LLM)逻辑太差。CLEVR 视觉极简,如果这里也做不对,那就是逻辑推理模块的问题。

2.2 现代综合基准:为了评估 MLLM 而生

随着 LLM 的接入,模型不再受限于固定词表,评估的重点转向了长文本生成复杂推理鲁棒性

A. MMBench:反击“位置偏差”与“随机猜测”

MMBench 是目前 Leaderboard 上最流行的基准之一,它引入了 Circular Evaluation(循环评估) 机制。

  • 痛点:LLM 有严重的 Position Bias(位置偏差)。面对选项 A, B, C, D,模型可能天然倾向于选 A(因为出现在最前面)或 D(因为出现在最后)。
  • 机制: MMBench 会将同一道题问模型 次,每次都对选项进行轮转。

  • Round 1: A=苹果, B=香蕉. 模型选 A。

  • Round 2: A=香蕉, B=苹果. 模型必须选 B。

  • 评分标准:只有在所有轮次中,模型都指向同一个内容(例如都指向“苹果”),才算该题通过。这极大地增加了猜测的难度。

       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 关注“解决复杂问题往往需要多种能力的组合”。

  • 核心思想:现实任务不是孤立的。例如“看图表计算增长率”,既需要 OCR(识别数字),又需要 Math(计算公式)。
  • 评估方式
  • 不再是简单的 A/B/C 选项。
  • Open-ended Output:模型自由生成文本。
  • LLM-as-a-Judge:使用 GPT-4 提取模型回答中的关键信息(Key Information),与标准答案进行 Soft Match。

  • 优点:非常接近真实用户体验。

  • 缺点:评测成本高(需要调 GPT-4 API),且受限于裁判模型的偏好。

C. MME:感知与认知的快速体检

MME 是一套非常全面的“体检套餐”,包含 14 个子任务。

  • 设计哲学:所有问题设计为 "Yes/No" 格式。
  • 指标陷阱:为了防止模型全猜 "Yes",MME 引入了严格的指标:
  • Accuracy:单纯的准确率。
  • Accuracy + Recall:对于每一组图片(正样本+负样本),只有当模型把正样本答对(Yes)且负样本也答对(No)时,才得分。这比单纯 Accuracy 难得多。

  • 分类

  • Perception(感知):粗粒度物体、细粒度物体、OCR、颜色、存在性。
  • Cognition(认知):常识推理、数理逻辑、代码。

D. SEED-Bench:时间维度与规模

SEED-Bench 的特点是规模大(19K 题目)且包含视频理解。它在图像部分不仅考查静态理解,还特别设计了 Instance Interaction(物体交互)类别,考察模型对动作和状态的理解。

2.3 评测策略:Zero-shot, Few-shot 与 CoT

在实际评测中,Prompt 的写法决定了生与死。

  1. Zero-shot(零样本): * Prompt: "Answer the question based on the image." * 适用:这是目前 VLM 评测的标准配置(Standard Setting)。最能反映模型的 Base 能力。 * 注意:大部分 Leaderboard 分数都是 Zero-shot。

  2. 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),否则慎用。

  3. Chain-of-Thought (CoT): * Prompt: "Let's think step by step." * 适用:数学计算(MathVista)、复杂推理(MMMU)。 * 不适用:简单的感知任务(如“这是什么颜色?”)。强行 CoT 会导致模型产生幻觉,编造推理过程。


3. 本章小结

  1. 警惕捷径:老旧数据集(VQAv2)可能测的是语言模型概率,而不是视觉能力。
  2. 拥抱循环MMBench 的循环评估(Circular Eval)是目前消除随机猜测和位置偏差的黄金标准。
  3. 区分能力MME 适合快速诊断感知/认知短板;MMVet 适合评估综合应用能力;VizWiz 适合评估拒答和鲁棒性。
  4. 评测是一门艺术:不仅要看总分,还要看 Prompt 策略(Zero-shot vs CoT)和解析方式(Regex vs LLM Judge)。

4. 练习题

基础题 (50%):概念巩固

Q1: 语言偏差 (Language Bias) 你训练了一个 VLM,在 VQAv2 上准确率达到了 80%,但在实际测试中,无论你给它看什么颜色的草地图片,问“草是什么颜色?”,它都回答“绿色”。

  1. 请解释为什么会发生这种情况?
  2. 如果你要构建一个新的验证集来揭露这个问题,你应该包含什么样的图片?
点击展开答案与提示
  • 提示:想想“反常识”的数据。
  • 答案: 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。如果必须量化,先在一个小数据集上验证精度损失。