BLIP 是一种多模态 Transformer 模型,主要针对以往的视觉语言训练 (Vision-Language Pre-training, VLP) 框架的两个常见问题:

  1. 大多数现有的预训练模型仅在基于理解的任务或者基于生成的任务方面表现出色,很少有可以兼顾的模型。
  2. 大多数现有的预训练模型为了提高性能,使用从网络收集的嘈杂图像-文本对扩展数据集。这样虽然提高了性能,但是很明显这个带噪声的监督信号肯定不是最优的。

BLIP 这种新的 VLP 框架可以灵活地在视觉理解任务上和生成任务上面迁移,这是针对第一个问题的贡献。至于第二个问题,BLIP 提出了一种高效率利用噪声网络数据的方法。即先使用嘈杂数据训练一遍 BLIP,再使用 BLIP 的生成功能生成一系列通过预训练的 Captioner 生成一系列的字幕,再把这些生成的字幕通过预训练的 Filter 过滤一遍,得到干净的数据。最后再使用干净的数据训练一遍 BLIP。

背景

视觉语言训练 (Vision-Language Pre-training, VLP) 最近在各种多模态下游任务上取得了巨大的成功。然而,现有方法有两个主要限制:

  1. 模型层面: 大多数现有的预训练模型仅在基于理解的任务或者基于生成的任务方面表现出色,很少有可以兼顾的模型。比如,基于编码器的模型,像 CLIP,ALBEF 不能直接转移到文本生成任务 (比如图像字幕),而基于编码器-解码器的模型,像 SimVLM 不能直接用于图像文本检索任务。
  2. 数据层面: 大多数现有的预训练模型为了提高性能,使用从网络收集的嘈杂图像-文本对扩展数据集。这样虽然提高了性能,但是很明显这个带噪声的监督信号肯定不是最优的。

本文提出了 BLIP:Bootstrapping LanguageImage Pre-training,用于统一的视觉语言理解和生成。BLIP 是一种新的 VLP 框架,与现有的方法相比,它可以实现更广泛的下游任务。它分别从模型和数据的角度引入了两个贡献:

  1. BLIP 提出了一种编码器-解码器混合架构 (Multimodal mixture of Encoder-Decoder, MED),MED 的特点是很灵活,它既可以作为单模态的编码器,又可以作为基于图像的文本编码器,或者基于图像的文本解码器。BLIP 由三个视觉语言目标联合训练:图像文本的对比学习、图像文本匹配和图像条件语言建模。
  2. BLIP 提出了一种高效率利用噪声网络数据的方法。即先使用嘈杂数据训练一遍 BLIP,再使用 BLIP 的生成功能生成一系列通过预训练的 Captioner 生成一系列的字幕,再把这些生成的字幕通过预训练的 Filter 过滤一遍,从原始网络文本和合成文本中删除嘈杂的字幕,得到干净的数据。最后再使用干净的数据训练一遍 BLIP。

BLIP 的模型架构 MED

如下图所示是 BLIP 的模型架构 MED,看上去稍微有点复杂,一块一块拆开看。

1 视觉编码器:提取图片特征

上图最左边的是视觉编码器,就是 ViT 的架构。将输入图像分割成一个个的 Patch 并将它们编码为一系列 Image Embedding,并使用额外的 [CLS] token 来表示全局的图像特征。视觉编码器不采用之前的基于目标检测器的形式,因为 ViLT 和 SimVLM 等工作已经证明了 ViT 计算更加友好。

注:Patch Embedding是指我们对一张图片可以划分成为多个块,每个块就称为一个patch,对每个patch进行embed输出一个n维向量来代表这个patch。

2 文本编码器:提取文本特征

上图第2列的是视觉编码器,就是 BERT 的架构,其中 [CLS] token 附加到文本输入的开头以总结句子。作用是提取文本特征做对比学习。

3 视觉文本编码器:

上图第3列的是视觉文本编码器,使用 Cross-Attention,作用是根据 ViT 给的图片特征和文本输入做二分类,所以使用的是编码器,且注意力部分是双向的 Self-Attention。添加一个额外的 [Encode] token,作为图像文本的联合表征。

4 视觉文本解码器:

