type
status
date
slug
summary
tags
category
icon
password
Qwen-VL: A Versatile Vision-Language Model for Understanding, Localization, Text Reading, and Beyond(2023-08)
模型结构

LLM
Qwen-7B 做初始化
Image encoder
ViT,用 Openclip’s ViT-bigG 的权重初始化
Connector
Q-former 形式的结构,但是比 BLIP2 的形式更加简单,原文说是:
This adapter comprises a single-layer cross-attention module initialized randomly
所以看上去是只做了一个 cross attention(连 FFN 都没有?), 也没找到源码。这里 cross attention 是用一组可学习的 query(embedding) 作为 Q 长度为 256,ViT encoder 的结果作为 key 和 value,所以放到 LLM 的时候相当于每张图就固定占 256 个 token
数据格式
- 图片的 token(embedding) 会用 <img> and </img> 包裹住
- 目标检测相关的任务,会用 <box> and </box> 来括住 "(Xtopleft, Ytopleft), (Xbottomright, Ybottomright)” 表示目标位置,同时 <ref> and </ref> 包裹住描述这个目标的相关词汇或句子
训练
stage1-预训练
- 用的 image-text pairs 训练,收集了 5 billion 的图文对,过滤后剩下 1.4 billion,77.3% 的英文 22.7% 的中文的
- LLM 部分 freeze 住,训练 vision encoder + adapter 层
- image resize to 224 × 224
- 训练目标是预估 text 部分
- 2e-4 学习率, bs 30720
stage2-多任务预训练


- 训练包括 LLM 的所有模块
- 训练数据会有图文交错的数据
- 图片大小提升至 448 × 448
- OCR 数据可以用截图合成
stage3-sft

- 只训练 LLM 和 adapter 部分
- 会包括 caption 数据和基于 self-instruction 的合成数据,一共 350K 跳数据
Qwen2-VL: Enhancing Vision-Language Model’s Perception of the World at Any Resolution (2024-09)
这篇论文,方法上还是挺多细节没搞清楚的,论文上描述也不够详细,得看源码才能搞懂,考虑到最新的已经是 Qwen2.5 了,就先不纠结了,等 2.5 的时候再看最新的细节
几个重点创新点
- 朴素动态分辨率机制 (Naive Dynamic Resolution Mechanism)
- 多模态旋转位置嵌入 (Multimodal Rotary Position Embedding, M-RoPE)
- 统一的图像和视频处理范式
- 多模态的 scaling laws
模型结构
到 Qwen2-VL 这里,模型结构相比 Qwen1 是有挺大改变的,把 connector 去掉了,image encoder 的输出直接作为 token embedding 给到 LLM 部分(虽然论文中说是 “We have retained the Qwen-VL”,我还以为完全一模一样呢,其实只是说和 qwen-vl 一样有 vision encoder 和 LLM 部分)
朴素动态分辨率机制 (Naive Dynamic Resolution Mechanism)
论文中引用的是 NaViT 这篇论文,大致看了一下,它的逻辑是这样的:

- 动机:之前的方法通常会把图片处理为同一分辨率(同一个 batch 中保持一致),要么是 reszie 要么是 pad,前者可能丢失信息导致性能下降,后者浪费算力
- 方法:参考 LLM 中训练拼接 sequence 的逻辑,多张小图可以拼接成一条序列,attention 和 输出部分都做 mask,这样就能保持图片的原生分辨率和宽高比
- 此外:训练的时候还采用了随机丢弃 token (鲁棒性更强)和随机采样(让模型适应不同分辨率)
由于分辨率是动态的且一条序列里面有多个图片,那用绝对位置编码就不合适了,用了苏剑林的 2D-ROPE,这里本质上就是把向量分成两半,一半施加 x 轴的 1D-rope,一半施加 y 轴的 1D-rope,需要注意的是,这里 2d-rope 是对 vision encoder 施加,后面用的 m-rope 是为了融合 vision 和 text 的,两者不一样
VIT 的输出之后,还会用 MLP 将 2 × 2 的 token 合并成 1 个 token,同时会用 <|vision_start|> and <|vision_end|> 两个 token 把 vision embedding 包围住,所以对于 224 × 224 的 image,在 patch_size=14 的情况下,就有 66 个 token(ViT 输出 16 × 16,然后 2 × 2 合并成 1 个,就变成 8 × 8 了再加上两个特殊标识 token)
多模态位置编码
从论文中看大概是把 embedding 向量分成三份,分别施加 temporal, height, and width 维度的 1d-rope;时间维度上每张图片/每个 text token 算一个 position;高、宽维度上,图片中就随着 patch 在原始图片的位置而变化,text 就默认和时间维度一致

