github
BLIP提出了一种基于预训练的方法,通过联合训练视觉和语言模型来提升多模态任务的性能。
BLIP(Bootstrapping Language-Image Pretraining)是salesforce在2022年提出的多模态框架,是理解和生成的统一,引入了跨模态的编码器和解码器,实现了跨模态信息流动。在AIGC中通常用来给图像生成prompt,好的prompt对交叉注意力的微调非常关键,例如ControlNet中的Automatic Prompt就是BLIP生成的。
为什么叫Bootstrapping,是因为训练数据来自网络图文对,包含大量噪声,所以增加了一个在线数据打标签和清理的任务,把处理好的数据继续用来迭代原模型。
使用Captioner (Cap)为web图像生成合成字幕,使用Filter (Filt)去除带有噪声的字幕。
将输入图像划分为补丁并将其编码为嵌入序列,并使用额外的[CLS]令牌来表示全局图像特征,提出编码器-解码器的多模态混合(MED),能够有效地进行多任务预学习和迁移学习。MED是一种多任务模型,可以在三种功能之一中运行。
分别对图像和文本进行编码。文本编码器与BERT相同,其中在文本输入的开头附加一个[CLS]令牌以总结句子
通过在文本编码器的每个变压器块的自注意层(SA)和前馈网络(FFN)之间插入一个额外的交叉注意层(CA)来注入视觉信息。一个特定于任务的[Encode]标记被附加到文本中,[Encode]的输出嵌入被用作图像-文本对的多模态表示。
将基于图像的文本编码器中的双向自注意层替换为因果自注意层。[Decode]标记用于表示序列的开始,序列结束标记用于表示序列的结束。
在预训练中共同优化了三个目标,两个基于理解的目标和一个基于生成的目标,每个图像-文本对只需要通过计算量较大的视觉转换器进行一次前向传递,并通过文本转换器进行三次前向传递,其中激活不同的功能以计算如下所述的三种损失。
为了在利用多任务学习的同时执行有效的预训练,文本编码器和文本解码器共享除了SA层之外的所有参数。原因是编码和解码任务之间的差异最好由SA层捕获。特别是,编码器使用bi-directional self-attention来构建当前输入标记的表示,而解码器使用causal self-attention来预测下一个标记。另一方面,编码和解码任务之间的嵌入层、CA层和FFN的作用相似,因此共享这些层可以提高训练效率,同时受益于多任务学习。
提出了一种提高文本语料库质量的新方法CapFilt。它引入了两个模块:一个用于生成给定web图像的标题的captioner,以及一个用于去除噪声图像-文本对的过滤器。captioner和filter都是从相同的预训练MED模型初始化的,并在COCO数据集上分别进行微调。调优是一个轻量级的过程。
具体地说,captioner是一个基于图像的文本解码器。它与LM目标进行了微调,以解码给定图像的文本。给定web图像 I w I_w Iw, captioner生成合成字幕 T s T_s Ts,每个图像一个字幕。该滤波器是一个基于图像的文本编码器。它与ITC和ITM目标进行了微调,以了解文本是否与图像匹配。过滤器去除原始web文本 T w T_w Tw和合成文本 T s T_s Ts中的噪声文本,如果ITM头预测文本与图像不匹配,则认为文本是噪声文本。最后,将过滤后的图像文本对与人工注释的图像文本对结合起来形成一个新的数据集,使用它来预训练一个新的模型。