Skip to content

视觉问答与图像描述

视觉问答(Visual Question Answering, VQA)是指给定一张图片和一个自然语言问题,模型输出正确答案的多模态任务。它要求模型同时”看懂”图像、“读懂”问题,并跨模态推理得出答案——是衡量多模态理解能力的核心任务。随着 GPT-4V、Gemini、Claude 3.5 等原生多模态大模型(Multimodal LLM, MLLM)的崛起,VQA 已从专门的模型架构演变为大模型的”内置能力”。本页同时涵盖与 VQA 密切相关的图像描述(Image Captioning),后者可视为”问题固定为’描述这张图‘“的特例;详细的描述生成技术见图像描述生成。前置阅读:CNN 主线、Transformer 架构、视觉Transformer ViT。

把 VQA 想象成”带着照片参加考试”:

  • 看图(视觉编码器)= 眼睛扫照片,提取出关键信息:照片里有猫、沙发、窗户、阳光。
  • 读题(文本编码器)= 理解问题的意图:“照片里什么动物坐在什么上面?”
  • 跨模态融合(模态交互)= 把”猫""沙发”的视觉特征和”动物""坐""上面”的语言概念对齐、关联起来。
  • 答题(答案解码)= 综合对齐后的信息,输出”猫坐在沙发上”。

图像描述就是问了一个固定问题:“请描述这张图里有什么”——然后把答案扩展成完整句子。

从专用模型到原生多模态大模型

Section titled “从专用模型到原生多模态大模型”

2022 年之前,VQA 需要专门设计的模型(视觉编码器 + 文本编码器 + 融合层 + 分类/解码头)。2023 年后,GPT-4V、Gemini、Qwen-VL 等原生多模态大模型(MLLM)将 VQA 变成了通用对话的一个子任务——直接把图片和问题一起发给模型,模型像人一样”看图回答”。

这种范式转变的核心是大语言模型的通用推理能力——当 LLM 足够强大时,只需要把图像信息”翻译”到 LLM 能理解的 token 空间,LLM 自身的推理和语言能力就可以完成 VQA 任务,无需专门的融合架构。

经典 VQA 模型包含三个模块:

  1. 视觉编码器:提取图像特征。早期用 CNN(如 ResNet、VGG),现在主流用 ViT 或 CLIP 的视觉编码器。输出为图像特征向量或一组 patch token。
  2. 文本编码器:编码问题文本。早期用 LSTM/GRU,现在用 Transformer 编码器或预训练语言模型(如 BERT)。
  3. 多模态融合 + 答案输出:将视觉特征和文本特征融合,经分类头或解码器输出答案。

融合层是 VQA 的核心。给定视觉特征 V∈Rm×dV \in \mathbb{R}^{m \times d}(mm 个视觉 token)和文本特征 T∈Rn×dT \in \mathbb{R}^{n \times d}(nn 个文本 token),融合方法经历了从简单到复杂的演进:

  • 逐元素乘法(Hadamard Product):F=Vglobal⊙TglobalF = V_{\text{global}} \odot T_{\text{global}},其中 ⊙\odot 是逐元素相乘。要求视觉和文本特征都是全局向量(同维度)。
  • 拼接 + MLP:F=MLP([Vglobal;Tglobal])F = \text{MLP}([V_{\text{global}}; T_{\text{global}}]),将两个向量拼接后过全连接。

直觉:逐元素乘法像”匹配”——视觉特征和文本特征的每个维度相乘,匹配上的维度值变大。这类似于向量空间中找”共鸣”。

第二代:跨注意力融合(2019-2021)

Section titled “第二代:跨注意力融合(2019-2021)”

跨注意力(Cross-Attention)让文本 token 作为 Query 去查询视觉 token:

Cross-Attn(Qtext,Kvisual,Vvisual)=softmax(QtextKvisualTd)Vvisual\text{Cross-Attn}(Q_{\text{text}}, K_{\text{visual}}, V_{\text{visual}}) = \text{softmax}\left(\frac{Q_{\text{text}} K_{\text{visual}}^T}{\sqrt{d}}\right) V_{\text{visual}}