上图第4列的是视觉文本解码器,使用 Cross-Attention,作用是根据 ViT 给的图片特征和文本输入做文本生成的任务,所以使用的是解码器,且注意力部分是 Casual-Attention,目标是预测下一个 token。添加一个额外的 [Decode] token 和结束 token,作为生成结果的起点和终点。

一个需要注意的点是:相同颜色的部分是参数共享的,即视觉文本编码器和视觉文本解码器共享除 Self-Attention 层之外的所有参数。每个 image-text 在输入时,image 部分只需要过一个 ViT 模型,text 部分需要过3次文本模型。

BLIP 的预训练目标

BLIP 在预训练期间联合优化了3个目标,有两个理解任务的目标函数和一个生成任务的目标函数。

对比学习目标函数 (Image-Text Contrastive Loss, ITC)

ITC 作用于1 视觉编码器 和 2 文本编码器,目标是对齐视觉和文本的特征空间。方法是使得正样本图文对的相似性更大,负样本图文对的相似性更低,在 ALBEF 里面也有使用到。作者在这里依然使用了 ALBEF 中的动量编码器(本质上是使用EMA方法 ),它的目的是产生一些伪标签,辅助模型的训练。

ALBEF的内容可点击链接

图文匹配目标函数 (Image-Text Matching Loss, ITM)

ITM 作用于1 视觉编码器 和 3 视觉文本编码器,目标是学习图像文本的联合表征,以捕获视觉和语言之间的细粒度对齐。ITM 是一个二分类任务,使用一个分类头来预测图像文本对是正样本还是负样本。作者在这里依然使用了 ALBEF 中的 hard negative mining 技术。

语言模型目标函数 (Language Modeling Loss, LM)

BLIP 包含解码器,用于生成任务。既然有这个任务需求,那就意味着需要一个针对于生成任务的语言模型目标函数。LM 作用于1 视觉编码器 和 4 视觉文本编码器,目标是根据给定的图像以自回归方式来生成关于文本的描述。与 VLP 中广泛使用的 MLM 损失 (完形填空) 相比,LM 使模型能够将视觉信息转换为连贯的字幕。

CapFilt

高质量的人工注释图像-文本对 (例如, COCO) 因为成本高昂所以数量不多。最近的工作 ALBEF, SimVLM 利用从网络自动收集的大量替代的图文对 。但是, 这些网络的替代数据集通常不会准确地描述图像的视觉内容, 质量相对嘈杂, 带噪声的监督信号肯定不是最优的。

BLIP 这里提出了一种高效率利用噪声网络数据的方法:Captioning and Filtering,CapFilt。

CapFilt 方法如上图所示。它包含两个模块:

Captioner: 给一张网络图片,生成字幕。它是一个视觉文本解码器,在 COCO 数据集上使用 LM 目标函数微调。给定网络图片 , Captioner 生成字幕 。

Filter: 过滤掉噪声图文对。它是一个视觉文本编码器,看文本是否与图像匹配,在 COCO 数据集上使用 ITC 和 ITM 目标函数微调。Filter 删除原始 Web 文本 和合成文本 中的嘈杂文本,如果 ITM 头将其预测为与图像不匹配,则认为文本有噪声。

最后,将过滤后的图像-文本对与人工注释对相结合,形成一个新的数据集,作者用它来预训练一个新的模型。

实验

BLIP 在两个 16-GPU 节点上面做预训练,视觉编码器以 ImageNet-1K 上预训练的 ViT 权重初始化,文本编码器以 BERT-Base 的权重初始化。使用 2880 的 Batch Size 训练 20 Epochs。

预训练数据集和 ALBEF 一样:

使用下面4个数据集,图片数加起来大概是 4M。

  • Conceptual Captions
  • SBU Captions
  • COCO
  • Visual Genome

还引入了噪声更大的 Conceptual 12M 数据集,最终将图像总数增加到 14.1M (有的数据集失效了)。

作者还尝试了一个额外的 web 数据集 LAION ,该数据集包含 115M 图像,具有更多的噪声文本。

实验结果

如下图所示,作者比较了在不同数据集上预训练的模型,是一个 CapFilt 的消融实验结果。Retrieval 代表检索任务的结果,Caption 代表生成任务的结果。

当使用 14M 的数据集设置时,联合使用字幕器 Captioner 和过滤器 Filter 可以观察到性能改进,而且它们的效果相互互补,证明了 CapFilt 方法能够从嘈杂的原始数据中提炼出有用的数据。

