论文:ViLT: Vision-and-Language Transformer Without Convolution or Region Supervision
一、介绍
ViLT也是一个极其简单的视觉-文本多模态的框架。其最主要贡献:就是把多模态学习框架中的目标检测,也就是论文中反复强调的Region Feature(区域性特征)直接拿掉了。这个操作简直算是神来之笔,因为它极大地简化了视觉模态特征的抽取过程,大大提高了模型的推理速度,可称之为多模态领域一个里程碑式的工作。
1.1 抽取视觉特征的三种方式
现有的VLP模型(Vision-and-Language Pre-training,视觉文本多模态模型)抽取文本特征基本上都使用 pre-trained BERT的 tokenizer来得到text embedding,但抽取视觉特征存在着差异。往往处理视觉特征的网络越复杂,模型效果就越好,所以抽取视觉特征是现有VLP模型的瓶颈。图上图所示,获取visual embedding的方法总共有三大类:
- Region feture:通常采用Faster R-CNN二阶段检测器提取区域性特征,这种操作也是最贵的;比如图像经过ResNet101 backbone(一系列的卷积层用于提取图像的feature maps)提取特征,再经过RPN(Region Proposal Network,区域生成网络)得到一些RoI(Region of interest,感兴趣区域),然后使用NMS(Non-Maximum Suppression,非极大抑制)过滤冗余的RoI,最后经过RoI Head(在RPN生成的候选区域中,对候选区域进行分类和边界框回归的神经网络模块)得到一些一维的向量(Region Feature),也就是一个个bounding box。
- Grid feature:将CNN backbone得到的feature map,作为网格特征,大大简化了计算量。比如将ResNet50最后得到的7×7特征图拉直为一个序列,或者是上一层的14×14的特征图。
- patch projection:使用类似ViT模型中的patch projection层直接得到patch embeddings,ViLT是首个这么做的,有三个原因:
- 不需要使用额外的网络。无论是CNN backbone还是目标检测,都非常贵。
- 不需要缓存特征。Region feture和Grid feature都需要在线下使用预训练的模型提前抽取好图片特征,然后再训练。虽然这样训练还是比较轻量的,但在部署的时候是一个很大的局限性。真实场景里每时每刻都在生成新数据,都需要抽取新数据的特征,这时推理速度就是一大瓶颈了,所以作者才想设计一个更轻量更简单的视觉特征抽取方案。
- ViT的patch projection层表现很好。和 Vision Transformer(简称ViT)的预处理一样,通过一个Linear Embedding层实现,将 patch 变成 token。ViLT在视觉方面的运行时间仅仅需要0.4ms,相比传统模型的运行时间大大减少,且模型效果并不会下降很多。
在文本方面,这些模型都是基本一样的,通过一个Embedding矩阵,变成一个个的word token。得到了视觉的序列和文本的序列后输入到Modality Interaction(基本都是Transformer)进行模态之间的融合。
1.2 模态融合
多模态特征的融合有两种常见方式:
- Single-stream:单通路结构,文本特征和图像特征直接concat连接,然后输入一个transformer进行交互;
- Dual-stream:双通道结构,文本特征和图像特征分别过一个文本模型和图像模型,充分挖掘单模态特征,然后再经过一个transformer layer做融合。
这两种方法的效果其实差不多,dual-stream明显更贵,参数量、计算量更多,所以作者采用了Single-stream。
二、导论
从Transformer出现之后,NLP领域基本上处处都是Transformer。所以对于文本出来说,Tran former是最好的选择。但是对于VLP来说,就必须将图像的像素转成带有语义性质的具有离散性的特征。这样才能与文本的tokens有效匹配,后续才能进行两种模态的融合。
问:为什么用目标检测器来处理图像特征?
- 图像的像素不能直接扔给Transformer,不然序列长度就太长了,Transformer处理不了。ViT提出将图片分割成一个个固定大小的patch,然后使用线性层映射为patch embedding输入网络(比如patch size=16×16时,处理后序列长度从224×224降为14×14)。
- 上面提到了VLP想要的是离散的且语义性强的特征表示形式,而目标检测正好是一个离散化的过程,返回的是 bounding box,它代表一个个物体,有明确的语义信息(可类比文本中的token),而且还是离散化的。
- 跟当时的 VLP 下游任务有关,当时主要是 VQA(Visual Question Answering)、Image Captioning、Image Retrieval 等等(这些任务的简介可以参考VL (Vision and Language) 任务简介及数据集),这些任务往往都跟物体有非常直接的联系,有非常强的对物体的依赖性。
但是,使用目标检测器来提取图像特征实在是太浪费资源,于是就开始尝试把视觉这里的计算量降下来。其中一个尝试就是Pixel-BERT,它是用了一个在 ImageNet 上预训练好的 ResNet,将ResNet最后得到的特征图当成是一个离散的序列,然后和文本特征一起输入transformer做融合,速度就快很多。
ViLTD的三大贡献:
- 使用 patch projection层抽取视觉特征,极大简化了多模态学习框架,减少了运行时间和参数量;
- ViLT是第一个不使用卷积特征和区域性特征的同时(Without Convolution or Region Supervision),模型性能还表现的比较好的模型;
- 首次在VLP训练中使用了整词掩码和图像数据增强,并被证明可以明显提升模型性能。
三、背景
这里作者给出了一张类似于总结的图,综合的将其他的论文与自己的进行对比。(类似小综述)
首先,作者根据
(1)图像和文本的表达力度(参数量/计算量)是否平衡(图像和文本特征一样重要,理论上比重应该差不多);
(2)多模态特征怎样融合;
将VLP模型归结为四类,如下图:
其中VE,TE,MI分别表示visual embedder,textual embedder,和 modality interaction。
- (a):VSE/ SCAN等模型的做法,视觉特征的处理远大于文本特征,模态融合只使用了简单的点乘操作或很简单的浅层attention网络;即VE > TE > MI
- (b):CLIP,每个模态单独使用transformer encoder,两者计算量差不多。特征融合部分,只是简单的计算了一下图文特征的相似性;即 VE = TE > MI。CLIP特别适合需要图文特征(GroupViT/GLIP等)或者是图文检索的任务,但做VQA或者visual reasoning(视觉推理,更难的VQA)这种需要视觉推理的任务时,会稍逊一筹。因为一个简单的不可学习的点乘,是没法做深层次的特征融合和分析的。
- (c):这些年80%的工作都是这个方向,比如ViLBERT、UNITER、Pixel-BERT等等。文本侧很轻量,但图像侧使用很重的CNN抽取特征;最后特征融合使用了Transformer,所以VE > MI > TE;
- (d)::本文的模型,ViLT,借助 ViT 的想法把图像部分也变得非常轻量。
四、ViLT
4.1 模型结构
- 文本经过pre-trained BERT tokenizer得到word embedding(前面有CLS token,图中*表示)
- 图片经过ViT patch projection层得到patch embedding(也是用*表示CLS token);
- 文本特征+文本位置编码+模态嵌入得到最终的text embedding,图像这边也是类似的操作得到image embedding;二者concat拼接之后,一起输入transformer layer,然后做MSA交互(多头自注意力)
问:为什么要进行嵌入区分?
模态嵌入即Modal-type embedding,使用0代表文本,1代表图像。因为在Single-stream模型中,图文特征是直接拼在一起输入一个transformer。如果不进行标注,模型是不知道哪一块是文本,哪一块是特征,这样不利于学习。加了模态嵌入可以区分之后,模型就可以在训练时找出图文之间的关系,学习的更好。
对于维度的计算如下图所示:
结合论文给出的公式:
-
文本
tokenizer后得到L×H维的word embedding,再加上(L+1)×H维的位置编码和cls token得到文本嵌入
,同理得到
维的图片嵌入
;
-
和
分别加上各自的模态嵌入
和
之后,拼接得到输入序列
;
-
输入Transformer层后做后续的MSA等操作得到最后的输出
。
4.2 目标函数
ViLT使用了一般VLP模型常用的目标函数,即图文匹配loss( ITM,image text matching)和 BERT的掩码学习loss(MLM,Masked Language Modeling)。另外ViLT还使用了Word Patch Alignment(WPA)。
- ITM loss:以50%的概率将文本对应的图片随机替换成数据集中的其它图片,然后将文本CLS token对应输出使用一个FC层映射成一个二值logits,用来判断图像文本是否匹配;
- MLM loss:随机mask一个文本token,然后将其重建出来。
- 其实图片这边也可以使用masked patch 重构任务,但是当时MAE还没出来,重构效果还不够好,所以作者没有这么做。后续有VL-BEiT,就使用了图像-文本掩码任务(masked vision-language modeling )。
- WPA:简单理解就是将文本和图像的输出都当做一个概率分布,然后使用最优运输理论计算一下两者的距离
4.3 Whole Word Masking
将整个词都 mask 掉。作者在论文中举例,如果有单词 “giraffe”,如果用 tokenizer 如 BPE 等,那么 “giraffe” 就会被分成 [“gi”, “##raf”, “##fe”],此时这些小部分才是一个个的 token,假设此时把其中的一个 token “##raf” mask 掉,即变成 [“gi”, “[MASK]”, “##fe”],英文中以 “gi” 开头,“##fe” 结尾的单词很少,那么模型很容易就知道中间填 “##raf”,这就导致再做多模态时,根本不需要借助图像这边的信息,仅根据文本就能判断中间填 “##raf”,这样这个 loss 就失去了意义。既然如此,作者就将整个单词都 mask 掉,也就是在整个句子中去掉了 “giraffe”,这时模型再想把 “giraffe” 重建出来,就必须要借助图像的信息,进一步加强图像与文本间的联系。
4.4 Image Augmentation
ViLT是一个端到端的模型,作者在微调时直接就上了 RandAugment。考虑到需要图文匹配,作者改动了其中两处,即去掉了cutout和color inversion(前者是随机去掉图像中某一区域,后者是进行颜色变换)。
关于数据集的tip
这四个多模态数据集是非常经典的数据集,MSCOCO、VG、SBU、GCC。这四个数据集也叫4Million,因为所有图片加在一起是400万张左右。
- MSCOCO:即Microsoft COCO,每张图片有五个 captions(描述图像的标题),平均标题长度12。模型生成的标题要尽量和这56万标题相似。(图像11万,图文对56万)
- VG:即Visual Genome,10.8万图片,541万标题,标题平均长度5.5
- SBU/GCC :即SBU Captions和Google Conceptual Captions。这两个数据集都是一张图配一个标题,但数据集建造者只给了图片链接,其中不少失效了,所以作者只使用了其中能用的部分,在上图用
表示。
五、结论
本文提出了一个极小化的 VLP 模型 ViLT,它没有使用以往需要大量配置的 embedding 方式(如Faster R-CNN 和 ResNet来提取特征),仅仅使用一个简单的 Patch Embedding 就解决了图像特征提取。整个模型更简单,速度又快,结果又还可以。ViLT 虽然性能比不上 SOTA,但它提供了一种不需要 convolution 和 region 的supervision 方法。
此外,作者还提供了未来的几个可能的研究方向:
- Scalability:如果模型更大,用的数据集更多,那么结果也会更好。
- Masked Modeling for Visual Inputs:在图像部分也做掩码重建(完形填空)。这部分当前已经有 BEiT 和 MAE 了,也已经有论文对 ViLT 在这部分进行了图像重建方面的改进。
- Augmentation Strategies:根据消融实验来看,数据增强确实是很有效果的,作者希望可以优化这一块。