文献基本信息
- 标题:ViLT: Vision-and-Language Transformer Without Convolution or Region Supervision
- 作者:Wonjae Kim、Bokyung Son、Ildoo Kim
- 单位:NAVER AI Lab
- 会议/期刊:ICML
- 发表时间:2021年6月10日
- 代码:https://github.com/dandelin/vilt
背景与意义
- 主要的目标函数:
- image text matching
- mask language modeling
- 如何把图像的像素变成带有语义性、离散的特征,再与文本特征匹配?
- 早期的多模态工作都是基于目标检测的,因为目标检测框内的特征含有明确的类别信息,又是区域内的,小的边界框相对于整个图像是离散的,可以当作序列来处理。
- 之前的VLP(Vision-and-Language Pre-training)模型都是在Visual Genome数据集上训练的,有1600个类别和400个属性,类别属性信息比较丰富。
- 然而,用目标检测做模态融合代价太贵,也有一些工作尝试把代价降下来。
- Piexl-BERT使用ResNet抽取图像特征,然后将抽取好的特征当做离散的序列,即先用CNN抽取特征,得到的高维特征对应较短的序列长度,此时就可以应用Transformer来处理,这样就不需要目标检测等操作,例如感兴趣区域(Regions of Interest, ROI)和非极大值抑制(Non-Maximum Suppression, NMS),速度可以提高不少。
- 当前,大多数VLP任务主要聚焦在通过改进视觉编码器来提高性能。
- 然而,现实世界中数据都是每时每秒实时生成的,这时候去做推理,视觉编码器效率低的问题就显露出来了。
- 因此,本文受ViT启发,将ViT应用到了多模态领域,ViT可以将图像打成patch,得到一个有语义信息的离散的序列。
VLP的分类
- 根据两点对现有VLP模型进行分类,如下图所示:
- 看图像和文本的表达力度是否平衡,表达力度根据参数量和计算量来评价,二者都是很重要的模态,但是现在大多数方法更关注图像特征的抽取。
- 看如何将两个模态融合。
- VE:视觉嵌入器,TE:文本嵌入器,MI:模态交互器。
- 第一类如上图(a)所示,代表有VSE等,文本端较为简单,图像端较为复杂,融合端是简单的神经网络。
- 第二类如上图(b)所示,代表有CLIP等,图像和文本的计算力度等价,融合的时候将两种特征直接点乘,非常轻量。
- 第三类如上图(c)所示,代表有ViLBERT和UNITER等,文本端非常轻量,图像端使用目标检测的系统,非常贵,融合端使用了Transformer,相当于两个大模型。
- 本文认为模态融合部分一定要做得比较大,融合做好了,最后效果才能好,所以就直接基于ViT使用patch嵌入,使得视觉端抽取特征也非常轻量。
模态融合
- 主要有两种模型:
- 单流方法:将两种特征拼接起来,用一个模型处理两个输入。
- 双流方法:两个模型分别对两种模态信息进行处理,充分挖掘每种模态包含的信息,然后再融合。
- 两种模型表现差不多,但是双流方法参数多一些,本文采用的是单流方法。
视觉嵌入端
文本端都是用预训练的BERT里的tokenizer,而视觉端抽取特征主要有三步:
- 主要看图像端,有两种:
- 先经过一个backbone抽取特征,然后经过RPN网络生成proposal,经过NMS筛选边界框,最后经过ROI头得到图像序列,结果就是把一张图像变成了离散的边界框,每个边界框内都含有明确的类别语义信息。
- 仅基于backbone,但是这样的效果并不好。
- 因此,本文基于ViT提出了自己的想法,直接将图像打成patch,然后根据patch得到图像序列,也含有语义信息。
研究方法与创新点
模型架构
- 模型就是一个Transformer,如下图所示,比较简单。
- 假设文本端有
个长为
的序列,
为一个句子中单词的数量,
为序列长度,图像端图像被打成
个patch,每个patch也对应长为
的序列,其中还加入了模态类型嵌入信息(文本为
,图像为
),token位置嵌入是文本位置信息,patch位置嵌入是图像位置信息。
- 因此,Transformer编码器的输入为
的矩阵,
代表[CLS] token,
中的
代表两种模态的[CLS],位置嵌入和类别嵌入是拼接起来的。
- 使用了两个损失,分别是image text matching和mask language modeling。
- Transformer的输出为
的矩阵,经过
的池化层得到仍是
的矩阵,最后经过一个FC层进行二分类任务(文本与图像是否匹配)。
技巧
- 全词掩蔽:例如“giraffe”这个单词,由三个分词组成,分别是gi、raf、fe,如果掩蔽的时候掩蔽“raf”这个token,由于开头为“gi”、结尾为“fe”的单词不多,模型就记住了中间一定是“raf”,就相当于模型学到了捷径,这样泛化性就不好,因此本文直接掩蔽“giraffe”整个单词,这样就需要借助图像信息,因此就加强了图像和文本的联系。
- 图像增强:之前的工作都是使用预训练模型,无法进行数据增强,本文的图像增强不使用颜色反转和裁剪,以避免与文本信息不匹配。
研究结论
- 总而言之,ViLT速度非常快,精度也不差。
存在的问题
- 本文使用了一个轻量的文本-图像特征提取模型,就可以达到不错的效果。
- 有三点可以提升性能:
- 将模型规模做大:一般来说,Transformer规模越大,效果越好。
- 掩蔽区域重建(Masked Region Modeling, MRM)的思想:在图像端使用“完形填空”的形式。
- 数据增强。
启发与思考
- ViLT有着极其简单的多模态结构,将模态的特征抽取做到了极小化,主要的计算量放在后边的模态融合上,提高了推理速度,说明多模态结构的主流方向是花费更多时间在融合端而非图像端或文本端。
- 改进模型的目标既可以是提高准确度,也可以是在保证准确度的前提下做到模型轻量化。
- 各种模态的表达力度未必需要平衡,可以根据重要性给予不同的关注。
- 写作:本文的“Background”部分是多模态的文献综述,内容上可以参考,写法上也可以学习。