初识Qwen的VL系列模型

Qwen-VL、Qwen2-VL、Qwen2.5-VL 这三代模型代表了多模态大语言模型(MLLM)在视觉编码、分辨率动态适配以及多模态位置编码领域的快速演进脉络。从最初的定长序列压缩,到原生的任意分辨率输入,再到彻底重构视觉编码器以支持极长视频和绝对时间定位,Qwen 系列展现了多模态架构的最佳实践路径。

一、Qwen-VL

Qwen-VL 论文:Qwen-VL: A Frontier Large Vision-Language Model with Versatile Abilities。作为第一代多模态模型,Qwen-VL 采用的是经典的“大视觉模型(ViT)+ 跨模态适配器(Adapter)+ 大语言模型(LLM)”的三段式架构,核心解决的是如何将海量的图像特征无损且高效地压缩进 LLM 的上下文中。

  • 高分辨率 ViT 提取:使用预训练的 ViT-bigG 初始化,但将默认输入分辨率从 224×224224 \times 224 提升至 448×448448 \times 448,以保留更多细粒度特征。
  • Vision-Language Adapter (跨模态适配器):不同于简单的线性投影,Qwen-VL 设计了一个包含单层交叉注意力(Cross-Attention)的适配器。它使用 256 个可学习的 Queries 去主动“查询”和压缩 ViT 提取出的上千个图像 Patches,从而将其变为定长的 256 个 Tokens。
  • 混合位置编码:在压缩过程中,适配器引入了二维绝对位置编码(2D Absolute Positional Encoding),让 LLM 能够感知图像中的空间方位。

我们可以通过 transformers 库中的 Qwen-VL 推理代码来追踪其处理逻辑:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers.generation import GenerationConfig
import torch
torch.manual_seed(1234)

tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen-VL-Chat", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-VL-Chat", device_map="cuda", trust_remote_code=True).eval()

query = tokenizer.from_list_format([
{'image': 'https://example.com/demo.jpeg'}, # 图像链接或本地路径
{'text': '这是什么?'},
])
inputs = tokenizer(query, return_tensors='pt')
inputs = inputs.to(model.device)
pred = model.generate(**inputs)
response = tokenizer.decode(pred.cpu()[0], skip_special_tokens=False)

Qwen-VL 架构核心组件分析

Qwen-VL 的前向传播依赖以下三大组件:

  1. Vision Encoder (ViTModel): 一个拥有 1.9B 参数的 ViT-bigG 骨干网络,采用 14×1414 \times 14 的 Patch 大小进行特征提取。
  2. VL Adapter (Resampler): 一个单层 Cross-Attention 模块,负责降采样与模态对齐。
  3. LLM Backbone (QwenModel): 一个拥有 7B 参数的 Qwen 语言模型,接收对齐后的视觉 Tokens 和文本 Tokens,自回归生成文本。

数据输入到输出的尺度变化

以默认的 448×448448 \times 448 图像输入为例,以下是数据在 Qwen-VL 中的特征演变追踪:

  • Batch Size (N): 1
  • 输入图像尺寸: 448×448448 \times 448
  • ViT 隐藏层维度 (D_vit): 1664
  • LLM 隐藏层维度 (D_llm): 4096

1. 图像特征提取 (ViT 阶段)

  • 操作: 图像被切分为 14×1414 \times 14 的 Patches 并经过多层 Transformer 处理。
  • 计算: 单张图产生 (448/14)×(448/14)=32×32=1024(448/14) \times (448/14) = 32 \times 32 = 1024 个 Patches。
  • Shape: 1×3×448×4481×1024×16641 \times 3 \times 448 \times 448 \rightarrow \mathbf{1 \times 1024 \times 1664}

2. 跨模态压缩 (VL Adapter 阶段)

  • 操作: 256 个可学习的 Queries 通过 Cross-Attention 向 1024 个图像 Tokens 提取信息,并经过前馈网络(FFN)将维度映射到 LLM 的维度。
  • 计算: 序列长度被硬性压缩至 256。
  • Shape: 1×256×4096\mathbf{1 \times 256 \times 4096}

