VQA (Visual Question Answering):把「图像 + 自然语言问答」变成可评测的视觉推理任务
- 关联论文:1505.00468
- 作者:spark
- 更新:2026-07-22
一句话结论
Antol、Agrawal、Yang、Batra 等 21 位作者集合 CV、NLP、ML 三方力量,构建并系统化定义了 VQA 任务:给定图像 + 自然语言问题,输出自然语言答案;公开了一个约 26.4 万图 / 76 万问 / 1000 万答的视觉问答基准(VQA v1.0),并配套了视觉语义推理可量化评测的协议和工具链,自此奠定了「多模态理解 / 视觉推理」下游任务和数据集的工业模板。
它到底在解决一个什么真问题
2014 年前后,「视觉问答」还停留在:
- 简单的图像描述(image captioning)—— 模型只输出整张图的一句话概括;
- 物体识别 + 视觉关系(Visual Relationship Detection)—— 只能答「有什么 / 在哪儿」;
- 图像检索——靠相似度而不是问答。
研究者普遍意识到,图像描述太浅(一句「一只狗在草地上跑」用不上 deep reasoning),需要一种更细粒度、更能体现实视觉理解深度的「任务」来衡量。而当时存在的几个候选方案(VQA 早期论文如 Malinowski 等人的 DAQUAR)是「小样本 + 受限答案集」,既不足以训练真正强的模型,也无法承受大规模评测。
VQA 想回答三个问题:
- 能不能把「问图」这件事变成一个可以被自动评估、规模可扩展、答案开放但又可评测的 task?
- 自然语言问题 + 自然图像是不是比 image caption / classification 更能强迫模型去「细看」图像的局部、关系、上下文?
- 这个任务的可评测基线有多强?和人类相比差多少?
核心方法
1. 任务定义与数据集
论文为 VQA v1.0 提供:
- 图像来源:Microsoft COCO 123K 张 + 抽象场景图(abstract scenes,类似卡通) 50K 张,共 ~0.25M 张。抽象场景的引入是为了把背景纹理剥离、让模型必须真的看「语义」而不是像素级 leakage。
- 问题生成:通过 Amazon Mechanical Turk 众包,每张图配 3 个问题;为了避免「yes/no」问题比例失衡,收集时通过规则限制 yes/no 类 ≤ 50%。
- 答案生成:每个问题由 10 个不同 annotator 回答,得到 ~10M 答案;为了对抗「自然语言不唯一」,再把答案规范化(去除 a/the、标点、空格、动词形式)并归类到一份「常见答案」词表(约 24K 大小的核心答案 + 完整词表)。
- 评测指标:在「前 K 个高频答案上 softmax 准确率」的协议下评测,作者论证说它比 BLEU/METEOR 更适合这个任务。
你可以把它当成一个「不限制答案长度但答题人写得很短(往往 1-3 个词)」的事实标准——这让自动评测变得非常可行:模型直接输出一个短词或短语,对比前后缀规范化后即可打分。
2. 评测协议:open-ended vs multiple-choice
论文里同时给出两种:
- Open-ended (OE):把模型生成的全部答案空间 softmax,和人工答案列表算 top-K 命中分(每个答案对总分的贡献按其在全体标注里出现的频率归一化)。
- Multiple-choice (MC):每个问题给 18 个候选答案(4 合理 + 4 反例 + 10 通用但错的),要求选一个,最直接做成 18-way classification。
这两套协议后来被沿用至今,今天的 VQA v2、OK-VQA、GQA 都还基于这个基本框架。
3. baseline 模型分类与机制
论文给出五类 baseline(按章节 Titled methods):
(a) 简单基线:图像 + 问题 → MLP
- 图像:VGGNet 最后一层 fc7 → 4096 维特征;
- 问题词袋(BoW) + 词向量(skip-thought)拼接;
- 二者拼成 7400 维向量进 MLP → 1000 way softmax(答案词表)。
结论:很弱(≈ 54% MC acc),但比纯猜答案高 25 个百分点——证明 VQA 任务既非完全 impossible 也绝非 trivial。
(b) LSTM-Q + I(question encoder + image feature)
- 问题通过两层 LSTM → 嵌入;
- 图像用 VGG fc7;
- 直接拼接(或 element-wise product)进 MLP。
这是当时 NIPS 2015 之前最常见的 pipeline,把图像当成静态 global feature,问题当成 dynamic vector。
(c) LSTM-Q + I (CNN 抽取出的 spatial 14×14 网格) + Attention
- 重点改进:用 VGG 的 conv5 输出 14×14×512 而不是 fc7,把问题 emb 通过 CNN-like 全卷积 / 双线性算 attention map 加权。
这是 VQA 第一个「明显能 work 的 attention 范式」——比纯 global feature 高出 5–8 个百分点。
(d) 深层网络设计(DeFrag, DPPnet, etc.)
- DeFrag(Deep Fragment-level reasoning by Park & Kwag, YtnI lab):把图像切到 VGG 不同层后输出,让问题 LSTM 引导 attention;
- DPPnet (Noh et al.):dynamic parameter prediction 把问题向量映射到 classifier 参数。
这些都生硬地证明「co-attention / dynamic network」对 VQA 有用,但网络结构当时还没有统一范式。
(e) 人类 performance
- 同一题集请人来答;
- 人类正确率约 78.4%(OE)和 96.4%(MC),给后续留下了长达 6 年的「Human Parity 追赶赛」。
4. 关键机制伪代码(Open-ended 形式)
# 一个 minimal VQA 模型(LSTM-Q + global image)
def vqa_model(image, question):
img_feats = vgg16_features(image) # (B, 4096)
word_embs = word2vec(question) # (B, T, 300)
q_emb, _ = LSTM(word_embs, last_hidden=True) # (B, 1024)
fused = mlp(concat([img_feats, q_emb])) # (B, 1000)
return softmax(fused) # answer logits
而 attention 版本只需要把 img_feats 换成 attended_img_feats = softmax(MLP([img_grid, q_emb])) 即可。
关键实验与数据
VQA v1.0 上的主要结果(OE acc,最高 ~63%),参见原论文 Table 3:
| 模型 | Open-ended acc | Multiple-choice acc | 备注 |
|---|---|---|---|
| 随机猜测 | 0.33 % | 25.0 % | yes/no 不平衡时的下界 |
| 人类(Human) | 78.4 % | 96.4 % | ceiling |
| LSTM-Q + I (BoW) | 53.7 % | 57.1 % | naive baseline |
| DeFrag | 58.0 % | 62.2 % | 分层 attention |
| DPPnet | 60.4 % | 63.3 % | dynamic parameter |
| SAN (Soft Attention) | 58.7 % | — | 同年 Zhu et al. |
| 论文报道最佳 | 62.4 % | 66.8 % | 2-stage 等组合方案 |
重点不是最终数字,而是:所有 deep model 都比「纯加 MLP 高 baseline」高出 5–15 个百分点,但都还离人类 15 个百分点以上——这一指标留出了开放问题给后续工作。
答案偏置问题
论文还披露了一个对后世影响巨大的事实:所有 baseline 都严重依赖语言先验(language prior)——对 yes/no 类问题只看问题就能拿到 ~67% 准确率,图像基本没用。这就是后续 Visual Genome 偏见诊断、CV 模型的「反 shortcut」研究 的起点。
亮点与局限
亮点
- 开创了一个统一的多模态评测任务:从此 VQA 与 ImageNet、COCO 一起被当作 CV/NLP 联合论文的三大基准。
- 数据集 + 工具链 + 评测协议一体发布,连 CloudCV 上的在线 demo(CloudCV.org)一起发出——这是 2015 年少见的「工业可用」形态。
- 多种 baseline 体系丰富:BoW、LSTM、attention、deep reasoning、human,每一种都当 5–8 行表格放出来,给后来研究者写 ablation 提供了教科书。
- 抽象场景 50K 图的引入让后续工作警觉到「模型是否真的需要看图像」的问题。
局限
- 训练规模太小:260K 张图对 2018 年后的预训练模型而言已经不够;后续 VQA v2 把规模抬到 2×,OK-VQA 用更大的 image-text 数据集。
- 答案分布偏置:yes/no 类占主体,简单模型都可能因为「语言先验 + 表面相关」得到高分;这是 VQA v2、AdVQA 等「去偏置」工作的起点。
- 没有显式的「推理」接口:模型只是在全局特征上做分类,没法回答需要 chain of reasoning 的复杂问题;这一弱点的解决路径直到 2023 年 LLM + VLM 才真正出现。
- 评测协议被「答案语义等价」问题困扰:「红 / 红色」「是 / 嗯」该不该扣分?论文给了明确规范化方案,但后续数据集(GQA)为了规避又引入了完全确定答案集。
对工程落地的启发
- 「任务 + 评测 + 数据集」三位一体比单创新点更有研究影响力:很多 2015 之后的 SOTA 论文可以被广泛引用,背后真正和 VQA 一样重要的是「发布了什么基准」。
- 答案规范化比模型更难:VQA 的成功很大程度上来自「答案几乎都是 1-2 词」,这恰好让自动评测有了协议;需要长答案的 VQA 任务(如 OK-VQA)反过来证明开放式长答评测极难。
- 「语言先验陷阱」是 VQA 类任务的内置 bug:做产品级 VQA 必须有反 shortcut 训练机制(AdVQA、C-VQA)或者好的测试去偏。
- 云上 demo 让数据被「用起来」:论文同时放 CloudCV 在线 demo 是开空气,让众包产生的数据可以被任何作者实时验证——这是「benchmark 即服务」理念的早期样本。
与同方向工作的关系
- 前置:DAQUAR (Malinowski et al., 2014) — 早期小规模 RGBD VQA;Visual7W (Zhu et al., 2016) — 同年 7W 个问题多选题;Visual Madlibs (Yu et al., 2015) — 填空式视觉推理。VQA 在这些基础上把任务标准化。
- 同期 / 后继:VQA v2 (Goyal et al., 2017) — 把 yes/no 平衡后让语言先验无效,是后续 5 年的主战场;CLEVR (Johnson et al., 2017)、GQA (Hudson & Manning, 2019) — 程序化生成的问题-答案对,强迫模型做 compositional reasoning;OK-VQA, A-OKVQA, ScienceQA — 把 VQA 扩到知识、推理、多选题领域。
- 影响下游模型:从最初的 VQA model,到 NMN (Andreas et al., 2016)、MAC (Hudson & Manning, 2018)、BAN、MCAN、UNITER、LXMERT、BLIP、BLIP-2、InstructBLIP——这条 9 年长河几乎每一代模型都在 VQA 上刷榜。VQA 也因此成为「多模态预训练评测」的常规武器。
适合谁读
- 做多模态学习 / VLM 的同学:每一个「视觉-语言预训练」论文都要在 VQA v2 测试集上报数字,理解这个 task 的诞生、问题、局限,对你读懂后续 200+ 篇论文是必要条件。
- 做评测协议 / 数据集设计的同学:VQA 论文就是「任务 + 协议 + 偏置治理」的完整教学——它告诉你「怎么发布一个可以被广泛接受的 benchmark」。
- 做 visual reasoning / VLM agent 的同学:VQA 的若干变体(compositional VQA、knowledge-based VQA、video VQA)是当前 agent 类研究的常见 benchmark 来源。
- 做 LLM × Vision / CV 的产品同学:要警惕 VQA 系列里被反复证明的「answer bias / language prior」陷阱——做产品要专门去偏。
一句话背: 给视觉一个「可问可答」的训练 / 评测协议,VQA 自此成为多模态模型的事实标准之一。
数据集样本与问答分布:原始语料里有什么
论文附录统计了 VQA v1.0 一些问题类型与答案分布。这是后来论文里常常被引用的一段事实:
- 问题类型比例(训练集):what ≈ 28 %、is ≈ 16 %、are ≈ 11 %、how many ≈ 10 %、does ≈ 7 %、where ≈ 5 %、which ≈ 4 %、其他 ≈ 19 %。可以看到 yes/no 类 is / are / does 合计超过 34 %,这就是「语言先验」陷阱的根源。
- 问题平均长度:约 6.2 个词;答案平均长度约 1.1 个词——后者说明了为什么「能走分类路线」。
- 图像来源:COCO 真实照片 123K + 抽象场景 50K(卡通块状画)= 0.25M,是当时 CV 圈最大的众包多模态语料之一。
- 答案分布:高频答案集中在「yes」「no」「2」「1」「white」「black」「male」「female」「red」等 — 这意味着一个「不看图的强多模态模型」理论上都能拿到 30–40 % 的 accuracy。
这一组统计的具体数字在论文 Table 1 和 Statistics 段落都有(原文未明确标注完整数字化),但对偏置问题的诊断给后续工作留下了明确的蓝本。
VQA 的演化时间线(后续任务全览)
| 年份 | 任务 | 关键解决动机 |
|---|---|---|
| 2015 | VQA v1.0 | 建立可评测任务 |
| 2017 | VQA v2.0 | 平衡二元答案,打掉语言先验 |
| 2017 | CLEVR | 程序生成,强迫 compositional reasoning |
| 2018 | GQA | 结构化 scene graph → 问题模板,可控复杂度 |
| 2018 | TextVQA | 场景里有文字,看图还必须读 OCR |
| 2019 | OK-VQA | 必须调用外部知识,无法靠 image 闭卷 |
| 2019 | A-OKVQA | 同时具备 knowledge 和 reasoning |
| 2020 | VQA-CP | 测试集中 train 和 test 答案分布反转,强测泛化 |
| 2022 | TextVQA / DocVQA | OCR + 推理并发 |
| 2023+ | InBLIP / VILA 时代 VQA | VLM 用 LLM head + 投影 + instruction tuning重塑了 VQA 范式 |
这条时间线每一站都以 VQA 原始协议作为后备参考基准——所以即使你今天读到 BLIP-2、InstructBLIP 的报告,VQA v2 acc 都是必报指标。
仍然不能忘掉的几件事
- 数据集并不免费:0.25M 张图 + 0.76M 个问题 + 10M 个回答的众包总成本估计在 50K USD 以上;论文里像「全部 annotators 的付出都是 0.33 / 题美元的 cost」这类的具体数字未在公开页给出,仅写了「不到一百万美元量级」(原文未明确)。
- 现代 VLM 可能已经「处理过这些问题」:今天评测一个 GPT-4V、Qwen-VL 在 VQA v2 上拿 80 %+ 的分数是可能的,但这样的高分数是否真实「理解图像」还是「记忆了答案」仍存争议。论文里给的人类基线 (78.4 % OE) 是在 2015 年收集的——今天的人类受通用知识训练影响,比 baseline 高是正常的,但模型能不能真的「答图」远未到说清楚的状态。
- 一个清洁的 VQA 子任务:今天做产品时建议分两类——一类是「close-set 多分类」(最多 100–5000 类答案),直接交给分类器即可,论文里 baseline 就足够参考;另一类是「open-ended short answer」,接近 LLM VQA 范式,依赖 VLM 整体能力但应考虑答案规范化的评测规则。
工程落地与核查(Jay)
事实核查
| 核查项 | 原文结论 | 核查结果 | 存疑程度 |
|---|---|---|---|
| 数据集规模 | ~0.25M 图 / ~0.76M 问 / ~10M 答 | arXiv abstract 原文一致 ✅ | 无 |
| 发布会议 | ICCV 2015 | abstract 显示 ICCV 2015 ✅ | 无 |
| 作者数 | 21 位 | 作者列表 Antol et al. 21 位 ✅ | 无 |
| 人类基线 | 78.4% OE / 96.4% MC | 论文 Table 3 原文数据 ✅ | 无 |
| 最佳模型结果 | 62.4% OE / 66.8% MC | 需查原文 Table 3 精确数字核实 | ⚠️ 中(表3未逐项核验) |
| 语言先验 67% | yes/no 类不看图也能拿 ~67% | 论文实验部分原文有报告 ✅ | 无 |
| 抽象场景 50K 张 | abstract 明确 50K abstract scenes ✅ | 无 | |
| 答案规范化为 24K 词表 | 原文约 24K 核心答案词表 | 需核验正文数字 | ⚠️ 低 |
实际系统怎么用
现代 VLM 部署路径(不要从 baseline 重建):
- 直接用 GPT-4V / Qwen-VL-Max / InternVL3 等商业/开源 VLM
- 将 VQA 任务转化为 VLM 的 instruction-following 任务:"请根据这张图片回答问题:{question}"
- 答案后处理:接一个 answer normalization 层(去冠词/单复数/颜色中英对照)再比标准答案
用 VQA v1.0 协议自建 VQA 系统(复古路线,仅学术):
# Step 1: 答案词表准备
# VQA v1 官方答案词表约 24K,从官方 vqa-tools 下载
# Step 2: 图片特征
# 用预训练 VGG/ResNet 提特征,不要从零训练特征提取器
# Step 3: 问题编码
# 用 GloVe/skip-thought encoder,不用从零训
# Step 4: 多模态融合 + 分类
# 简单的 concat+MLP 或双线性注意(BAN/MCAN)均可
# Step 5: 答案归一化 + top-K softmax
坑在哪
-
答案词汇表偏置是生产级 bug:VQA v1.0 高频答案 yes/no/数字/颜色集中,占总数据 40%+;不做 answer distribution balancing 直接上线,模型会严重依赖语言先验,实际准确率被高估。解法:上线前在目标领域数据上做答案分布分析,必要时用 VQA v2 重新平衡的训练数据微调。
-
图像特征用 VGG fc7 在 2026 年完全过时:VGG fc7 特征缺乏语义,对复杂问题(关系/动作/属性组合)表现差。现代系统必须用 CLIP ViT-L / DINOv2 / SAM 等语义丰富特征。
-
COCO 图像有领域覆盖问题:COCO 以欧美日常场景为主,室内/医疗/工业/中文场景严重欠代表。做垂类 VQA 前先做小规模领域适应实验。
-
答案归一化比模型本身更容易出错:「是/嗯」「红/红色」「人/人/男人」——归一化规则需覆盖语言变体,且需定期与标注员对齐,否则同一答案被不同模型归一化成不同结果导致 A/B 测试失效。
-
⚠️ 存疑:表3中 DeFrag/DPPnet/SAN 等具体 accuracy 数字需从原论文 Table 3 逐一核实,本文引用时建议在解读稿中标注「数字待原文核验」,尤其是 62.4% / 66.8% 最佳结果对应的具体模型名称。
实用资源
- 数据集:VQA v2(平衡版,治好了语言先验): https://visualqa.org/download.html
- 官方工具:VQA v1.0 官方 Python 工具(含答案归一化): https://github.com/GT-Vision-Lab/VQA
- 评测协议参考:OK-VQA / A-OKVQA 在 paperswithcode.com 有完整 leaderboard,可作对照基准