当使用更大的数据集 129M 的设置或者更大的模型 ViT-L 时,CapFilt 可以进一步提高性能,这验证了它在数据大小和模型大小方面的可扩展性。而且,仅仅增加字幕器和过滤器的模型尺寸时,也可以提高性能。

下图中,作者展示了一些示例的字幕与对应的图片。 是直接从网络上爬取的原始字幕, 是字幕器生成的字幕。图中的红色文本是 Filter 删除的文本,绿色文本是 Filter 保留下来的文本。可以看出几张图片里面,红色的文本不是不好,只是没有绿色的文本对图片的描述更加贴切。这个结果说明了 CapFilt 方法确实是能够提升图文对数据集的质量。

各个下游任务 BLIP 与其他 VLP 模型的对比

检索任务实验结果

如下图5所示是检索任务实验结果,作者做了两个数据集 COCO 和 Flickr30K。与现有方法相比,BLIP 实现了显着的性能提升。使用相同的 14M 预训练图像,BLIP 在 COCO 上的平均召回率 R@1 上比之前的最佳模型 ALBEF 高出 +2.7%。作者还通过将在 COCO 上微调的模型直接迁移到 Flickr30K 来做 Zero-Shot Retrieval。结果如图6所示,其中 BLIP 的性能也大大优于现有的方法。

图片字幕实验结果

如下图7所示是图片字幕任务实验结果,作者做了两个数据集 NoCaps 和 COCO,两者都使用在 COCO 上微调的模型和 LM 损失进行评估。作者遵循 SimVLM 的做法在每个字幕的开头添加了一个提示 “a picture of”,发现这样使得结果更好了。使用了 14M 预训练图像的 BLIP 大大优于使用相似数量预训练数据的方法。使用了 129M 图像的 BLIP 实现了与使用了 200M 的 LEMON 相比具有竞争力的性能。值得注意的是,LEMON 需要很耗费计算量的预训练的目标检测器和更高分辨率 (800×1333) 的输入图像,导致推理时间比使用低分辨率 (384×384) 输入图像的无检测器 BLIP 慢得多。

视觉问答 (Visual Question Answering, VQA) 实验结果

VQA 要求模型预测给定图像和问题的答案。BLIP 没有将 VQA 制定为多答案分类任务,而是按照 ALBEF 的做法把 VQA 视为一种答案生成的任务。结构如下图8所示,在微调过程中,作者重新排列预训练模型,把视觉编码器的输出塞进文本编码器,这样图像和问题就编码为了多模态嵌入,再把这个表征输入文本解码器获得答案。VQA 模型使用真实答案作为目标使用 LM 损失进行微调。

结果如下图9所示,使用 14M 图像,BLIP 在测试集上优于 ALBEF 1.64%。

自然语言视觉推理 (Natural Language Visual Reasoning, NLVR2) 实验结果

自然语言视觉推理任务要求模型预测一个句子是否描述了一对图像,是个二分类任务。为了能对两对图像进行推理,作者对预训练模型进行了简单的修改,如下图10所示。首先两个图片通过视觉编码器得到视觉特征,再分别通过两个交叉注意力来处理两个输入图片,并且把它们的输出合并起来送入 FFN 中。这两个 Cross-Attention 层是从相同的预训练权重初始化的。通过 [Encode] token 的过了 MLP 的输出完成二分类任务。

实验结果如下图11所示,BLIP 优于所有现有方法,除了 ALBEF 执行定制预训练的额外步骤。但是有趣的是,NLVR2 的性能并没有从额外的网络图像中受益太多,这可能是由于网络数据和下游数据之间的域差距。

视觉对话 (Visual Dialog, VisDial) 实验结果

视觉对话任务在自然会话设置中扩展了 VQA,其中模型不仅需要基于图像-问题对预测答案,还需要考虑对话历史和图像的字幕。作者对预训练模型进行了修改,如下图12所示。图片先经过 Image Encoder 得到视觉表征,Caption Encoder 的输入是字幕和 [Encode] token,并通过交叉注意力建模它们。Dialog Encoder 的输入是 [Encode] token,问题 QA 和对话历史。使用 ITM 损失进行二分类式的训练,以区分问题的答案是真还是假。

实验结果如下图13所示,BLIP 在 VisDial v1.0 验证集上实现了最先进的性能。