文章链接:https://arxiv.org/pdf/2308.12966
发布时间:2023.08
Copyright (c) Wang-Luning. All Rights Reserved.
Qwen-VL可输入图像+文字,输出文字。其以Qwen-7B为backbone,通过引入一个视觉感知器和一个位置感知的适配器来曾模型的视觉特征感知能力。也即,Qwen-VL包括前三个模块:
模态编码器:
使用一个视觉编码器(Visual Encoder),用于编码图片的特征。
具体而言,使用一个以CLIP为预训练目标的预训练好的ViT模型来抽取图像特征,图片最终会被处理成一个形状为[1024, 1664]的表征张量(可以看成一个长度为1024,维数为1664的由visual token构成的序列)。
输入投影层:
使用一个位置感知的适配器(Position-Aware adapter),用于将图片特征映射到LLM的特征空间。
为了进一步压缩visual token序列的输入长度,从而避免image feature sequence过长导致的效率问题,引入一个adapter来压缩图像特征。其是一个单层的随机初始化的cross-attention层,具有256个可学习的query,图像特征会被映射成keys和values,这样这些queries的作用就是提取KV中的信息,并最终生成长度固定为256的compressed image feature sequence,它会被输入到LLM中。
另外,为了感知图片内部的位置,将2D绝对位置编码引入了query和key中,从而减少了压缩过程中可能丢失的细节。
LLM backbone:
使用Qwen-7B Base模型
模型输入:
使用<img>, </img>特殊token来包裹图片feature tokens,来区分文本和图片信息。为了做grounding任务,对图像中bound ing box统一采用左上-右下的格式表示,并使用<box>,</box>包裹。对于描述bounding box的文本,用<ref>, </ref>包裹。例如:
训练过程:
分为3个阶段,包括2个预训练阶段和1个SFT阶段:
阶段1:单任务大规模预训练(pretraining)
该阶段冻结LLM,优化vision encoder和adapter层,输入数据为爬取的大量质量一般的image-text pairs,训练目标是最小化文本tokens的cross-entropy(也即根据图片预测text)。该步的主要目的是通过大规模预训练来将vision模态和语言模态进行对齐
阶段2:多任务预训练(multi-task pretraining)
该阶段所有参数均可更新,目的是端到端地提升模型在多模态任务上的能力。采用图文混排的、图像分辨率更高的更高质量数据(如上边的模型输入示例),且同时在7个任务上进行训练,包括VQA、captioning、grounding等,以及为了提升语言生成能力也加入了1个语言任务。该阶段的数据量比第1阶段少了2个数量级
阶段3:有监督微调(SFT)
对LLM(+adapter)进行指令微调,冻结vision encoder,来提升其instruction following和dialogue能力。输入数据是按照chat格式处理过的图文数据