这样模型可以学到”问题中的’动物’对应图像中的哪个区域”——即实现了语义级的视觉定位。

第三代:投影到大语言模型空间(2022 至今)

Section titled “第三代:投影到大语言模型空间(2022 至今)”

BLIP-2 和 LLaVA 的核心创新不是融合方法,而是如何高效地将视觉特征注入大语言模型:

  • LLaVA:用 MLP 将 ViT 的 patch token 直接投影到 LLM 的词嵌入空间,然后作为”视觉 token”拼接到文本 token 前面: Hvisual=MLP(Vpatch),input=[Hvisual;Htext]H_{\text{visual}} = \text{MLP}(V_{\text{patch}}), \quad \text{input} = [H_{\text{visual}}; H_{\text{text}}] LLM 像处理普通文本一样处理混合序列——这就是”把图像变成 LLM 能读的词”。

  • BLIP-2 Q-Former:用一组可学习的 Query Token(通常 32 个)通过跨注意力从冻结的 ViT 中提取与语言最相关的视觉信息。相当于”用 32 个向量总结整张图”。

VQA 的答案输出有两种范式:

  • 分类式:把答案视为预定义的候选集(如 VQA v2 数据集中最常见的 3129 个答案),训练一个分类头。优点是训练简单、精度高;缺点是答案集封闭,无法回答开放式问题。
  • 生成式:用序列解码器(如 Transformer decoder)逐 token 生成答案文本。优点是开放式、灵活;缺点是训练难度更大、需要更多数据。现代多模态大模型(BLIP-2、LLaVA、GPT-4V)采用生成式。

VQA 不是单一任务,而是多种推理能力的综合:

类型示例所需能力
感知“图中有几只猫?”物体检测 + 计数
属性识别“猫是什么颜色?”细粒度视觉理解
空间关系“猫在沙发上面还是下面?”空间推理
常识推理“这个人在做什么?为什么?”视觉 + 常识知识
文本阅读(OCR)“招牌上写了什么?”文本检测与识别
多步推理“如果把这个杯子倒过来,水会怎样?”物理/逻辑推理
知识关联“这是哪个国家的国旗?”视觉 + 世界知识

GPT-4V 级别的模型在感知和 OCR 上已接近人类水平,但在复杂多步推理和空间推理上仍有明显短板——这是 2024-2025 年多模态研究的重点突破方向。

  • 第一代(2015-2018):CNN 提取图像全局特征向量,LSTM 编码问题,两者拼接或逐元素乘后过 MLP 分类。代表:SAN(Stacked Attention Network)、BUTD(Bottom-Up Top-Down Attention,用 Faster R-CNN 检测物体作为视觉特征)。
  • 第二代(2019-2021):引入 Transformer 的跨注意力机制,视觉和文本 token 级别交互。代表:LXMERT、VL-BERT、UNITER、ViLT。这些模型在大规模图文对数据上预训练(如掩码语言/区域建模、图文匹配),再在 VQA 上微调。
  • 第三代(2022 至今):大语言模型时代。用预训练 LLM 作为推理引擎,通过跨注意力或投影层注入视觉特征。代表:BLIP-2(Q-Former 桥接 ViT 和 LLM)、LLaVA(MLP 投影 ViT 特征到 LLM 空间)、Qwen-VL、InternVL。这些模型支持开放式 VQA、多轮对话、复杂推理。

BLIP-2(Li et al., ICML 2023)的核心是 Q-Former——一个轻量的 Transformer,用一组可学习的 query token(通常 32 个)从冻结的 ViT 中提取与语言最相关的视觉信息,再喂给冻结的 LLM。这种”两阶段冻结 + 轻量桥接”策略大幅降低了训练成本(只训练 Q-Former 和少量投影层),同时取得了当时最优的 VQA 性能。