3. LLM 自回归生成

  • 操作: 256 个视觉 Tokens 与文本 Tokens 在序列维度拼接后输入大模型。
  • Shape: 最终上下文包含连续的 256 个图像特征。

二、Qwen2-VL

Qwen2-VL 论文:Qwen2-VL: Enhancing Vision-Language Model’s Perception of the World at Any Resolution。面对越来越高的文档和图像理解需求,静态的 448×448448 \times 448 分辨率和强压缩(丢失大量细节)成为了瓶颈。Qwen2-VL 彻底抛弃了固定分辨率和定长压缩,实现了动态分辨率与多模态旋转位置编码的创新

  • 动态分辨率 (Dynamic Resolution):模型不再缩放或裁剪原始图像,而是根据图像原比例动态计算需要切分多少个 Patches,并直接作为变长序列输入,最大程度保留文本和细节。
  • 基于空间池化的 MLP Adapter:抛弃了复杂的 Cross-Attention 压缩模块。由于需要原生保留细粒度特征,Qwen2-VL 简单地将 ViT 输出的相邻 2×22 \times 2 空间 Patches 拼接(Concatenate)合并,再通过一个两层多层感知机(MLP)映射到 LLM 维度。
  • M-RoPE (多模态旋转位置编码):这是 Qwen2-VL 的核心灵魂。传统的 1D 旋转位置编码无法表达图像的二维结构。M-RoPE 将位置编码分为 1D(文本)、2D(图像)和 3D(视频)。对于图像,它将行列 ID 分别计算 RoPE 并结合,使得 LLM 原生具备了二维长宽坐标的概念。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from transformers import Qwen2VLForConditionalGeneration, AutoProcessor
from qwen_vl_utils import process_vision_info
import torch

model = Qwen2VLForConditionalGeneration.from_pretrained("Qwen/Qwen2-VL-7B-Instruct", torch_dtype=torch.bfloat16, device_map="auto")
processor = AutoProcessor.from_pretrained("Qwen/Qwen2-VL-7B-Instruct")

messages = [
{"role": "user", "content": [
{"type": "image", "image": "https://example.com/demo.jpeg"},
{"type": "text", "text": "提取图片中的所有文字。"}
]}
]
text = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
image_inputs, video_inputs = process_vision_info(messages) # 动态解析图像并计算最优 Patch

inputs = processor(text=[text], images=image_inputs, padding=True, return_tensors="pt")
inputs = inputs.to("cuda")
generated_ids = model.generate(**inputs, max_new_tokens=128)

Qwen2-VL 数据输入到输出的尺度变化

假设输入一张宽屏的高清图像:

  • 输入图像尺寸: 1008×5601008 \times 560 (长宽均为 28 的倍数,此为 Processor 动态计算后的对齐尺寸)
  • Patch Size: 14
  • ViT 隐藏层维度: 1152

1. 动态 Patchify (ViT 阶段)

  • 操作: 图像按照原生比例被切分。
  • 计算: 宽产生 1008/14=721008 / 14 = 72 个 Patches,高产生 560/14=40560 / 14 = 40 个 Patches。总共 T=72×40=2880T = 72 \times 40 = 2880 个 Patches。
  • Shape: 1×2880×1152\mathbf{1 \times 2880 \times 1152}

2. 2×22 \times 2 空间特征融合 (MLP Adapter 阶段)

  • 操作: 提取相邻的 2×22 \times 2 个 Patch 序列,在特征维度拼接。
  • 计算: 序列长度降低 4 倍 (2880/4=7202880 / 4 = 720),特征维度增加 4 倍 (1152×4=46081152 \times 4 = 4608),然后通过 MLP 降维。
  • Shape: 1×2880×11521×720×46081×720×35841 \times 2880 \times 1152 \rightarrow 1 \times 720 \times 4608 \rightarrow \mathbf{1 \times 720 \times 3584} (进入 LLM 的特征维度)

