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)

模型结构

notion image

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-多任务预训练

stage2 的训练数据类别,标蓝的是计算 loss 的部分
stage2 的训练数据类别,标蓝的是计算 loss 的部分
notion image
  • 训练包括 LLM 的所有模块
  • 训练数据会有图文交错的数据
  • 图片大小提升至 448 × 448
  • OCR 数据可以用截图合成

stage3-sft

notion image
  • 只训练 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 这篇论文,大致看了一下,它的逻辑是这样的:
notion image
  • 动机:之前的方法通常会把图片处理为同一分辨率(同一个 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 就默认和时间维度一致
notion image
这里不是很理解,感觉有点问题,这里其实默认 text 部分的 height 和 width 位置是随时间维度(序列方向)递增的,但是从高宽维度 text 和 image 做 attention 就有点怪了?
假设 image_n position id 是 10000,下一个 text token position id 是 10001,但是高宽维度上 图片 token 的位置依然是 0,1,…,n?那高宽维度 text 和 image 做 attention 也有点怪了吧?
感觉这样是不是更合适:
notion image
即:
  • 对角线为时间维度,每个 image/text token 增加一个
  • 高宽维度递增,text 高宽算 1
但是这样有个问题,text token 的编码就不是 1D 的了,比如上图的 text-2,位置就变成 (2, 5, 5) 了,这样如果 text token 中间隔一张图片,位置信息就有点别扭了,考虑图片的高宽采用 “叠加” 的方式?上图中 image1 的高宽上从 (3, 3) 开始的,如果改成从 (1, 1) 开始就没上诉问题了
notion image
但是带来新的问题,在前面 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 的交互、
 
格式可以参考:
notion image
 
目标检测相关任务的输入输出格式
目标检测相关任务的输入输出格式
agent 的数据还是很有意思的
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 咋还不出呢。