LLaVA(Liu et al., NeurIPS 2023)的做法更简单:直接用一个 MLP 线性投影层把 ViT(CLIP 视觉编码器)的 patch token 映射到 LLM 的词嵌入空间,然后像处理普通文本 token 一样让 LLM 处理。配合 GPT-4 生成的图文指令微调数据,LLaVA 展现了惊人的多模态推理和对话能力,成为开源多模态模型的事实标准框架。

图像描述(Image Captioning)可以看作 VQA 的特殊形式:问题是固定的”描述这张图”,答案是一段描述性文本。技术上两者共享视觉编码器和多模态融合模块。区别在于:描述生成长文本(多句),VQA 通常生成短答案(单词或短语)。详细的技术演进(从 Show and Tell 到 BLIP)见图像描述生成。

2024 年最重要的趋势是从”视觉编码器 + LLM”的拼接架构向原生多模态训练转变:

  • GPT-4o(OpenAI, 2024):端到端训练的统一多模态模型,不区分文本/图像/音频编码器,所有模态共享同一套 Transformer 参数。在 VQA 上的表现接近人类水平。
  • Gemini 1.5 Pro(Google, 2024):支持超长上下文(1M+ token),可以理解长视频、多张图片的复杂关系。原生多模态设计。
  • Qwen2-VL(阿里, 2024):开源 MLLM,支持动态分辨率(Naive Dynamic Resolution)和视频理解。
  • InternVL 2(上海 AI 实验室, 2024):开源系列模型,从 1B 到 108B,性能接近商业闭源模型。

视觉指令微调(Visual Instruction Tuning)

Section titled “视觉指令微调(Visual Instruction Tuning)”

LLaVA 开创的视觉指令微调(Visual Instruction Tuning)已成为 MLLM 的标配流程:

  1. 阶段一:图像-文本对齐预训练——训练投影层使视觉特征对齐到 LLM 空间
  2. 阶段二:视觉指令微调——用 GPT-4 生成的多样化图文问答数据微调(投影层 + LLM 或只微调投影层)
  3. 阶段三(可选):强化学习对齐(RLHF / DPO),使模型输出更符合人类偏好

2024 年多模态评估基准也在快速演进:

  • MMBench / MME:综合评估多模态能力的多维度基准
  • MMMU(Yue et al., 2024):大学水平的多学科多模态理解,挑战模型的深层推理
  • MathVista:多模态数学推理
  • Video-MME:长视频理解评估

Python:用 transformers 库做 VQA(ViLT 模型)

Section titled “Python:用 transformers 库做 VQA(ViLT 模型)”
import torch # pip install transformers
from transformers import ViltProcessor, ViltForQuestionAnswering
from PIL import Image
# 加载 ViLT 模型(视觉语言 Transformer,支持 VQA 分类)
processor = ViltProcessor.from_pretrained("dandelin/vilt-b32-finetuned-vqa")
model = ViltForQuestionAnswering.from_pretrained(
"dandelin/vilt-b32-finetuned-vqa"
)
# 准备图片和问题
image = Image.open("dog.jpg").convert("RGB")
question = "What color is the dog?"
# 预处理:图像 + 文本 → 模型输入
inputs = processor(image, question, return_tensors="pt")
# 推理:输出所有候选答案的分数,取最高
with torch.no_grad():
logits = model(**inputs).logits
idx = logits.argmax(-1).item()
answer = model.config.id2label[idx]
print(f"Q: {question}") # What color is the dog?
print(f"A: {answer}") # 如 brown / white
# pip install transformers
from transformers import BlipProcessor, BlipForQuestionAnswering
from PIL import Image
processor = BlipProcessor.from_pretrained("Salesforce/blip-vqa-base")
model = BlipForQuestionAnswering.from_pretrained(
"Salesforce/blip-vqa-base"
)
image = Image.open("kitchen.jpg").convert("RGB")
question = "Is there a microwave?"
# BLIP 生成开放式答案(不受候选集限制)
inputs = processor(image, question, return_tensors="pt")
with torch.no_grad():
out = model.generate(**inputs, max_new_tokens=20)
answer = processor.decode(out[0], skip_special_tokens=True)
print(answer) # 如 "yes" 或 "no"