3. M-RoPE 空间位置注入 (LLM 内部阶段)

  • 操作: 在 LLM 的注意力机制中,这 720 个 Tokens 会被分配对应的二维坐标 (行号 0190\sim19,列号 0350\sim35),并叠加二维 RoPE 旋转矩阵。
  • Shape: 始终保持 1×720×3584\mathbf{1 \times 720 \times 3584},序列变长且蕴含几何结构。

三、Qwen2.5-VL

Qwen2.5-VL 论文:Qwen2.5-VL Technical Report。为了进一步突破计算效率瓶颈并实现对时序视频(小时级)的精准理解,Qwen2.5-VL 对视觉编码器内部结构时间维度编码进行了深层次的重新设计。

  • Window Attention ViT (带窗口注意力的视觉编码器):传统的 ViT 在动态高分辨率下,自注意力的计算复杂度是 O(N2)O(N^2),极耗显存。Qwen2.5-VL 重新设计并从头训练了 ViT,引入了 窗口注意力 (Window Attention)。注意力仅在一个 8×88 \times 8 的 Patches(即 112×112112 \times 112 像素)窗口内计算,将计算复杂度从平方级降为了线性。同时,将 FFN 替换为 SwiGLU,LayerNorm 替换为 RMSNorm,在架构上向 Qwen2.5 LLM 完全对齐。
  • Dynamic FPS & 绝对时间 M-RoPE:不仅在图像上实现了动态分辨率,在视频上也实现了动态帧率 (Dynamic FPS) 采样。与之配套,M-RoPE 在时间维度 (TT) 上的 position_id 不再是 1,2,31, 2, 3 等顺序索引,而是与绝对时间戳对齐。这让模型真正获得了现实物理世界“时间流逝”的速度感,能够精准定位视频事件发生的秒数。
  • 原生精准 Grounding:进一步强化了视觉定位能力,可以直接生成带坐标的 Bounding Box 和标准 JSON 数据格式,能够直接胜任 Agentic(如电脑操控、网页浏览)的复杂空间推理任务。

深入 Qwen2.5-VL ViT 及动态时空尺度变化

以一段长度为 2 秒的短视频为例,说明其时空维度的前向计算流:

  • 输入: 视频动态采样后生成 4 帧,每帧尺寸 896×896896 \times 896
  • Patch Size: 14

1. ViT 窗口注意力处理

  • 操作: 针对每一帧切分出 (896/14)2=64×64=4096(896 / 14)^2 = 64 \times 64 = 4096 个 Patches。
  • 局部计算: 注意力不再计算 4096×40964096 \times 4096 的矩阵,而是将其分为 (64/8)×(64/8)=64(64/8) \times (64/8) = 648×88 \times 8 规模的窗口。计算在各个独立的 64×6464 \times 64 局部矩阵内完成,计算量呈线性增长。

2. 绝对时间戳对齐 (M-RoPE 3D)

  • 操作: 适配器依然通过 2×22 \times 2 的合并将每帧的长度压缩到 10241024
  • 时间坐标系: 在输入 LLM 时,视频帧的 M-RoPE 并非是均匀的序列 ID。如果这 4 帧分别采样自视频的第 0.1秒、0.8秒、1.5秒、2.0秒,其时间维度的 position_id 会根据绝对时间间隔进行差异化分配。模型能够意识到第一帧与第二帧的时间间隔,远大于第三帧与第四帧的时间间隔。
  • Shape: 包含明确时间物理信息的超级序列进入 Qwen2.5 LLM,彻底打通跨时空语义对齐。

初识Qwen的VL系列模型
https://huan-yin.github.io/2026/04/22/初识Qwen的VL系列模型/
作者
李相越
发布于
2026年4月22日
许可协议