7.2 Qwen2.5-VL:高分辨率多模态LLM案例
核心问题: 以 Qwen2.5-VL 为例,高分辨率多模态模型通常需要解决哪些架构问题?
在线 Notebook
对应的交互式版本可在 Google Colab 打开,统一使用方式见 第0章说明。
背景
早期视觉-语言架构的局限性
LLaVA 这类架构开创了“视觉编码器 + 投影层 + LLM”的路线,但也暴露出几个通用问题:
分辨率限制
- 固定较低分辨率会压缩文字、图表和小目标细节
- 容易丢失图像细节
- 难以处理需要细粒度文字和图表信息的任务
单图像处理
- 主要面向单张图像
- 难以直接对比多张图像
- 难以理解图像序列
任务覆盖瓶颈
- 文档理解、表格、图表和多语言场景通常需要更细粒度视觉输入
- 单纯提升 LLM 能力无法弥补视觉侧信息丢失
Qwen2.5-VL的改进
Qwen2.5-VL 是一个有代表性的改进案例,重点增强了这些能力:
LLaVA (2023) Qwen2.5-VL (2024)
├─ 336×336(LLaVA-1.5)├─ 1024×1024+
├─ 单图像 ├─ 多图像
├─ 英文优化 ├─ 中文优化
└─ 基础性能 └─ 更强综合能力Qwen2.5-VL 架构:作为案例理解通用设计

图7.2a:LLaVA 与 Qwen2.5-VL 架构对比——LLaVA 固定分辨率单图输入经单层 MLP 接 LLM,Qwen2.5-VL 支持动态分辨率多图输入并使用多层瓶颈投影层。
代码文件: code/ch07_multimodal_llm/explainer_diagrams.py运行方式: python code/ch07_multimodal_llm/explainer_diagrams.py
整体架构
输入:图像 + 文本
↓
视觉编码器(Vision Encoder)
├─ 高分辨率处理
├─ 多图像支持
└─ 特征提取
↓
投影层(Projection Layer)
├─ 多层MLP
├─ 特征对齐
└─ 维度变换
↓
LLM(Language Model)
├─ 理解视觉特征
├─ 理解文本输入
└─ 生成输出
↓
输出:文本响应关键改进
1. 高分辨率支持
LLaVA方式:
图像(任意尺寸输入)
↓
缩放到336×336(LLaVA-1.5)
↓
ViT编码
↓
特征(196维)Qwen2.5-VL方式:
图像(任意尺寸输入)
↓
动态分辨率处理
├─ 小图像:保持原大小
├─ 中等图像:缩放到1024×1024
└─ 大图像:分块处理
↓
多尺度特征提取
├─ 全局特征
├─ 局部特征
└─ 细节特征
↓
特征融合
↓
LLM处理2. 多图像支持
图像1 ┐
├─ 分别编码 ─┐
图像2 ┤ ├─ 特征融合 ─┐
├─ 分别编码 ─┤ ├─ LLM处理
图像3 ┘ └─ 上下文保持 ┘
文本输入:描述图像之间的关系3. 语言与任务优化
- 词表和指令数据会影响多语言能力
- 文档、图表、OCR 等任务需要额外的数据和评估约束
- 实际选型要结合语言、任务和部署条件重新评估
多模态融合策略
早期融合(Early Fusion)
在特征提取前融合。
图像 ┐
├→ 联合处理 → 特征 → 任务
文本 ┘优点: 充分利用跨模态信息
缺点: 计算复杂度高
晚期融合(Late Fusion)
在特征提取后融合。
图像 → 特征提取 ┐
├→ 融合 → 任务
文本 → 特征提取 ┘优点: 计算效率高
缺点: 跨模态信息利用不充分
混合融合(Hybrid Fusion)
在多个层级进行融合。
图像 → 特征提取 ┐
├→ 融合1 → 处理 ┐
文本 → 特征提取 ┘ ├→ 融合2 → 任务
┘优点: 平衡计算效率和信息利用
Qwen2.5-VL 可以作为混合融合思路的代表案例:在多个层级组织视觉和语言信息,在信息利用与计算成本之间做折中。

