标准回答
整体流程
VQA 给定一张图像和一个自然语言问题,要求输出答案。标准流水线分三步:
- 图像编码:用 CNN 或 ViT 提取视觉特征(区域特征或网格/patch 特征)。
- 问题编码:用 RNN 或 Transformer 把问题编码为文本表示。
- 多模态融合:把两路特征对齐融合,再预测答案。
融合是核心
简单方法是拼接、逐元素相乘或双线性池化。主流做法是交叉注意力:让问题 token 去 attend 图像区域,定位与问题相关的视觉证据(视觉接地),从而回答「图中红色物体是什么」这类问题。
答案输出两条路线
- 分类式:把答案当作固定词表上的分类,softmax 选最可能答案,简单高效但答案受限。
- 生成式:用解码器自由生成文本,灵活、可应对开放式问题,是当前 VLM(如 LLaVA、BLIP-2)的主流。
常见误区
⚠️ 常见踩坑
VQA 不是简单图文检索;它需要跨模态推理与定位。分类式 VQA 受答案词表限制,开放式问题需用生成式。
追问
追问 1:为什么交叉注意力比简单拼接更适合 VQA?
拼接是把全局图像向量和问题向量粗暴合并,丢失空间信息,难以回答涉及局部区域的问题。交叉注意力让每个问题 token 动态加权图像各区域,定位到问题真正关心的部位(视觉接地),对计数、空间关系、属性识别等细粒度问题显著更好。
追问 2:VQA 模型如何缓解「只靠语言先验猜答案」的问题?
VQA 数据存在语言偏置(如问「香蕉什么颜色」总答黄色,不看图也对)。缓解手段:用平衡数据集(VQA v2 为每个问题配相反答案的图像)、加强视觉接地、引入对抗去偏或因果干预,迫使模型真正依赖图像而非问题文本统计规律。
延伸学习
与本题相关的知识库文章、术语、工具与行业资讯。