Qwen-VL
论文标题:《Qwen-VL: A Versatile Vision-Language Model for Understanding, Localization, Text Reading, and Beyond》
论文链接:https://arxiv.org/pdf/2308.12966.pdf
项目:https://github.com/QwenLM/Qwen-VL/tree/master
模型
基本架构
- LLM:使用了来自Qwen-7B模型的预训练权重
- 视觉编码器:采用了Vision Transformer(ViT)架构,用于处理输入图像并生成一组图像特征。在训练和推理过程中,将输入图像调整到特定的分辨率,然后通过将图像分割成大小为14的图块来处理它们。预训练权重来自于OpenAI的clip的ViT-bigG。
- 位置感知的视觉-语言适配器(Position-aware Vision-Language Adapter):为了缩短图像token长度,同时作模态映射的模块。由一个单层的交叉注意力模块构成,使用一组可训练的向量(嵌入)作为查询向量,使用来自视觉编码器的图像特征作为交叉注意力操作的键。随机初始化。
各部分参数量:
位置感知的视觉-语言适配器(Position-aware Vision-Language Adapter)
作用
该组件的作用在于使得长序列的图像特征变得更加紧凑,从而提高了处理效率。同时,考虑到位置信息可以帮助模型更准确地理解图像细节,因此在压缩过程中保留了这方面的信息。
实现
该适配器由一个单层交叉注意力模块组成。
模块使用一组可训练的向量(嵌入)作为查询向量,使用来自视觉编码器的图像特征作为键进行交叉注意力操作。
将图像特征序列压缩成了固定长度的256。
考虑到图像中位置信息的重要性,作者引入了2D绝对位置编码到交叉注意力机制的查询-键对中。
训练
stage1:预训练,目标是使用大量的图文对数据对齐视觉模块和LLM的模态,这个阶段冻结LLM模块的参数;
stage2:多任务预训练,使用更高质量的图文多任务数据(主要来源自开源VL任务,部分自建数据集),更高的图片像素输入,全参数训练;
stage3:指令微调阶段,这个阶段冻结视觉Encoder模块,使用的数据主要来自大模型Self-Instruction方式自动生成,目标是提升模型的指令遵循和多轮对话能力。
具体实现
stage1 预训练
训练设置
- 在Qwen-VL模型的第一个预训练阶段,针对文本标记的训练目标是最小化文本标记的交叉熵(cross-entropy)。具体来说,模型的任务是尽量减小文本标记的预测与真实标记之间的差距,以提高文本生成的准确性。
- 使用了AdamW优化器:β1 = 0.9,β2 = 0.98,ε(eps)= 1e−6
- 余弦学习率调度,最大学习率设置为2e−4,最小学习率为1e−6,并使用了线性热身(linear warm-up)的方法,热身步数为500步。
- 权重衰减(weight decay)为5e−2和梯度剪切(gradient clipping)为1.0来优化模型的训练过程。
数据
stage2 多任务预训练阶段
设置
在第二个多任务预训练阶段:
- Qwen-VL模型采用了高质量和细粒度的视觉-语言(VL)标注数据
- 采用了更大的输入分辨率和交错的图像-文本数据
具体来说,Qwen-VL模型在第二个预训练阶段同时进行了以下七个任务的训练:
- 图像描述(Captioning)
- 视觉问答(VQA)
- 定位任务(Grounding)
- 参考定位和定位描述的双重任务(Ref Grounding 和 Grounded Cap.)
- 光学字符识别(OCR)
- 文本生成(Text Generation)
将视觉编码器的输入分辨率从224 x 224增加到448 x 448,以减少图像下采样导致的信息损失。我们解锁了大型语言模型,并训练整个模型。训练目标与预训练阶段相同。使用AdamW优化器,β1=0.9,β2=0.98,eps=1e-6。我们训练了19000步,热身400步,采用余弦学习率调度。
数据
stage3 监督微调
通过指令微调对Qwen-VL预训练模型进行了微调,以增强其遵循指令和对话能力,得到交互式的Qwen-VL-Chat模型。多模态指令微调数据主要来自通过LLM自我指令生成的字幕数据或对话数据,这些数据通常只涉及单图像对话和推理,并仅限于图像内容理解。
训练过程中混合了多模态和纯文本对话数据,以确保模型在对话能力上的通用性。
数据量为35万。
只监督答案和特殊标记(示例中的蓝色部分),而不监督角色名称或问题提示,以确保预测和训练分布之间的一致性。在这一阶段,我们冻结视觉编码器,优化语言模型和适配器模块。具体来说,Qwen-VL-Chat的全局batch大小为128,学习率计划的最大学习率为1e-5,最小学习率为1e-6,线性热身3000步。
添加图像标识:在对话中,为了区分不同的图像输入,作者在每个图像前添加了一个形如"Picture id:"的字符串,其中id对应了图像输入的顺序。
对话格式设计:作者使用了ChatML格式来构建指导微调的数据集。在这个格式中,每个对话交互的陈述都被标记了两个特殊的token((<|im_start|> and <|im_end|>),用于便于对话的终止。
数据
- Qwen-VL模型的第一个预训练阶段使用了一个大规模、弱标记的、通过网络爬取得到的图像文本对数据集。这个预训练数据集包括了来自公开资源和部分内部数据的图像文本对。为了保证数据质量,研究人员对数据集进行了清理,去除了其中的某些模式。在清理后,原始数据集中包含了50亿对图像文本对,而剩余的数据经过处理后仍然有14亿对,其中77.3%为英文文本,22.7%为中文文本。
- 为了增强模型对细节的理解和定位能力,Qwen-VL的训练过程涵盖了数据形式,包括了区域描述、问题和检测。与传统的图像-文本任务不同,这些数据形式要求模型准确理解和生成符合指定格式的区域描述。
- 各阶段数据规模:(1)5B (2)76.8 M (3) 350k
- 改善OCR任务表现:(1)收集pdf和HTML格式的数据,(2)生成合成OCR数据
- 边界框输入和输出的处理:(1)首先进行了一个归一化处理,将其范围限定在[0, 1000)之间,(2)将归一化后的边界框转化成了一个特定的字符串格式:“(X_top left,Y_top left),(X_bottom right,Y_bottom right)”。(3)这个字符串被看作文本进行处理,无需额外的位置词汇;(4)为了区分检测字符串和普通文本字符串,作者在边界框字符串的开始和结束处添加了两个特殊的标记< box >< /box >
- 数据清洗:Qwen-VL对数据的精细化清洗:在1阶段的pre-training中,Qwen-VL使用的的是公开数据集的图像文本对,其中包含了大量的噪声,为了清洗数据,Qwen-VL做了如下几个步骤:
移除图像长宽比过大的对
移除图像过小的对
根据CLIP评分移除质量较差的对(不同的数据集使用的不同的阈值)
移除文本中含有非英文或非中文字符的对
移除文本中含有表情符号的对
移除文本长度过短或过长的对
清理文本中的HTML标签部分
根据特定不规则模式清理文本(个人认为就是一些硬规则+正则表达式)
训练参数:
Qwen2-VL
论文标题:《Qwen2-VL: Enhancing Vision-Language Model’s Perception of the World at Any Resolution》
论文:https://arxiv.org/pdf/2409.12191
项目:https://github.com/QwenLM/Qwen2-VL
当前最强的开源MLLM之一。与上一代相比支持动态分辨率,视频理解,以及Agent能力。放出了3种规模的模型。
Qwen2-VL系列旨在重新定义传统的固定分辨率视觉处理方法,解决了在处理不同分辨率图像时的效率和准确性问题。主要是引入了“Naive Dynamic Resolution”机制,使模型能够动态处理不同分辨率的图像,并生成不同数量的视觉tokens,从而提升视觉表示的效率和准确性。
模型
基本架构
LLM+视觉编码器结构,无adapter。
LLM:Qwen2
视觉编码器:实现了一种具有大约675百万参数的ViT,能够处理图像和视频输入。
原生动态分辨率 Naive Dynamic Resolution
Qwen2-VL现在可以处理任意分辨率的图像,动态将其转换为可变数量的视觉tokens。为支持此功能,修改了ViT,去除了原始的绝对位置嵌入,并引入了2D-RoPE,以捕捉图像的二维位置信息。
在推理阶段,不同分辨率的图像被打包成一个单一序列,打包长度受到控制,以限制GPU内存使用。此外,为减少每幅图像的视觉tokens,在ViT后采用了一个简单的多层感知器(MLP)层,将相邻的2×2个tokens压缩为一个token,并在压缩的视觉tokens的开头和结尾放置特殊的<|vision_start|>和<|vision_end|> tokens。因此,分辨率为224×224的图像在使用patch_size=14的ViT编码后,将在进入LLM之前压缩为66个tokens(16*16/4+2)。
多模态旋转位置嵌入 Multimodal Rotary Position Embedding (M-RoPE)
与传统的1D-RoPE(用于LLM)仅能编码一维位置信息不同,M-RoPE有效地建模了多模态输入的位置信息。这通过将原始旋转embedding分解为三个组成部分:时间、高度和宽度来实现。对于文本输入,这些组件使用相同的位置ID,使得M-RoPE在功能上等同于1D-RoPE。
在处理图像时,每个视觉token的时间ID保持不变,而高度和宽度组件则根据token在图像中的位置分配不同的ID。对于视频,视为一系列帧,每帧的时间ID递增,而高度和宽度组件遵循与图像相同的ID分配模式。在输入包含多种模态的情况下,每种模态的位置编号通过将前一模态的最大位置ID +1 来初始化(如图中文本输入的第一个位置编码为4)。M-RoPE不仅增强了位置信息的建模,还减少了图像和视频的位置ID值,使模型在推理时能够推断更长的序列。
统一的图像与视频理解
Qwen2-VL采用混合训练方案,结合图像和视频数据,确保在图像理解和视频理解方面的熟练度。为了尽可能完整地保留视频信息,以每秒两帧的频率采样每个视频。此外,将3D卷积与深度为二的卷积结合,以处理视频输入,使模型能够处理3D pipeline 而非2D块,从而在不增加序列长度的情况下处理更多视频帧。
为了保持一致性,每幅图像被视为两个相同的帧组成的视频。为了平衡长视频处理的计算需求与整体训练效率,动态调整每个视频帧的分辨率,将每个视频的总tokens数限制为16384。该训练方法在模型理解长视频的能力与训练效率之间取得了平衡。
训练
遵循Qwen-VL,采用三阶段训练方法。
- Stage1: 专注于训练ViT组件,利用大量图像-文本对提升大型语言模型(LLM)的语义理解。
- Stage2:全参训练,使用更广泛的数据进行更全面的学习。
- Stage3:冻结ViT,使用指令数据集进行LLM的微调。
Stage1 预训练
包括图像-文本对、光学字符识别(OCR)数据、交错的图像-文本文章、视觉问答数据集、视频对话和图像知识数据集。数据源主要来自清理过的网页、开源数据集和合成数据,数据截止日期为2023年6月。
在初始预训练阶段,Qwen2-VL接触到约6000亿个tokens。Qwen2-VL的LLM组件使用Qwen2中的参数初始化,而视觉编码器则基于DFN的ViT初始化。原DFN ViT中的固定位置embedding被RoPE-2D替代。此阶段主要学习图像-文本关系、通过OCR进行文本内容识别、图像分类任务,为模型建立视觉-文本关联的扎实基础。
Stage2 多任务预训练
涉及额外的8000亿个与图像相关的数据。此阶段引入了更多混合图像-文本内容,促进了对视觉和文本信息之间相互作用的更细致理解。视觉问答数据集的纳入提升了模型对图像相关查询的响应能力,同时,多任务数据集的引入对模型同时处理多种任务的能力至关重要,这在处理复杂的现实世界数据集时尤为重要。纯文本数据继续在维持和提高模型语言能力方面发挥关键作用。
在整个预训练阶段,Qwen2-VL处理了总计1.4万亿个tokens,包括文本tokens和图像tokens。然而,训练过程中仅对文本tokens提供监督。
Stage3 指令微调
采用ChatML格式构建指令跟随数据集。该数据集不仅包括纯文本对话数据,还包含多模态对话数据。包括:图像问答、文档解析、多图像比较、视频理解、视频流对话和基于代理的交互。
数据
数据格式
与Qwen-VL一致,Qwen2-VL也使用特殊tokens来区分视觉和文本输入。 <|vision_start|>和<|vision_end|>插入在图像特征序列的开始和结束,以划定图像内容。
对话数据
使用ChatML格式构建指令调优数据集,每个交互的陈述用两个特殊tokens(<|im_start|>和<|im_end|>),以便于对话的结束。蓝色tokens的部分表示受监督的部分。
视觉定位
为了赋予模型视觉定位能力,边界框坐标被标准化到[0, 1000)范围内,并表示为左上和右下的像素点坐标。
Tokens <|box_start|>和<|box_end|>用于标记边界框文本。为了准确地将边界框与其文本描述联系起来,引入了tokens <|object_ref_start|>和<|object_ref_end|>,以指示边界框所引用的内容,从而使模型能够有效地解释和生成特定区域的精确描述。
视觉代理
为了将Qwen2-VL发展为通用的VL-Agent,将各种代理任务(如UI操作、机器人控制、游戏和导航)视为顺序决策问题,使Qwen2-VL能够通过多步行动执行来完成任务。对于每个任务,首先定义一组可允许的动作和关键词模式(下划线)以供功能调用。然后,Qwen2-VL分析观察结果,进行推理和规划,执行所选动作,并与环境互动以获取新观察。这一循环反复进行,直到任务成功完成。