视觉问答与图像描述
视觉问答(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 的基本框架
Section titled “VQA 的基本框架”经典 VQA 模型包含三个模块:
- 视觉编码器:提取图像特征。早期用 CNN(如 ResNet、VGG),现在主流用 ViT 或 CLIP 的视觉编码器。输出为图像特征向量或一组 patch token。
- 文本编码器:编码问题文本。早期用 LSTM/GRU,现在用 Transformer 编码器或预训练语言模型(如 BERT)。
- 多模态融合 + 答案输出:将视觉特征和文本特征融合,经分类头或解码器输出答案。
多模态融合的数学原理
Section titled “多模态融合的数学原理”融合层是 VQA 的核心。给定视觉特征 ( 个视觉 token)和文本特征 ( 个文本 token),融合方法经历了从简单到复杂的演进:
第一代:简单交互(2015-2018)
Section titled “第一代:简单交互(2015-2018)”- 逐元素乘法(Hadamard Product):,其中 是逐元素相乘。要求视觉和文本特征都是全局向量(同维度)。
- 拼接 + MLP:,将两个向量拼接后过全连接。
直觉:逐元素乘法像”匹配”——视觉特征和文本特征的每个维度相乘,匹配上的维度值变大。这类似于向量空间中找”共鸣”。
第二代:跨注意力融合(2019-2021)
Section titled “第二代:跨注意力融合(2019-2021)”跨注意力(Cross-Attention)让文本 token 作为 Query 去查询视觉 token:
这样模型可以学到”问题中的’动物’对应图像中的哪个区域”——即实现了语义级的视觉定位。
第三代:投影到大语言模型空间(2022 至今)
Section titled “第三代:投影到大语言模型空间(2022 至今)”BLIP-2 和 LLaVA 的核心创新不是融合方法,而是如何高效地将视觉特征注入大语言模型:
-
LLaVA:用 MLP 将 ViT 的 patch token 直接投影到 LLM 的词嵌入空间,然后作为”视觉 token”拼接到文本 token 前面: LLM 像处理普通文本一样处理混合序列——这就是”把图像变成 LLM 能读的词”。
-
BLIP-2 Q-Former:用一组可学习的 Query Token(通常 32 个)通过跨注意力从冻结的 ViT 中提取与语言最相关的视觉信息。相当于”用 32 个向量总结整张图”。
答案形式:分类 vs 生成
Section titled “答案形式:分类 vs 生成”VQA 的答案输出有两种范式:
- 分类式:把答案视为预定义的候选集(如 VQA v2 数据集中最常见的 3129 个答案),训练一个分类头。优点是训练简单、精度高;缺点是答案集封闭,无法回答开放式问题。
- 生成式:用序列解码器(如 Transformer decoder)逐 token 生成答案文本。优点是开放式、灵活;缺点是训练难度更大、需要更多数据。现代多模态大模型(BLIP-2、LLaVA、GPT-4V)采用生成式。
VQA 的推理类型
Section titled “VQA 的推理类型”VQA 不是单一任务,而是多种推理能力的综合:
| 类型 | 示例 | 所需能力 |
|---|---|---|
| 感知 | “图中有几只猫?” | 物体检测 + 计数 |
| 属性识别 | “猫是什么颜色?” | 细粒度视觉理解 |
| 空间关系 | “猫在沙发上面还是下面?” | 空间推理 |
| 常识推理 | “这个人在做什么?为什么?” | 视觉 + 常识知识 |
| 文本阅读(OCR) | “招牌上写了什么?” | 文本检测与识别 |
| 多步推理 | “如果把这个杯子倒过来,水会怎样?” | 物理/逻辑推理 |
| 知识关联 | “这是哪个国家的国旗?” | 视觉 + 世界知识 |
GPT-4V 级别的模型在感知和 OCR 上已接近人类水平,但在复杂多步推理和空间推理上仍有明显短板——这是 2024-2025 年多模态研究的重点突破方向。
从 CNN+LSTM 到 MLLM 的三代演进
Section titled “从 CNN+LSTM 到 MLLM 的三代演进”- 第一代(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:高效桥接视觉与语言
Section titled “BLIP-2:高效桥接视觉与语言”BLIP-2(Li et al., ICML 2023)的核心是 Q-Former——一个轻量的 Transformer,用一组可学习的 query token(通常 32 个)从冻结的 ViT 中提取与语言最相关的视觉信息,再喂给冻结的 LLM。这种”两阶段冻结 + 轻量桥接”策略大幅降低了训练成本(只训练 Q-Former 和少量投影层),同时取得了当时最优的 VQA 性能。
LLaVA:简单投影的强大效果
Section titled “LLaVA:简单投影的强大效果”LLaVA(Liu et al., NeurIPS 2023)的做法更简单:直接用一个 MLP 线性投影层把 ViT(CLIP 视觉编码器)的 patch token 映射到 LLM 的词嵌入空间,然后像处理普通文本 token 一样让 LLM 处理。配合 GPT-4 生成的图文指令微调数据,LLaVA 展现了惊人的多模态推理和对话能力,成为开源多模态模型的事实标准框架。
图像描述与 VQA 的关系
Section titled “图像描述与 VQA 的关系”图像描述(Image Captioning)可以看作 VQA 的特殊形式:问题是固定的”描述这张图”,答案是一段描述性文本。技术上两者共享视觉编码器和多模态融合模块。区别在于:描述生成长文本(多句),VQA 通常生成短答案(单词或短语)。详细的技术演进(从 Show and Tell 到 BLIP)见图像描述生成。
2024-2025 年前沿
Section titled “2024-2025 年前沿”原生多模态大模型(Native MLLM)
Section titled “原生多模态大模型(Native MLLM)”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 的标配流程:
- 阶段一:图像-文本对齐预训练——训练投影层使视觉特征对齐到 LLM 空间
- 阶段二:视觉指令微调——用 GPT-4 生成的多样化图文问答数据微调(投影层 + LLM 或只微调投影层)
- 阶段三(可选):强化学习对齐(RLHF / DPO),使模型输出更符合人类偏好
评估基准的升级
Section titled “评估基准的升级”2024 年多模态评估基准也在快速演进:
- MMBench / MME:综合评估多模态能力的多维度基准
- MMMU(Yue et al., 2024):大学水平的多学科多模态理解,挑战模型的深层推理
- MathVista:多模态数学推理
- Video-MME:长视频理解评估
VQA 经典框架
Section titled “VQA 经典框架”VQA 技术演进
Section titled “VQA 技术演进”LLaVA 架构:视觉 token 注入 LLM
Section titled “LLaVA 架构:视觉 token 注入 LLM”Python:用 transformers 库做 VQA(ViLT 模型)
Section titled “Python:用 transformers 库做 VQA(ViLT 模型)”import torch # pip install transformersfrom transformers import ViltProcessor, ViltForQuestionAnsweringfrom 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 / whitePython:用 BLIP 做开放式 VQA
Section titled “Python:用 BLIP 做开放式 VQA”# pip install transformersfrom transformers import BlipProcessor, BlipForQuestionAnsweringfrom 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.5from transformers import LlavaForConditionalGeneration, AutoProcessorfrom PIL import Imageimport 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),用于视频搜索、内容审核、视频字幕生成。
典型类库与工具
Section titled “典型类库与工具”| 类库 | 语言 | 说明 |
|---|---|---|
| transformers | Python | HuggingFace 库,支持 ViLT、BLIP、BLIP-2、LLaVA、Qwen-VL 等主流 VQA/MLLM 模型 |
| LLaVA | Python | 开源多模态对话模型,提供训练和推理代码,社区生态活跃 |
| mmocr / mmdetection | Python | OpenMMLab 系列库,提供视觉编码器和 OCR 能力辅助 VQA |
| Grounding DINO | Python | 开放词汇目标检测,可定位 VQA 中提到的物体 |
| Gradio | Python | 快速构建 VQA 演示界面,上传图片+问题即可获得答案 |
| lmms-eval | Python | 多模态大模型综合评估框架,支持 MMBench / MMMU / POPE 等基准 |
| 术语 | 英文 | 解释 |
|---|---|---|
| 视觉问答 | Visual Question Answering, VQA | 给定图片和自然语言问题,输出答案的多模态任务 |
| 多模态融合 | Multimodal Fusion | 将视觉和文本特征进行交互对齐的过程 |
| 跨注意力 | Cross-Attention | 让一种模态的 token 查询另一种模态 token 的注意力机制 |
| 自底向上注意力 | Bottom-Up Top-Down Attention | 用目标检测结果(区域特征)作为视觉表示的经典方法 |
| Q-Former | Querying Transformer | BLIP-2 中的轻量 Transformer,用可学习 query 提取视觉信息 |
| 指令微调 | Instruction Tuning | 用图文指令数据微调多模态模型,使其能理解和遵循人类指令 |
| 视觉指令微调 | Visual Instruction Tuning | LLaVA 开创的方法,用 GPT-4 生成的图文对话数据微调 MLLM |
| 分类式答案 | Classification-based Answer | 从预定义答案集中选择,精度高但不灵活 |
| 生成式答案 | Generative Answer | 用解码器逐 token 生成答案,开放式灵活 |
| 开放式VQA | Open-ended VQA | 不限制答案候选集的 VQA 任务,更接近真实场景 |
| 文档VQA | Document 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 的代表。