GIT A Generative Image-to-text Transformer for Vision and Language 论文笔记
https://blog.kamino.link/2022/10/11/GIT/
Arxiv上Preprint的一篇微软的论文,结构比较简单,用Image Encoder先编码图像,然后图像和文本在一个类BERT的模型中训练,没有对视频做特别的优化,但在各个任务上都SOTA。
- 论文链接:GIT: A Generative Image-to-text Transformer for Vision and Language (arxiv.org)
- 开源代码:microsoft/GenerativeImage2Text: GIT: A Generative Image-to-text Transformer for Vision and Language (github.com)
模型架构
GIT
GIT进行五种任务:Image Captioning、Image QA、Video Captioning、Video QA、Text Recognition、Image Classification。
图像或者图像序列将会通过Image Encoder编码为多个token,对于序列还会增加额外的可学习的temporal embedding。同时文本每个word也tokenize&embed成word token。之后,visual token和word token在一个统一的Text Decoder中解码为文本(别的地方一般称之为Multimodal Encoder)。对于Captioning、QA和Text Recognition都比较直观,这里还会通过输出目标类别对应的文字的方式来进行Image Classification任务。
GIT的Image Encoder来源于微软之前的Florence模型(也是一个大规模统一预训练模型),是一个叫做CoSwin的模型,这是一个通过CvT论文中方法修改过的Swin Transformer(CvT和Swin也都是微软家的),其通过将Swin中的patch embedding和patch merging替换为卷积来将CNN与Transformer结合(如下图)。
CvT
提到的论文:
Florence: A New Foundation Model for Computer Vision
CvT: Introducing Convolutions to Vision Transformers
这个架构与SwinBERT有些类似(可以参考我另一篇博客,同样也是微软家的),他们同样用Transformer架构的视觉编码器得到token然后送进类BERT的架构中进行文本生成任务,也同样随机初始化后面这个类BERT的架构(这个是有人做过实验说明随机初始化更好的)。如下图,在进行生成任务时,注意力mask也和SwinBERT类似,视觉的token只能对视觉token施加注意力,word token则能对visual token和之前生成的word施加注意力。
与SwinBERT不同的是,GIT使用Language modeling(LM)进行训练,而不是Masked Language modeling(MLM)。原因是因为LM训练得更快,作者分析说MLM一次只能训练一部分token的生成,而LM能训练所有token。
GIT还有一点与SwinBERT不同,就是后面接的多模态的Transformer,居然只是6层的Transformer网络,是SwinBERT的一半。
GIT标配700M参数量,还有更小的GITB和GITL,以及更大的GIT2。
不同参数量的变种
Video Captioning实验分析
由于我对Video Captioning更感兴趣,所以就分析这方面的实验。大表如下,MSVD数据集上感觉指标已经到头了,180.2的CIDEr。而在更大的MSRVTT数据集和VATEX数据集上也获得了非常大的提升。然而,YouCook2、TVC上结果没有那么明显。
其只有129M参数量的GITB效果也算十分不错,对于缺少卡的炼丹师来说也许能够进行更大范围的应用。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!
论文要点摘录
1 Network Architecture
图像编码器基于对比预训练模型(Yuan et al.2021)。输入是原始图像,输出是紧凑的2D特征图,其被展平为特征列表。通过额外的线性层和layernorm层,图像特征被投影到D维,这是文本解码器的输入。【我们使用用于对比任务预训练的图像编码器,因为最近的研究表明这种图像编码器具有优越的性能。我们还观察到VL性能随着更强的图像编码器而显著提升。我们的方法相当于按顺序分离两个任务(对比任务和生成任务):(i)使用对比任务来预训练图像编码器,随后(ii)使用生成任务来预训练图像编码器和文本解码器。】
文本解码器是预测文本描述的transformer模块。transformer模块由多个transformer块组成,每个transformer块由一个自注意层和一个前馈层组成。文本被标记化切分并嵌入到D维中,然后添加位置编码和layernom层。图像特征与文本嵌入的连接作为transformer模块的输入。文本以[BOS]令牌开始,并以自回归方式解码,直到[EOS]令牌或达到最大步长。应用如图3中的seq2seq注意掩码,使得文本标记仅依赖于前面的标记和所有图像标记,并且图像标记可以彼此注意。【这与单向注意力掩码不同,在单向注意力掩码中,不是每个图像令牌都可以依赖于所有其他图像令牌。】
随机初始化文本解码器,而不是很好地初始化图像编码器。【可能是因为BERT初始化无法理解图像信号,这对于VL任务至关重要。平行工作Flamingo(Alayrac等人,2022)采用了类似的图像编码器+文本解码器的架构,但它们的解码器是预训练和冻结的,以保留大型语言模型的泛化能力。在我们的GIT中,所有参数都被更新以更好地适应VL任务。】
另一种架构是基于交叉注意的解码器,以合并图像信号,而不是与自注意拼接。从经验上看,在大规模预训练中,我们发现基于自注意的解码器总体上获得了更好的性能,而在小规模设置中,基于交叉注意的方法获胜。【一个可能合理的解释是,通过充分的训练,解码器参数可以很好地处理图像和文本,并且图像令牌可以更好地更新用于文本生成的自注意力。在交叉注意的情况下,图像令牌不能彼此注意。】
2 Pre-training
对于每个图像-文本对,设I是图像,yi,i ∈ {1,· · ·,N}是文本令牌,y0是[BOS]令牌,并且yN+1是[EOS]令牌。我们应用语言建模(LM)损失来训练模型。也就是说,
其中CE是标签平滑为0.1的交叉熵损失。
3 Fine-tuning
- 对于image captioning任务,由于训练数据格式与预训练中的相同,因此我们应用相同的language modeling (LM)任务来微调GIT。
- 视频领域如video captioning,模型经过简单架构变化也可以实现有竞争力的、甚至新的SOTA性能:
- 从每个视频剪辑中采样多个帧,并通过图像编码器独立地对每个帧进行编码。
- 添加一个可学习的时间嵌入(初始化为零),并连接来自采样帧的特征。最终的特征表示以与用于captioning和QA的图像表示类似的方式使用。
- 将我们的生成模型应用于图像分类任务,其中类名被解释为图像标题,并且我们的GIT被微调为以自回归的方式预测结果。
4 Experiments
4.1 关键设置说明
1、预训练数据为0.8B image-text pairs,包括:COCO (Lin et al., 2014), Conceptual Captions(CC3M) (Sharma et al., 2018), SBU (Ordonez et al., 2011), Visual Genome (VG) (Krishna et al., 2016), Conceptual Captions (CC12M) (Changpinyo et al., 2021), ALT200M (Hu et al., 2021a), and an extra 0.6B data following a similar collection procedure in Hu et al. (2021a).
2、采用预训练对比模型 (Yuan et al., 2021)参数对图像编码器初始化
3、The hidden dimension (D) is 768.
4、文本解码器由6个随机初始化的transformer blocks组成.
5、总模型参数量为 0.7 billion.
6、The learning rates of the image encoder and the decoder are 1e−5 and 5e−5, respectively, and follow the
cosine decay to 0.
7、The total number of epochs is 2.
8、During inference, the beam size is 4 and the length penalty (Wu et al., 2016) is 0.6 by default.
4.2 附加说明
4.2.1 Data Preprocessing
在保持纵横比的情况下,确保图像的短边不大于384,长边不大于640。
同时,所有图像都以JPEG格式重新保存,质量为90。
0.8B image数据大小达到39 TB。
不对微调数据集应用此类预处理。
4.2.2 Platform
数据存储:Azure Blob Storage
训练:A100 provisioned by Azure Machine Learning
代码:python with packages including Pytorch, DeepSpeed, Transformers, maskrcnn-benchmark, CLIP, OSCAR, and VirTex (Desai & Johnson, 2021).
4.2.3 Network
GITB使用CLIP/ViT-B/16作为图像编码器,并在10 M个图像-文本对或4 M个图像(COCO,SBU,CC 3 M和VG的组合)上进行预训练。
GITL使用CLIP/ViT-L/14作为图像编码器,并在20 M个图像-文本对或14 M个图像(10 M图像-文本对与CC 12 M的组合)上进行预训练。
GIT使用对比任务来预训练图像编码器(Yuan et al.2021),随后使用生成任务来预训练图像编码器和文本解码器。
三个模型变体共享相同的预训练超参数:
- 学习速率在前500次迭代中预热,然后跟随余弦衰减到0。
- 对于图像编码器,学习率为1 e-5,对于随机初始化的文本解码器,学习率乘以5。
- 批大小为4096。
- 参数由AdamW更新,其中β1 = 0.9,β2 = 0.999。
- epoch = 2。
- 当对小规模数据集进行预训练时,我们使用30个epoch,而不是像在0.8B数据上那样使用2个epoch。
a larger text decoder shows no improvement.
GIT 2:进一步扩大模型大小到5.1B和预训练图像的数量到10.5B(12.9B图像-文本对)。图像编码器基于DaViT被缩放到4.8B并且用UniCL任务进行预训练。文本解码器被放大到0.3B,其超参数(transformer的层数、隐藏维度等)遵循BERT-Large。
4.2.4 Visual Captioning
Image captioning任务:微调10个epochs 。批量大小为512,学习率为2.5e−6。
Video captioning任务:微调的超参数如表21所示。训练期间,我们随机抽样等间隔的6帧,对这些帧应用相同的随机裁剪。在推理阶段,我们均匀采样6帧进行中心裁剪。