2026-06-29-QWenVL
Overall Architecture
(Qwen-VL)[https://github.com/QwenLM/Qwen-VL] 的核心目标是把一个 text-only LLM 扩展成 vision-language model,使其能够同时理解文本和图像。
整体结构可以分成三部分:
1 | Image |
其中:
- LLM:使用 Qwen-7B 初始化;
- Visual Encoder:使用 ViT,将图像切成 patch (patch_size=14) 后输出 image patch features;
- Visual Adapter:使用 cross-attention,把较长的图像 patch feature sequence 压缩成固定长度的 visual token sequence,最终输入给 LLM 的不是原始图像,而是一段连续的 visual embeddings,再加上文本 prompt。
Visual Encoder
Qwen-VL 的 visual encoder 是 ViT。它把图像切成 patch,然后每个 patch 产生一个 feature vector。
例如,如果图像分辨率是 448×448,patch size 是 14,那么 patch grid 是 \(32 \times 32 = 1024\)。所以 ViT 会输出大约 1024 个 image patch tokens \(X_{\text{img}} \in \mathbb{R}^{1024 \times d}\)
这些 patch features 包含图像局部区域的信息,例如物体、文字、纹理、颜色、空间布局等。
但是如果直接把 1024 个 visual tokens 全部送进 LLM,会带来较大的 sequence length 和计算成本。因此 Qwen-VL 引入了 cross-attention vision-language adapter 来压缩 visual sequence。
Learnable Query Embeddings for Cross-Attention
Qwen-VL 的 Visual Adapter 的query是 learnable query embeddings。这些query可以理解成一组可学习的信息槽位,它们的作用是从 ViT 输出的大量 image patch tokens 中主动“读取”有用信息。
假设 ViT 输出\(X_{\text{img}} \in \mathbb{R}^{N \times d}\)
Visual Adapter 中有 256 个 learnable queries: \(Q_{\text{learned}} \in \mathbb{R}^{256 \times d}\)
cross-attention 的形式大致是:
$$ \text{softmax} \left( \frac{QK^\top}{\sqrt{d}} \right)V $$其中:
- query 来自 learnable embeddings;
- key/value 来自 ViT image patch features;
- 每个 learnable query 会 attend 到所有 image patches;
- 每个 query 输出一个压缩后的 visual token。
本质上这些 learnable queries 把图像压缩成固定长度的 visual representation。经过训练后,可能分别学习捕捉不同类型的信息,例如global scene information, object-level information, text/OCR regions…
Cross-Attention Vision Adapter 的输出
Visual Adapter 输出的256个 continuous visual embeddings 会被放进 LLM 的输入序列中。
Qwen-VL 使用特殊 token 来标记图像内容的开始和结束:
1 | <img> [visual token 1] [visual token 2] ... [visual token 256] </img> |
然后再接用户文本 prompt:
1 | embedding"<img>" visual_embeddings embedding"</img>" text_embeddings.. |
所以 LLM 看到的是一个 interleaved multimodal sequence。
Multi-Task Pretraining
Qwen-VL 的训练流程分为三阶段:
1 | Stage 1: Pretraining |
Stage 1: Image-Text Pretraining
第一阶段主要使用大规模 image-text pairs。这一阶段冻结了LLM部分,只训练 visual encoder 和 visual adapter。图像分辨率为 224×224。训练目标是普通的 text token cross-entropy,也就是给定图像后预测对应文本。这个阶段的作用是让 visual encoder 和 adapter 学会把图像信息转成 LLM 能理解的 visual embeddings。
Stage 2: Multi-Task Pretraining
第二阶段引入更高质量、更细粒度的 vision-language annotation data,并提高输入分辨率。图像分辨率从 224×224 提高到 448×448。这一阶段训练了 visual encoder + Visual Adapter + LLM。
Qwen-VL 在这一阶段同时训练 7 类任务:
1 | Captioning |
这些任务都被统一成 autoregressive text generation。
例如,bounding box 不需要额外 detection head,而是被表示成文本:
1 | <box>(661,612),(833,812)</box> |
被 box 指代的文本片段用:
1 | <ref>bees</ref> |
所以 grounded caption 可以写成:
1 | Beautiful shot of <ref>bees</ref><box>(661,612),(833,812)</box> |
这种设计的关键是让 captioning、VQA、OCR、grounding 都被转成同一个 next-token prediction 问题。因此模型不需要为每个任务设计单独的 head。
Stage 3: Supervised Fine-Tuning
第三阶段是 instruction fine-tuning,用来得到 Qwen-VL-Chat。这一阶段冻结了 Visual encoder,只训练 Visual Adapter 和 LLM。
这一阶段增强模型的:
1 | instruction following |
训练时会混合 multimodal dialogue data 和 pure-text dialogue data,以避免模型丢失通用语言对话能力。
Comment
QWen-VL主要工作是通过设计visual encoder和visual adapter使得LLM能同时接收image和text信息,并通过预训练和SFT赋予了模型多模态推理能力。模型的上下文长度在8192,尚未在这方面进行额外训练和设计。
2026-06-29-QWenVL