Python:使用 LLaVA 做多轮视觉对话

Section titled “Python:使用 LLaVA 做多轮视觉对话”
# 使用 HuggingFace transformers 加载 LLaVA-1.5
from transformers import LlavaForConditionalGeneration, AutoProcessor
from PIL import Image
import torch
model_id = "llava-hf/llava-1.5-7b-hf"
processor = AutoProcessor.from_pretrained(model_id)
model = LlavaForConditionalGeneration.from_pretrained(
model_id, torch_dtype=torch.float16, device_map="auto"
)
image = Image.open("restaurant.jpg").convert("RGB")
# 构造多模态 prompt(LLaVA 格式)
conversation = [
{"role": "user", "content": [
{"type": "image"},
{"type": "text", "text": "What dishes are on the table? Describe them."},
]}
]
prompt = processor.apply_chat_template(conversation, add_generation_prompt=True)
inputs = processor(images=image, text=prompt, return_tensors="pt").to(model.device, torch.float16)
# 生成开放式回答(支持复杂推理)
output = model.generate(**inputs, max_new_tokens=200)
answer = processor.decode(output[0], skip_special_tokens=True)
print(answer)
# 示例输出:"The table has a plate of pasta with tomato sauce, a glass of red wine,
# and a basket of bread. There is also a small bowl of olive oil..."
  • 视觉编码器选型:CLIP 的视觉编码器是最常用的视觉骨干,因为它的特征天然与语言对齐。ViT 变体(如 SigLIP、EVA-CLIP、DINOv2)也表现优秀。详见视觉Transformer ViT。
  • 投影层 vs Q-Former:LLaVA 的简单 MLP 投影在多数场景下效果已经足够好,且训练简单;Q-Former 在需要压缩视觉 token 数量时更有优势(适合计算受限场景)。
  • 指令微调数据是关键:LLaVA 的成功很大程度上归功于 GPT-4 生成的图文指令数据。高质量的多样化问答对模型性能影响巨大。
  • OCR 能力:涉及图中文字的 VQA(如文档 VQA、图表 VQA)需要专门的 OCR 增强。2024 年的 Qwen2-VL 在 OCR 场景表现突出。详见OCR 文字识别。
  • 评估指标:VQA v2 数据集用”软准确率”(每个答案由 10 个标注者投票,模型答案匹配的标注者比例即为得分),BLEU/CIDEr 等用于描述任务评估。2024 年更推荐使用 MMBench / MMMU 等综合基准。详见模型评估。
  • 2025 年实践建议:对于大多数 VQA 任务,直接使用 GPT-4V / Gemini / Qwen2-VL 等多模态大模型 API 是最快的方案。只有在数据敏感、需要离线部署、或有特殊定制需求时,才考虑训练自己的 MLLM(以 LLaVA 架构为起点)。
  • 幻觉问题:多模态大模型在 VQA 中存在严重的幻觉(Hallucination,编造图中不存在的物体或属性)。评估和缓解幻觉是 2024-2025 年的核心研究课题(如 POPE 基准、HA-DPO 对齐方法)。
  • 智能助手与对话:GPT-4V、Gemini、Claude 3.5 等多模态助手能回答关于用户上传图片的任意问题。详见多模态模型。
  • 电商搜索与导购:“这件衣服有其他颜色吗?""这个包适合什么场合?“——基于 VQA 的电商场景理解。
  • 无障碍辅助:为视障用户描述图片内容并回答问题(如 Be My Eyes 应用集成 GPT-4V)。
  • 医学影像问答:放射科医生上传 X 光片,AI 回答诊断相关问题。Med-PaLM M、LLaVA-Med 等医学多模态模型正在探索这一方向。
  • 文档智能:理解扫描文档、合同、票据并回答问题(文档 VQA),详见OCR 文字识别。
  • 图像描述生成:自动为图片生成文字描述,用于无障碍、SEO、内容管理。详见图像描述生成。
  • 教育辅助:学生拍一张数学题照片,AI 不仅识别题目还能解题并讲解(Photomath、Microsoft Math Solver 的演进版)。
  • 视频内容理解:从视频帧中回答问题(VideoQA),用于视频搜索、内容审核、视频字幕生成。
