赞
踩
参考:多模态论文串讲·上、多模态论文串讲·下、多模态论文串讲
论文链接放在每一小节前面。
Review:
ViLT论文的研究动机其实就是为了把目标检测从视觉端拿掉。图文多模态任务,关键是提取视觉特征和文本特征,然后对齐。在之前的多模态研究工作中,视觉侧通常需要一个目标检测器来确定图像中物体所在的区域,再提取各区域的特征。ViT 将 Transformer 迁移到视觉领域之后,人们意识到,直接使用 patch projection 来处理图像输入也是可行的。由此,ViLT 首次使用 patch projcetion 来直接提取图像特征,摆脱了笨重的目标检测器。
但ViLT由两个局限性
CLIP一种典型的双塔结构:在视觉端和文本端分别有一个独立的编码器来提取视觉特征和文本特征,而模态间的交互就是简单的点乘余弦相似度。CLIP可以提前把数据库里所有的图像文本的特征提前抽好,想用的时候直接点乘。
CLIP的缺陷:
总结:根据ViLT论文里的figure2, 可以得出这样一个结论,我们需要好的visual embedding,图像编码器比文本编码器要大(假设1),因为图像更为复杂,同时modality interaction也要很好(假设2),text embedding已经很成熟,一般用BERT,这个已经很轻量化了。因此我们总结出理想化的情况应该是接近下图(c)的情况。
我们可以考虑一些常用的loss: ,下面前三个loss是比较好用的。
通过总结,就可以引出ALBEF
论文:Align before Fuse: Vision and Language Representation Learning with Momentum Distillation
在这张图中,满足了我们两个假设,文本编码器比图像编码器小且模态融合也大。同时也用了我们提到的三个loss去训练模型:Image-text contrastive loss(ITC)、Image text matching loss(ITM)和Masked language modelling loss(MLM)。
通过对比学习可知,只要定义一个正样本对和多个负样本对,就可以进行对比了。我们希望正样本对之间的距离越来越近,正负样本对之间的距离越来越远。首先要做的就是去出去这种全局特征,在特征之间去做embedding space上的拉近和拉远。
在这里有一个小细节,计算ITC和ITM loss的时候,输入的都是原始的image and text embedding(下图橙色的T '表示masked text embedding),算MLM loss的时候,用的是原始的image embedding,但是是masked后的text embedding,因此每一次训练iteration其实做了2次forward,一次用了原始的image and text embedding,另一次用了原始的image和masked的text embedding,因为你要算多个loss函数。
最后的目标函数计算如下:
做动量蒸馏(Momentum Distillation)的动机:从网上爬下来的图像文本对通常weakly-correlated,即文本并没有很好地描述图像,从而产生了noise。这种弱关联的训练样本中可能出现某些负样本的图文匹配程度,比 GT 中正样本的 one-hot 标签的匹配程度更高的情况,不利于 ITC 和 MLM 两种任务的训练。
ALBEF 中除了梯度更新的主模型之外,还有一个动量模型,用于为主模型的训练生成 multi-hot 的伪标签。动量模型通过滑动指数平均(EMA)的方式,根据主模型进行动量更新。这样,除了Ground Truth(GT,真实标签)中的 one-hot 标签,我们就又得到了multi-hot的伪标签(pseudo-targets),用于 ITC 和 MLM 任务的损失计算。补充一句,对于 ITM 任务,由于其本身就是基于 GT 的二分类任务,并且通过 ITC 中计算的相似度结果进行了难负例挖掘,因此无需进行动量计算。
实际上论文设计了5个loss,2个ITC,2个MLM,1个ITM,ITM这个loss ground truth很清晰,所以不需要momentum的版本。
总的来说,ALBEF不论是在训练速度上还是在推理速度上,又或者是在通用性、性能表现上都比较亮眼。(代码还是开源的!!!)
论文:VLMo Unified Vision-Language Pre-Training with Mixture-of-Modality-Experts
解释两个贡献的研究动机:
在预训练任务的选择上,VLMo 与 ALBEF 一致,同样使用 ITC、ITM 和 MLM 三种,并且同样借助 ITC 为 ITM 进行hard negtives。在进行不同的任务时,会使用 MoME 结构中不同的 FFN 层参数进行训练:
MoME 结构最大的优势就是灵活。在训练时,对应不同的任务时使用不同结构计算损失函数,并更新对应参数。这样的训练有一个缺点是需要做多次模型前向。
这里特别有趣的点是在单独的文本数据上进行训练时,自注意力层是冻结的。也就是说,通过图像数据训练出的自注意力层,在文本数据上甚至连微调都不需要,就能工作得很好。如果换过来,先文本,在视觉,效果会怎样呢(不好)?是否不同模态间的注意力是可以通用的呢?
未来的提升(作者都做到了):
BLIP是 ALBEF 原班人马做的,基本可以看做吸收了 VLMo 思想的 ALBEF。训练的 loss 和技巧都与 ALBEF一致,属于 ALBEF 的后续工作。
研究动机:
BLIP 的两个关键点都包含在标题内,一是bootstrapping,是数据方面的改进,指的是用含噪声的数据训练出模型后,再用某些方法得到更干净的数据,用这些干净的数据训练出更好的模型;二是unified,指的是 BLIP 作为一种encoder-decoder架构,不只能做 understanding 类的任务(如VLMo介绍的下游任务),也能做generation 类的任务,如图像字幕 image captioning。
BLIP 的模型结构和目标函数如上图所示,图中相同的颜色表示相同的参数。细分开来,BLIP 模型共包含四个网络。图中左侧是一个标准的 ViT 模型,用于处理图像数据。右侧三个网络都用于处理文本数据,但他们的细节有所不同,细节如下:
BLIP模型是ALBEF模型原班人马做的,所以与 ALBEF 一样,同样采用动量模型为 ITC 生成伪标签;同样使用 ITC 为 ITM 进行难负例挖掘。
BLIP 的整个模型称为MED(Mixture of Encoder and Decoder)。虽然看起来模型很多,但实际上大部分网络是共享参数的,因此实际模型参数增加并不多。和ALBEF的区别是 fusion的text是直接输入的,不是从文本的encoder获取的,因为参数共享,不用劈成两份了,第一个文本编码器和第二个文本编码器基本一样。
它的出发点:假如有很多数据集D,里面可能有一些爬虫数据集、一些手工标注数据集coco。数据集中最大的问题是爬虫数据集的图片文本对不匹配,也就是下图中标红的数据。为了清洗数据集从而使模型达到最优解,怎么做呢?做一个模型!利用相似度来辨别是否匹配。
作者把MED也就是已经训练好的BLIP模型拿出来,然后把图像模型和两个文本模型(ITC和ITM的两个文本模型)拿出来,在coco数据集上做了一些很快的微调。微调后的MED就是Filter。
为什么有Captioner呢?BLIP训练出来的图像文本对比原始的图像文本对的文本描述更贴切,质量更高。然后就有了Captioner去训练出质量更高的图像文本对。
BLIP的特点:最显著的特点就是解码器输出的 caption 确实是不错,以至于很多下游任务都拿 BLIP 来生成 caption。
论文:CoCa: Contrastive Captioners are Image-Text Foundation Models
它也是 ALBEF 的后续工作,模型非常像。区别在于:
从上图可以看出来,CoCa使SimVLM和ALBEF一个非常直接的后续工作。与 ALBEF 最大的不同在于:
这个实验数据集对比图画的非常好!!!
论文:Image as a Foreign Language: BEiT Pretraining for All Vision and Vision-Language Tasks
BEiT v3的目标就是:做一个更大一统的一个框架。不论是从模型上还是训练的目标函数都要统一。用简单的一句话概括就是把图像也当成一种语言。
最大的亮点:用统一的multi-way transformer (mixture of experts ) 架构和单个masked modeling loss,将任意模态看做是同一个模态来建。
BEiT v3 的关键词就是大一统(big convergence),输入形式大一统,目标函数大一统,模型大一统。BEiT v3 将图像也视作一种语言(Imglish),与文本输入(English),图像文本对输入(parallel sentence)一起,实现了输入形式的大一统。在输入形式统一之后,也不需要 ITC、ITM、MLM、WPA 等其他目标函数,而是可以使用统一的 mask modeling 来驱动训练。
BEiT v3 使用本组之前工作 VLMo 中提出的 MoME(本文中称为 Multi-way Transformer),对不同模态使用不同的专家 FFN,实现统一。
模型结构就是之前VLMo 中的 MoME,自注意力层权重共享,根据不同的输入来选择不同的 FFN 专家。与 VLMo 不同之处在于训练的目标函数,是大一统的 masked data modeling,即遮住部分数据,要求模型还原出被遮住的数据。
如果想做下游任务的话,直接将需要的那部分模型拿出来即可。比如做视觉任务就拿视觉模型,做语言任务就拿语言模型。如果是做多模态任务,可以灵活地模拟不同的需求,比如:
在多模态学习之前都是Oscar或者Uniter等这些工作,他们的缺陷都是因为里面用了一个Object Detection的模型去做视觉特征的抽取,太慢且太贵了。所以在Vision Transformer出来之后,ViLT的作者就想到可以把vision部分用Vision Transformer去代,就一个Embedding层,这样一来大大简化了模型结构。(ViT + Oscar =>> ViLT,是ICML21的工作)
CLIP也是ICM21的工作,经过一番总结经验和对比,ALBEF的作者发现CLIP很高效适合做Image Text Retrieval,并且由于Modality Fusion做的很好,多模态任务非常强,再加上ViLT结构比较简单。综合了上述三家的长处,就推出了ALBEF,Fusion Encoder的模式。(CLIP + Modality Fusion + ViLT =>> ALBEF)
由于ALBEF的结果不错、模型也比较简单,代码也公开了,在它之上延伸了很多工作。比如SimVLM就是用Encoder-Decoder去做多模态的,它的作者就在ALBEF的基础上推出了CoCa。模型结构比较简单,就用一个Contrast和captioning的两个loss,训练出来了非常强大的模型。
同时另外一个分支,有了ViLT和ALBEF之后,微软的研究者就推出了VLMo,用共享参数的方式去推出一个统一做多模态的框架。基于这种参数共享的思想、基于这种可以用很多很多Text Branch,ALBEF的作者又推出了BLIP模型,能做得非常好的Captioning的功能,而且它的Captioner Filter模型也非常好用。
回到ViT中运用的Mask Data Modeling的方式去self-supplied learning,但是效果不太理想。但是大家都认为Mask Data Modeling非常有前景,所以就顺着BERT的思想,微软的研究者提出了BEiT。在BEiT的基础上,推出了BEiT v2(主视觉)。因为BEiT能在视觉上做Mask Data Modeling,BERT能在文本上做Mask Data Modeling,结合两者推出了Vision Language BEiT(VL-BEiT)。 最后经过一系列的经验积累,作者最后把VLMo、VL-BEiT和BEiT v2结合起来推出了BEiT v3,大幅超过了之前的CoCa、BLIP在单模态和多模态上的各种表现。
再回到ViT,对于Mask Data Modeling来说,可以Mask and Predict不同的东西。比如BEiT就是Predict Patch。MAE的Mask Auto Encoder就是Mask Predict Pixel。把MAE有用的特性用在CLIP上就形成了FLIP。
多模态的飞速进展之其他系列:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。