一、引言
论文: BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation
作者: Salesforce Research
代码: BLIP
特点: 该方法分别使用ViT和BERT进行图像和文本特征提取;提出使用image-text contrastive learning (ITC)损失、image-text matching (ITM)损失、Language Modeling (LM)损失进行模型优化;提出Captioning and Filtering (CapFilt)生成并过滤从网络上获取的图像-文本对。
⚠️ 在学习该方法前,建议补充ViT、BERT、ALBEF的相关知识。
二、详情
BLIP的整体结构图如下:
可见,BLIP在结构上主要包括1个图像编码器、1个文本编码器、1个基于图像的文本编码器、1个基于图像的文本解码器;在损失上主要包括image-text contrastive learning (ITC)损失、image-text matching (ITM)损失、Language Modeling (LM)损失;此外,BLIP还提出了CapFilt处理噪声图像-文本对。
⚠️ 为了提升训练效率,减少参数量,BLIP使用了参数共享策略,上图中同颜色的模块使用同一组参数。具体参数关系如下:
- 图像编码器中所有参数独立;
- 文本编码器、基于图像的文本编码器、基于图像的文本解码器中的FFN使用同一组参数;
- 文本编码器和基于图像的文本编码器中的双向自注意力使用同一组参数;
- 基于图像的文本编码器和基于图像的文本解码器中的交叉注意力使用同一组参数;
- 基于图像的文本解码器中的因果自注意力参数独立。
2.1 模型结构
如上图,BLIP在结构上主要包括1个图像编码器
、1个文本编码器
、1个基于图像的文本编码器
、1个基于图像的文本解码器
。
2.1.1 图像编码器
BLIP的图像编码器
使用ViT-B/16,共12层transformer编码层,由在ImageNet-1k上进行预训练的权重初始化。输入图像转为token后会再扩充一个名为[CLS]
的token(初始化全0的可学习参数向量),用来表达图像的全局信息。最后输出的是经过12个transformer模块优化过的输入图像的token和[CLS]
的token。
关于ViT的详情,请参考我之前的博客Vision Transformer。
2.1.2 文本编码器
BLIP的文本编码器
使用BERT,共12层transformer编码层,由BERT
base
_{\textbf{base}}
base初始化。输入文本会在最前面扩充一个名为[CLS]
的token,用来表达文本的全局信息。最后输出经Tokenizer和BERT优化过的输入文本的token和[CLS]
的token。
[CLS]
直接放在句子最前面,例如原文本是“I am very happy today.”,则新文本应为“[CLS] I am very happy today.”)
2.1.3 基于图像的文本编码器
BLIP的基于图像的文本编码器
属于多模态编码器(进行图像和文本的信息交互),使用12层含交叉注意力的transformer编码层(文本编码器
无交叉注意力)。图像编码器
的输出会作为基于图像的文本编码器
中交叉注意力的输入。输入文本会在最前面扩充一个[Encode]
,作为图像-文本对的多模态特征。最后输出经Tokenizer和12层含交叉注意力的transformer编码层优化过的输入文本的token和[Encode]
的token。
BERT中没有交叉注意力,所以
基于图像的文本编码器
是在文本编码器
的自注意力和FFN之间插入了交叉注意力,交叉注意力中的权重被随机初始化。
2.1.4 基于图像的文本解码器
BLIP的基于图像的文本解码器
属于多模态解码器(进行图像和文本的信息交互),使用12层含交叉注意力的transformer解码层(文本编码器
无交叉注意力)。图像编码器
的输出会作为基于图像的文本解码器
中交叉注意力的输入。输入文本会在最前面扩充一个[Decode]
作为句子的开始;将最后的句号替换为[EOS]
作为句子的结束。最后通过自回归的因果注意力预测下一个token。
基于图像的文本编码器
与基于图像的文本解码器
的主要差别在于前者使用双向自注意力,后者使用因果自注意力。
双向自注意力其实就是不做mask的自注意力,因为整个句子的所有token两两都可交互计算注意力相似度所以称之为双向自注意力。
因果自注意力就是带因果mask的自注意力,mask会遮蔽下一个要预测的token及后面的所有token。如下图,当我们已经有"[Decode] I"时,"love China [EOS]"都会被遮蔽,这种无法通过上下文预测下一个token的策略,就是因果自注意力。
2.2 损失函数
如上图,BLIP使用image-text contrastive learning (ITC
)损失、image-text matching (ITM
)损失、Language Modeling (LM
)损失进行预训练。
2.2.1 ITC损失
ITC
损失旨在更好地学习两个单模态的特征表达,使两个模态的特征能够对齐,即图像特征与对应文本描述的特征更相似,反之更不相似。
BLIP借用了MoCo的思想额外保存一个通过指数移动平均更新的动量模型来生成负样本和软伪标签,从而确定正负图像-文本对以及动量蒸馏损失。
BLIP沿用了ALBEF中的
ITC
损失,详情请参考我之前博客ALBEF in NeurIPS 2021的2.2.1节。
2.2.2 ITM损失
ITM
损失旨在学习图像-文本多模态特征,以表达图像和文本之间的对齐情况。这是一个二分类损失,在[Encode]
对应的token后加一个全连接和softmax即可预测输入的图像-文本对是否匹配,匹配为1,不匹配为0。
BLIP通过计算ITC
损失时得到的当前批次图像-文本两两之间的相似度来选取hard的负图像-文本对,连同原配的正图像-文本对进行二分类训练。
BLIP沿用了ALBEF中的
ITM
损失,详情请参考我之前的博客ALBEF in NeurIPS 2021的2.2.3节。
2.2.3 LM损失
LM
损失旨在使模型具备生成图像文本描述的能力。前两个损失都在编码器上,只能完成理解型任务,例如图像-文本检索;该损失在解码器上,能够完成生成型任务,例如视觉问答。
LM
损失依赖于因果mask,就是将一句话复制多份,然后进行倒三角式的mask,使模型每次都只能根据当前的内容预测下一个token。预测时需要在对应token后跟一个全连接和softmax才能判断token所对应单词是否正确。
2.3 生成过滤
从网络爬虫下来的图像-文本对富含噪声,BLIP提出CapFilt
生成更合适的图像描述(Captioning)然后过滤不合适的图像-文本对(Filtering)。
下图是CapFilt
对一个噪声的图像-文本对的处理过程:
由于通常我们看到一个蛋糕图片后希望获取的是它的店铺位置从而去购买,所以我们从网上下载的数据很可能是一个蛋糕图片和一个对商铺的描述;但实际我们希望得到的是针对图片中内容的描述,例如这个蛋糕的外观。可见,Captioner
能够生成更合适的图像描述,Filter
能够过滤不合适的图像-文本对并保留合适的图像-文本对。
CapFilt
的流程图如下:
可见,其详细步骤是:
- 使用从网络上下载的带噪声的图像-文本对和不含噪声的开源数据集中人工标注的图像-文本对训练一个模型。
- 使用在不含噪声的开源数据集中人工标注的图像-文本对分别微调
Filter
和Captioner
,Filter
仅使用ITC
损失和ITM
损失进行微调,Captioner
仅使用LM
损失进行微调。 - 将从网络上下载的图像送入
Captioner
生成对该图像的文本描述,形成人造图像-文本对。 - 将从网络上下载的图像-文本对连同
Captioner
生成的人造图像-文本对一起送入Filter
过滤其中文本描述不合适的图像-文本对。 - 使用过滤后得到的更高质量的图像-文本对连同不含噪声的开源数据集中人工标注的图像-文本对进行模型的重新训练。
Filter
通过计算ITM
损失时使用的二分类头进行过滤,匹配的保留,不匹配的被滤除。
Captioner
通过基于图像的文本解码器
进行生成,输入图像和[Decode]
进行下一token的预测,然后[Decode]
连同预测一起送入基于图像的文本解码器
进行再下一token的预测,如此循环,直至预测出[EOS]
截止。