这里不是很理解,感觉有点问题,这里其实默认 text 部分的 height 和 width 位置是随时间维度(序列方向)递增的,但是从高宽维度 text 和 image 做 attention 就有点怪了?
假设 image_n position id 是 10000,下一个 text token position id 是 10001,但是高宽维度上 图片 token 的位置依然是 0,1,…,n?那高宽维度 text 和 image 做 attention 也有点怪了吧?
感觉这样是不是更合适:

即:
- 对角线为时间维度,每个 image/text token 增加一个
- 高宽维度递增,text 高宽算 1
但是这样有个问题,text token 的编码就不是 1D 的了,比如上图的 text-2,位置就变成 (2, 5, 5) 了,这样如果 text token 中间隔一张图片,位置信息就有点别扭了,考虑图片的高宽采用 “叠加” 的方式?上图中 image1 的高宽上从 (3, 3) 开始的,如果改成从 (1, 1) 开始就没上诉问题了

但是带来新的问题,在前面 image 的宽高维度可能超过了后面 text,好像也有点问题。
好像怎么改都有点问题…
具体的还是等看 qwen2.5-vl 的时候,看看源码
统一图片和视频的处理
- 视频每一秒采样 2 帧,用深度为 2 的 3D convolutions 处理视频
- 具体怎么做的没细说
- 3D convolutions 相比 2D convolutions 就是从(𝑐,ℎ𝑒𝑖𝑔ℎ𝑡,𝑤𝑖𝑑𝑡ℎ) 变为了(𝑐,𝑑𝑒𝑝𝑡ℎ,ℎ𝑒𝑖𝑔ℎ𝑡,𝑤𝑖𝑑𝑡ℎ)
- 动态调整视频的分辨率,保证每个视频最多 token 数量是 16384(所以这里大概是在一定时长 + 分辨率内的视频是无损的(当然每秒也有采样)
训练
和 Qwen-vl 一样,沿用三阶段训练
基础配置
- LLM 部分用 qwen2 初始化,vision encoder 部分用 DFN’s ViT 初始化(位置编码换成了 2D-rope)。(DFN 就是用一个模型来过滤出高质量的图像-文本数据集,过滤逻辑可以简单理解成, CLIP 相似度打分就是 “质量分”,比如打分 0.1 很有可能就是个 badcase,0.9 大概率就是一个高相似度的数据就保留下来,然后可以取 top 10% 的图-文数据保留下来,再重新训练模型)
stage1-预训练
qwen-vl 里面 stage1 是只有 5 billion 的图文数据,qwen2-vl 扩展了很多:
- 图像-文本对
- OCR 数据
- 图像-文本交错文章
- 视觉问答数据集
- 视频对话
- 图像知识数据集
一共 600 billion tokens (包括 image 的 token)
stage2-多任务预训练
和 qwen-vl 类似,也是多任务的训练,几个重点:
- 一共 800 billion tokens (包括 image 的 token)
- 提高图文混合数据 (具体没说是什么)
感觉这里 stage2 和 stage1 界限有点模糊,不像 qwen-vl 界限很明确,qwen-vl 的 stage1 是只有 caption 数据(image-text pairs),属于容易获取的弱监督数据,但是 qwen2-vl 里面 stage1 也有多个任务,那为啥不和 stage2 一起训算了?
stage3-SFT
会有:
- 纯文本的 SFT 数据(感觉是把 qwen2 的 sft 数据全部拿过来了)
- 图像问答
- 文档解析
- 多图像比较
- 视频理解
- 视频流对话和基于 agent 的交互、
格式可以参考:



Qwen2.5-VL Technical Report(2025-02)
细节
- 提升视觉识别、目标定位、文档解析、长视频理解的能力
- 可以做目标检测、从发票、表格提取结构化数据以及图表、图解和布局的详细分析
- qwen2-vl 的时候说是性能已经可以和 gpt-4o、claude 3.5 比较了,qwen2.5-vl 的时候说已经可以相提并论了。
- 模型迭代速度变快了,qwen-vl → qwen2-vl 花了一年多,qwen2-vl → qwen2.5-vl 花了 5 个月, 3 咋还不出呢。