类库语言说明
transformersPythonHuggingFace 库,支持 ViLT、BLIP、BLIP-2、LLaVA、Qwen-VL 等主流 VQA/MLLM 模型
LLaVAPython开源多模态对话模型,提供训练和推理代码,社区生态活跃
mmocr / mmdetectionPythonOpenMMLab 系列库,提供视觉编码器和 OCR 能力辅助 VQA
Grounding DINOPython开放词汇目标检测,可定位 VQA 中提到的物体
GradioPython快速构建 VQA 演示界面,上传图片+问题即可获得答案
lmms-evalPython多模态大模型综合评估框架,支持 MMBench / MMMU / POPE 等基准
术语英文解释
视觉问答Visual Question Answering, VQA给定图片和自然语言问题,输出答案的多模态任务
多模态融合Multimodal Fusion将视觉和文本特征进行交互对齐的过程
跨注意力Cross-Attention让一种模态的 token 查询另一种模态 token 的注意力机制
自底向上注意力Bottom-Up Top-Down Attention用目标检测结果(区域特征)作为视觉表示的经典方法
Q-FormerQuerying TransformerBLIP-2 中的轻量 Transformer,用可学习 query 提取视觉信息
指令微调Instruction Tuning用图文指令数据微调多模态模型,使其能理解和遵循人类指令
视觉指令微调Visual Instruction TuningLLaVA 开创的方法,用 GPT-4 生成的图文对话数据微调 MLLM
分类式答案Classification-based Answer从预定义答案集中选择,精度高但不灵活
生成式答案Generative Answer用解码器逐 token 生成答案,开放式灵活
开放式VQAOpen-ended VQA不限制答案候选集的 VQA 任务,更接近真实场景
文档VQADocument VQA针对扫描文档、图表等文本密集图像的视觉问答
多模态大模型Multimodal LLM (MLLM)原生支持图文(和音频)理解的大语言模型,如 GPT-4V、Gemini
幻觉Hallucination模型编造图中不存在的物体或属性,MLLM 的主要缺陷之一
原生多模态Native Multimodal所有模态共享同一套模型参数的端到端训练方式(如 GPT-4o)
  • Antol et al.,「VQA: Visual Question Answering」(ICCV 2015):VQA 任务的开创性论文,定义了任务和数据集,是多模态研究的里程碑。
  • Anderson et al.,「Bottom-Up and Top-Down Attention for Image Captioning and VQA」(CVPR 2018):BUTD 论文,用 Faster R-CNN 检测物体作为视觉特征,影响了后续多年 VQA 视觉表示方式。
  • Li et al.,「BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models」(ICML 2023):BLIP-2 论文,Q-Former 桥接设计,高效连接视觉编码器和 LLM。
  • Liu et al.,「Visual Instruction Tuning」(NeurIPS 2023):LLaVA 论文,简单 MLP 投影 + 指令微调,开创了开源多模态对话模型的范式。
  • Hudson and Manning,「GQA: A New Dataset for Real-World Visual Reasoning」(CVPR 2019):GQA 数据集论文,强调组合推理和场景图,是 VQA 推理能力的标准评估。
  • Yue et al.,「MMMU: A Massive Multi-discipline Multimodal Understanding and Reasoning Benchmark」(CVPR 2024):MMMU 基准,大学水平的多学科多模态评估,挑战模型的深层推理能力。
  • Li et al.,「Evaluating Object Hallucination in Large Vision-Language Models」(EMNLP 2023):POPE 基准论文,评估多模态大模型的幻觉问题。
  • Bai et al.,「Qwen-VL: A Versatile Vision-Language Model」(2023-2024):阿里 Qwen-VL 系列,动态分辨率 + 视频理解,开源 MLLM 的代表。