实际上,VLM的发展可以总结成一句话:
从“让模型看懂图文关系” → “让模型拥有视觉能力” → “让大语言模型理解视觉” → “让视觉语言模型成为通用助手”。
一、VLM发展的四个阶段
整个路线可以分成:
| 阶段 | 时间 | 核心问题 | 代表论文 |
|---|---|---|---|
| 阶段1:视觉-语言对齐 | 2021 | 图片和文字如何建立联系? | CLIP |
| 阶段2:视觉语言预训练 | 2022 | 如何同时理解、生成、多任务学习? | BLIP、Flamingo |
| 阶段3:视觉连接LLM | 2023 | 如何让LLM获得视觉能力? | BLIP-2、InstructBLIP、LLaVA |
| 阶段4:大规模通用多模态模型 | 2023-2024 | 如何成为GPT-4V一样的通用助手? | Qwen-VL、InternVL、Florence-2 |
第一阶段:CLIP(2021) 找到视觉和语言的共同空间
背景
2020年前后的视觉模型:
CNN/ViT:输入图片 → 分类标签
问题:模型只能识别固定类别。
所以OpenAI提出:能不能直接利用互联网的图片+文本,让模型学习世界概念?于是CLIP出现。
核心思想
不预测类别。而是Image-Text Contrastive Learning,学习:
图片 → Image Encoder 二者映射到同一个空间 文本 → Text Encoder解决了如何让视觉和语言对齐的问题,但不会生成文字、不会聊天、不理解复杂指令
所以CLIP更像:视觉世界 → 语言空间,而不是一个助手。
第二阶段:BLIP (2022) —— 从“对齐”走向“理解”
CLIP的问题:图片和文字只是匹配。
但是VLM需要:看图回答问题、图片描述、视觉推理,所以需要更强的视觉语言预训练。
核心思想:
同时训练理解任务和生成任务。
提出:MED模型(Multimodal Mixture of Encoder-Decoder)
一个模型三个身份:
1. Image-Text Contrastive Learning:类似CLIP,图片和文字靠近。
2. Image-Text Matching:判断图片和文本是否匹配(二分类)
3. Image Captioning
所以BLIP比CLIP多了一步:
CLIP:图片 ↔ 文本
BLIP:图片 ↔ 文本理解
↓
文本生成
BLIP最大的贡献
不是结构。而是提出:CapFilt 数据过滤机制
互联网图片:图片 + 垃圾文本 很多
BLIP用Captioner生成高质量caption,Filter过滤错误caption,得到 clean image-text pairs
成为后来大量VLM的数据构建基础。
Flamingo(2022):让LLM“看图”
CLIP:视觉理解强,BLIP:视觉语言任务强,但它们不是LLM。
问题:能不能直接把视觉能力接到GPT这种语言模型?
核心思想
保持LLM参数冻结,通过增加视觉编码器和视觉-语言交互模块,将视觉信息注入LLM,使LLM具备视觉理解能力。
结构:
Image | Vision Encoder | Perceiver Resampler | Visual Tokens ↓ LLM关键:
Cross Attention
原本LLM:Text → Self Attention
Flamingo:Text token → Cross Attention ← Image feature,让语言模型读取图片。
Flamingo解决了:
如何让大语言模型拥有视觉输入能力?
但是训练成本高,因为需要大量LLM结构修改。
Flamingo没有改动预训练视觉模型(Vision Encoder)的主体,也没有重新训练LLM的主体参数;但是它改造了LLM结构,在LLM中插入了新的Cross-Attention模块,并训练这些新增模块。
第三阶段:BLIP-2 —— 最经典的桥接思想
Flamingo的问题:需要训练大量参数。
BLIP-2提出:能不能不用改视觉模型,也不用改LLM?
答案:增加一个桥。
Flamingo 的思路是:冻结视觉编码器 + 冻结语言模型,然后在语言模型内部插入大量可训练的 Gated Cross-Attention 层(参数量大)。
BLIP-2:更激进地压缩了要训练的部分,把“桥”集中到Q-Former,主要训练Q-Former + 投影层。
Q-Former 本身只有大约188M 参数,且LLM 完全冻结,不需要像 Flamingo 那样在 LLM 的多层结构中增加一套 Cross-Attention 模块。
结构
核心:
Q-Former
负责:视觉特征 → LLM能够理解的语言空间
Flamingo选择把视觉信息通过Gated Cross-Attention直接注入语言模型内部的多层网络;BLIP-2则把视觉信息先交给Q-Former提炼成少量query表示,再作为LLM的输入前缀/视觉token送入LLM。
所以:
CLIP:视觉 ↔ 文本
BLIP:视觉 ↔ 语言任务
Flamingo:视觉 → LLM
BLIP-2:视觉 → QFormer → LLM
InstructBLIP(2023):让模型听懂任务
BLIP-2的问题:会看,但是不知道 “你现在让我做什么”。如:
图片:狗
问题1:这是什么动物? 回答:狗
问题2:描述图片 回答:一只狗在草地。
BLIP-2没有明确任务意识。
InstructBLIP加入:
Instruction tuning
输入:
Image Instruction:Describe this image输出:
A dog running...用预训练的 BLIP-2 初始化训练,在指令调整期间,冻结图像编码器和 LLM,只微调Q-Former。
核心:Q-Former增加instruction输入。
所以:
BLIP-2:视觉→语言
InstructBLIP:视觉+任务→语言
LLaVA(2023):视觉指令微调路线
LLaVA其实和InstructBLIP路线不同。
它的问题:
能不能像ChatGPT一样训练一个视觉聊天机器人?
结构:
Image ↓ CLIP Vision Encoder ↓ Linear Projection ↓ Vicuna/LLaMA ↓ Answer非常简单。
关键创新:
Visual Instruction Tuning
制作:
图片+问题+答案例如:
图片:猫
生成:
Human: What is in the image? Assistant: There is a cat.训练LLM学会:看图聊天。
区别:
BLIP-2的假设:Vision Encoder虽然强,但视觉特征和LLM语言空间差距大,需要一个强大的桥。
LLaVA的假设:CLIP已经学好了视觉语义,只需要一个简单映射让LLM能读懂即可。
BLIP-2:重点:更好的视觉-LM连接方式(Q-Former)
LLaVA:重点:更简单的连接方式 + 大规模视觉指令数据,让LLM获得视觉对话能力
BLIP-2认为connector本身需要具备视觉理解能力;LLaVA认为connector只需要负责维度映射,把视觉理解能力交给CLIP,把推理能力交给LLM。
第四阶段:大规模通用VLM
前面模型:规模有限、数据有限。
GPT-4V出现后,目标变成:
一个模型解决所有视觉任务。
Qwen-VL
核心:中文大模型路线。
基础:Qwen-LM
增加:
Visual Receptor
视觉编码器
Input-output interface
视觉token接口
例如:
<image> 图片token </image>让LLM知道:这里有图片。
训练:
三个阶段:图文对齐、多任务预训练、指令微调
InternVL
核心:提高视觉理解能力。
路线:
InternViT + QLLaMA + 大规模数据重点:视觉编码器扩大。
因为发现很多VLM瓶颈不是LLM,而是视觉理解不足。
所以InternVL:强化Vision Encoder。
Florence-2(2024)
它代表另一条路线:
不做聊天模型,而做统一视觉基础模型。
目标:
一个模型完成:caption、detection、segmentation、grounding、OCR
核心:统一序列生成。如:
检测,输出:<loc_1><loc_2>
分割,输出:mask token。
所以Florence-2更像:视觉领域GPT。
最终形成三条路线
路线1:CLIP路线
目标:视觉语言对齐
代表:CLIP → BLIP
路线2:LLM增强路线
目标:让LLM看懂图片
代表:Flamingo → BLIP-2 → InstructBLIP → LLaVA
路线3:通用视觉基础模型路线
目标:一个模型解决所有视觉任务
代表:Qwen-VL、InternVL、Florence-2
最后一张总图
视觉语言模型发展 图片+文本如何关联?CLIP(2021) | 图文理解+生成能力?BLIP(2022) | 让LLM拥有视觉? / \ Flamingo BLIP-2 | | 视觉Cross Attention Q-Former桥接 | Instruction能力? | InstructBLIP | Visual Instruction Tuning | LLaVA | 大规模通用多模态模型 / | \ Qwen-VL InternVL Florence-2真正需要记住的不是9个模型,而是4个关键问题:
- CLIP:视觉和语言怎么对齐?
- BLIP:怎么做统一视觉语言预训练?
- BLIP-2/LLaVA:怎么让LLM获得视觉能力?
- Qwen-VL/InternVL/Florence-2:怎么做通用多模态基础模型?