图7.2b:早期融合、晚期融合与混合融合策略对比——复杂度从左到右递减,Qwen2.5-VL 采用混合融合在计算效率与跨模态信息利用间取得平衡。
代码文件: code/ch07_multimodal_llm/explainer_diagrams.py运行方式: python code/ch07_multimodal_llm/explainer_diagrams.py
架构设计原理
融合策略的深层原理
为什么混合融合常常比单纯早期/晚期融合更折中?
早期融合的问题
图像 ┐
├→ 联合处理 → 自注意力 → 特征
文本 ┘
计算复杂度分析:
- 输入维度:图像特征 + 文本特征 = D_img + D_text
- 自注意力复杂度:O((N_img + N_text)²),实际还需乘隐层维度 d,即 O((N_img+N_text)²·d)
- 问题:维度增加,复杂度平方增长具体问题:
计算爆炸: 如果图像有196个patch,文本有100个token,总共296个序列
- 自注意力复杂度:O(296²) ≈ 87,616
- 比单独处理图像(O(196²))和文本(O(100²))的总和还大
显存占用: 需要存储完整的注意力矩阵
- 大小:296 × 296 × 隐层维度
- 对于大模型,显存占用巨大
信息混淆: 图像和文本特征混在一起,容易相互干扰
晚期融合的问题
图像 → 特征提取 ┐
├→ 融合 → 任务
文本 → 特征提取 ┘
问题:特征已经独立学习,融合时信息已经丢失具体问题:
跨模态信息利用不足: 图像和文本特征分别学习,较难充分利用跨模态信息
- 图像编码器不知道文本的语义
- 文本编码器不知道图像的内容
- 导致特征不对齐
性能受限: 在复杂任务上性能不足
- 例如:文档理解需要理解图像中的文字和上下文
- 晚期融合较难充分利用这些信息
混合融合的优势
图像 → 特征提取 ┐
├→ 融合1 → 处理 ┐
文本 → 特征提取 ┘ ├→ 融合2 → 任务
┘
优势:
1. 早期融合:在低层级融合,充分利用跨模态信息
2. 晚期融合:在高层级保持独立,控制计算成本
3. 平衡:既有信息利用,又有计算效率数学分析:
| 融合方式 | 自注意力次数 | 每次复杂度 | 总复杂度 | 相对成本 |
|---|---|---|---|---|
| 早期融合 | 1 | O((N_img + N_text)²) | O(N²) | 高 |
| 晚期融合 | 2 | O(N_img²) + O(N_text²) | O(N²) | 低 |
| 混合融合 | 3 | O(N_img²) + O(N_text²) + O(N_fused²) | O(N²) | 中 |
为什么混合融合更折中:
- 第1层融合:图像和文本在低层级交互,学习对齐
- 第2层处理:各自独立处理,避免维度爆炸
- 第3层融合:高层级融合,综合理解
多图像理解的挑战与解决
多图像理解的应用场景:
对比任务: "这两张图片有什么区别?"
- 需要理解两张图片的内容
- 需要找到它们之间的关系
序列理解: "这是一个漫画故事,描述了什么?"
- 需要理解多张图片的顺序
- 需要理解它们之间的因果关系
关系推理: "这些图片中的物体之间有什么关系?"
- 需要理解多张图片中物体的空间关系
- 需要进行推理
多图像理解的挑战:
单图像处理:
图像1 → 编码 → 特征1 → LLM → 输出
多图像处理:
图像1 ┐
图像2 ├→ 编码 → 特征1, 特征2, ... → LLM → 输出
图像3 ┘
挑战:
1. 上下文保持:如何让LLM知道这些特征来自不同的图像?
2. 顺序理解:如何让LLM理解图像的顺序?
3. 关系推理:如何让LLM理解图像之间的关系?Qwen2.5-VL的解决方案:
上下文标记: 为每个图像的特征添加标记
[IMG1_START] 特征1 [IMG1_END] [IMG2_START] 特征2 [IMG2_END] [IMG3_START] 特征3 [IMG3_END]位置编码: 添加图像位置信息
- 第1张图像:位置编码1
- 第2张图像:位置编码2
- 第3张图像:位置编码3
文本上下文: 用文本描述图像之间的关系
用户输入:"比较这两张图片的区别" LLM能理解: - 这是一个比较任务 - 需要关注两张图片的差异
为什么这有助于提升多图任务表现:
- 多图像理解能力 → 更复杂的任务
- 关系推理能力 → 更深层的理解
- 在相关视觉问答/多图基准中通常能看到收益
分辨率与任务性能的关系
不同任务对分辨率的需求:
高分辨率需求:
文档理解 ████████████████ 需要读取文字
图表分析 ███████████████ 需要看清数据点
医学图像 ██████████████ 需要细节
中等分辨率需求:
视觉问答 ████████ 需要理解内容
图像描述 ███████ 需要理解场景
低分辨率需求:
物体分类 ████ 只需要识别物体
场景分类 ███ 只需要识别场景像素预算角度的分析:
图像分辨率直接决定模型能看到多少像素细节。下面是一个简化的像素预算直觉:
像素数 = 分辨率 × 分辨率
224×224: 约 5 万像素
1024×1024:约 105 万像素
像素数约增加 20 倍。高分辨率的关键价值在于保留文字、坐标轴刻度、小物体边缘等细节;这些细节只有在足够多的像素下才可识别。为什么224×224不够:
文字识别: 文字需要足够的像素来识别
224×224:每个字符约5×5像素 → 难以识别 1024×1024:每个字符约20×20像素 → 容易识别细节保留: 小物体和细节容易丢失
224×224:小物体可能只有1-2个像素 → 消失 1024×1024:小物体有5-10个像素 → 保留颜色信息: 低分辨率导致颜色混合
224×224:相邻像素颜色混合 → 颜色信息丢失 1024×1024:颜色信息保留更好
示意性的性能提升原因:
下面的数字用于说明高分辨率对不同任务的影响方向,不能直接等同于所有模型或所有数据集上的稳定结论。
| 任务 | 224×224 | 1024×1024 | 提升 | 原因 |
|---|---|---|---|---|
| 文档理解 | 65.3 | 82.1 | +16.8 | 能读取文字 |
| 图表分析 | 58.2 | 76.5 | +18.3 | 能看清数据 |
| 图像描述 | 78.5 | 85.2 | +6.7 | 细节更清晰 |
| 视觉问答 | 82.1 | 89.3 | +7.2 | 理解更准确 |
投影层的设计原理
特征空间的不匹配问题:
ViT输出空间:
维度:D_img = 768
分布:高斯分布,均值≠0,方差≠1
语义:视觉语义
LLM输入空间:
维度:D_llm = 4096
分布:高斯分布,均值≠0,方差≠1
语义:语言语义
问题:维度不匹配、分布不匹配、语义不匹配为什么需要投影层:
维度对齐: 768 → 4096
投影层:线性变换 特征_new = W × 特征_old + b 其中 W 的形状是 (4096, 768)分布对齐: 调整特征的分布
ViT特征分布:可能不适合LLM 投影后:调整为LLM期望的分布语义对齐: 将视觉语义转换为语言语义
ViT特征:视觉特征(颜色、形状、纹理) 投影后:语言相关的特征(物体、场景、属性)
为什么需要多层MLP而不是单层:
非线性变换: 单层线性投影只能表达线性映射,多层 MLP 可以表达更复杂的变换
单层:y = W × x + b (线性) 多层:y = W₃ × ReLU(W₂ × ReLU(W₁ × x + b₁) + b₂) + b₃ (非线性)表达能力: 多层MLP能表达更复杂的映射
单层线性投影:只能表达线性映射 多层MLP:在足够宽度和合适激活函数下,可以近似更复杂的映射特征变换: 多层能逐步变换特征
第1层:初步维度变换 第2层:特征融合和非线性变换 第3层:最终语义对齐
瓶颈投影结构的作用:
通过低维瓶颈降低参数量(类似适配器思想,但 Qwen2.5-VL 并未使用 LLaMA-Adapter 标准架构):
原始投影层:
参数量 = 4096 × 768 ≈ 3.1M
带适配器的投影层:
参数量 = 4096 × 64 + 64 × 768 ≈ 310K
优势:参数量减少10倍;性能是否接近取决于任务、数据和训练配置为什么这些改进有效:
- 混合融合: 平衡信息利用和计算效率
- 多图像支持: 扩展应用场景
- 高分辨率: 保留细节信息
- 投影层优化: 更好的特征对齐
这些改进共同作用,使 Qwen2.5-VL 在文档理解、图表分析和多图像任务上相对早期 LLaVA 架构更具工程优势。
与LLaVA的对比
架构对比
| 方面 | LLaVA | Qwen2.5-VL |
|---|---|---|
| 视觉编码器 | ViT-L | ViT-L + 高分辨率 |
| 投影层 | 单层MLP | 多层MLP(瓶颈结构) |
| 分辨率 | 336×336(LLaVA-1.5) | 1024×1024+ |
| 多图像 | ✗ | ✓ |
| 中文优化 | ✗ | ✓ |
| 参数量 | 7B/13B | 7B/32B |
| 融合策略 | 晚期融合 | 混合融合 |
关键架构参数
| 组件 | Qwen2.5-VL-7B | Qwen2.5-VL-32B |
|---|---|---|
| 视觉编码器 | ViT-L (307M) | ViT-L (307M) |
| 视觉 token 数(最大) | 1280 | 1280 |
| 投影层 | 2层 MLP | 2层 MLP |
| LLM 参数量 | 7B | 32B |
| LLM 隐层维度 | 3584 | 5120 |
| 最大上下文 token 数 | 32768 | 32768 |
应用场景对比
| 场景 | LLaVA-1.5 | Qwen2.5-VL | 量化提升(代表基准/示意) |
|---|---|---|---|
| 视觉问答 | ✓ 80.0 | ✓✓ 84.3 | +4.3 (VQAv2) |
| 图像描述 | ✓ | ✓✓ | CIDEr +16.4 |
| 文档理解 | ✗ | ✓✓ 90.1 | 新能力 (DocVQA) |
| 图表分析 | ✗ | ✓✓ | 新能力 |
| 中文应用 | ✗ | ✓✓ | 新能力 |
| 多图像对比 | ✗ 52.3 | ✓ 68.7 | +16.4 (Mantis) |
代码实验

图7.2:Qwen2.5-VL 与 LLaVA 架构对比——高分辨率支持、多图像处理、混合融合策略的实现差异。
代码文件: code/ch07_multimodal_llm/qwen_vl_analysis.py
运行方式: python code/ch07_multimodal_llm/qwen_vl_analysis.py
本节小结
Qwen2.5-VL可以作为高分辨率多模态架构的代表案例,主要优势:
- 高分辨率支持(1024×1024+)
- 多图像理解
- 中文优化
- 混合融合策略
- 预训练效果更好
- 性能更强(+6.7到+18.3分)
下一节: 7.3 高分辨率图像处理
扩展阅读: 对比学习与投影层深度细节(多模态预训练三阶段、投影层设计原理)
