BLIP1¶
概要¶
BLIP是一个视觉-语言预训练(VLP)框架, 能够同时在理解型和生成型任务上取得良好表现. 传统的VLP模型通常只擅长其中一种任务, 并且大多使用从网络上采集的噪声图文数据进行预训练, 效果并不理想. BLIP通过一个自举(bootstrapping)的方式来处理噪声数据, 首先使用一个"captioner"为图像生成描述, 然后再用一个"filter"过滤掉质量较差的描述, 从而获得更高质量的训练数据.
在图文检索, 图像描述和视觉问答(VQA)等领域, BLIP都达到了SOTA, 比如在图文检索任务上平均Recall@1提高了2.7%, 在图像描述任务上CIDEr指标提升了2.8%, 在VQA上得分提升了1.6%. 此外, BLIP还可以直接迁移到视频-语言任务, 在零样本条件下也能取得不错的效果. 研究者已经公开了BLIP的代码, 模型和数据集, 方面社区进一步研究和应用.
背景¶
现有方法的局限¶
视觉-语言预训练最近在各种多模态下游任务中取得了巨大成功. 然而, 现有的方法有两大局限:
-
模型方面
大多数的方法要么使用encoder-based模型, 要么使用encoder-decoder模型. 对于encoder-based模型(如CLIP, ALBEF)等, 它们在图文检索等判别式任务上表现出色, 但是想要直接用来生成文本(如图像描述)并不乐观. 对于encoder-decoder模型(如SimVLM等), 虽然在文本生成任务上更加擅长, 但是目前它们还没有在图文检索任务上取得显著成功.
-
数据方面
许多先进的方法(如CLIP, ALBEF, SimVLM)都是在从网络收集的图文对数据上进行预训练的, 虽然大规模的网络数据能带来性能提升, 但是这些数据往往噪声过多, 文本描述也不够精准, 这会影响视觉-语言模型的学习效果. 作者提出的Captioner(Cap)和Filter(Filt)就是用来生成并筛选更加干净的训练数据, 以减轻网络噪声带来的问题, 并证明仅依赖网络上的原始的图文对数据并不一定能够达到最佳的视觉-语言学习效果.
提出BLIP¶
为此, 作者提出了BLIP: Bootstrapping Language-Image Pre-training. 它在模型和数据层面带来两个重要的贡献:
-
Multimodal mixture of Encoder-Decoder (MED)
这是一种新的模型架构, 用于多任务预训练和灵活的迁移学习. 可以在不同场景下充当"单模态encoder", "基于图像的文本编码器", "基于图像的文本解码器". MED通过以下三种目标联合预训练: (i) 图文对比学习; (ii) 图文匹配; (iii) 以图像为条件的语言建模.
-
Captioning and Filtering (CapFilt)
这是一种全新的数据构建方法, 用来从噪声较大的图文对中"自举"出更加干净, 更加有用的训练数据. 具体而言, 先会把预训练好的MED调优为两个模块: (i) Captioner, 给定网络图像, 生成合适的描述; (ii) Filter, 无论是对网络原始文本还是合成的文本, 进行过滤筛选, 去除质量较差或者不准确的描述.
评估¶
作者对该模型展开率详细的评估, 发现了下列关键现象.
- Captioner和Filter之间的相互配合可以带来显著的性能提升, 这意味着在模型生成图像描述的时候, Filter会对这些生成的描述进行筛选或者修正, 并将更多高质量的描述反馈给Captioner, 从而不断优化生成的文本. 多样化的图像描述有助于获得更好地下游任务性能.
- BLIP在多个视觉-语言任务中取得了SOTA地表现, 包括图文检索, 图像描述, 视觉问答, 视觉推理和视觉对话. 在零样本场景下, BLIP也能将学习到的能力直接迁移到视频领域的语言任务, 如视频检索和视频问答, 并在这些任务中达到了最新的SOTA.
相关工作¶
视觉-语言预训练¶
VLP的噪声问题¶
视觉-语言预训练(VLP)的目标是利用大规模的图文配对数据进行预训练, 从而提高图像和文本相关的下游任务性能. 由于获取人工标注文本的成本过高, 大多数方法会使用从网上抓取的图像和对应的alt-text(如描述性文本). 虽然一般会使用一下简单的规则过滤数据, 但是这些网络文本仍然含有大量的噪声. 之前的研究大多忽视了噪声对模型带来的负面影响, 因为从规模扩大的数据中获得的性能往往掩盖了噪声的影响. 作者提出的CapFilt方法旨在更有效地利用这些带有噪声的网络数据, 以改进视觉和语言的预训练效果.
统一多视觉和语言任务的挑战¶
很多工作视图把理解类的任务(如图文检索)和生成任务(如图像描述)都纳入同一个模型框架. 目前主流的模型架构大致分为三种: (i) 仅使用encoder的模型, 如CLIP或其他类似方法, 更适合理解类任务; (ii) encoder-decoder模型, 更适合生成类任务; (iii) 单一的统一encoder-decoder, 但有时无法同时兼顾多种任务的最佳性能. 作者提出了一种混合式的encoder-decoder多模态模型, 可以更加灵活地兼顾理解和生成两种需求, 并在各种下游任务中表现更好. 同时, 这种模型在预训练阶段保持了简单高效的特点.
知识蒸馏¶
知识蒸馏(KD). 知识蒸馏旨在通过从教师模型中提炼知识来提高学生模型的性能. 自蒸馏(Self-distillation)是知识蒸馏的一种特殊形式, 其中教师模型和学生模型规模相同. 它已经被证明在图像分类, 以及在最近在VLP中是有效的. 与大多数只要求学生和教师具有相同类别预测的KD方法不同, 作者提出的CapFilt可以被视为在VLP背景下更有效的KD方式, 因为captioner通过语义丰富的合成描述来提炼知识, 而filter则通过移除噪声描述来提炼知识.
数据增强¶
虽然数据增强在计算机视觉领域已经被广泛采用, 但是对语言任务进行数据增强并不容易. 最近, 一些研究利用生成式语言模型在低资源环境下为各种NLP任务合成示例. 本文的方法则强调, 在大规模视觉-语言预训练中使用合成描述可以带来显著优势, 与仅关注低资源语言任务的现有方法不同.
利用数据增强为各种NLP任务合成示例
假设我们要做一个针对某领域(如手机产品评价)的情感分类任务, 但该领域的标注数据非常少(例如仅有几十或几百条). 我们可以先用少量带有情感标签的数据(如Positive或Negative)调优一款生成式语言模型, 然后让模型基于已有样本的风格与语义生成更多具有相同标签的示例. 例子:
-
原始少量标注示例(仅做演示, 实际更少或略多):
- 这款手机的电池续航能力非常出色, 一天只需充一次电(Positive).
- 这款手机的摄像头质量太差, 拍出来的照片经常模糊(Negative).
-
利用调优后的生成式语言模型, 可能生成以下新样本:
- 我对这款手机的外观和手感很满意, 用起来非常舒适(Positive).
- 这款手机老是出现死机情况, 而且运行速度很慢(Negative).
- 这款手机在光线较弱的环境下拍摄效果也很好, 对细节的还原度很高(Positive).
- 我觉得它的扬声器音质不好, 打电话时声音总是断断续续(Negative).
这些合成样本与原始样本一起组成一个更大的训练集, 从而帮助模型在低资源条件下更好地学习不同情感类别的特征. 这种方法在其他NLP任务(如文本分类、命名实体识别等)中也能同样发挥作用, 前提是先使用少量数据对生成式模型进行定向调优.
方法论¶
作者提出了一个统一的VLP框架BLIP, 用于从噪声图像-文本对中学习. 本节首先介绍他们的新模型架构MED及其预训练目标, 然后介绍用于数据集自举的CapFilt.
模型架构¶
他们使用ViT作为图像编码器, 它将输入图像分割成若干小patch, 并将其编码为一个序列的embedding, 还有一个[CLS]
token用来表示全局图像特征. 和预训练的物体检测器用于视觉特征提取相比, 使用ViT更便于计算, 已经被最新的方法所使用.
UNITER的基本思想
在UNITER中, 首先需要用Faster R-CNN(或类似的目标检测器)对图像进行对象检测, 获取各个候选区域(Bounding Boxes)以及对应的视觉特征向量. 这些特征通常是针对对象级别或区域级别的. 之后, 模型会将这些区域特征与文本的词向量一同输入到融合模块(通常是基于Transformer的结构)中进行跨模态对齐和表示学习. 优点是通过显式检测到的对象, 可以让模型更好地关注图像中的显著目标, 在某些下游任务(如视觉问答、图文匹配)中可能更有针对性. 缺点是需要先行运行一个大规模目标检测网络, 并对每个图像生成边界框及区域特征, 这会带来额外的计算开销和工程复杂度.
为了预训练一个同时具有理解和生成能力的统一模型, 他们提出了名为Multimodal mixture of encoder-decoder (MED)的多任务模型, 支持三种不同的工作模式:
- 单模态编码器: 分别对图像和文本进行编码, text encoder和BERT相同, 在文本输入的开头添加一个
[CLS]
token来概括句子 - 基于图像的文本编码器: 通过在文本编码器的每个transformer块当中, 在自注意力层和前馈网络层之间插入一个额外的交叉注意力(CA)层来注入视觉信息, 在文本后面附加一个
[Encode]
token, 该token的输出embedding可以作为图文对的多模态表示 - 基于图像的文本解码器: 和上一部的图像文本编码器类似, 但是这里的自注意力层改为因果自注意力(casual self-attention)层, 使得模型能进行文本生成, 使用
[decoder]
token表示序列的开始, 并在句子结束的时候使用一个结束token.
预训练目标¶
在预训练过程中, 他们同时优化三个目标, 包括两个基于理解的目标和一个基于生成的目标. 每对图文只需要一次计算量更高的视觉transformer的前向传播, 以及三次文本Transformer的前向传播, 在这个过程中激活不同功能来计算以下三种损失.
-
Image-Text Contrastive Loss(ITC)会激活单模态编码器. 它的目的是对齐视觉transformer和文本transformer的特征空间, 让正样本的图文对具有相似的表示, 而负样本对的表示则更不相似. 研究表明, 这是提升视觉和语言理解能力的有效目标. 他们遵循Li等人的ITC损失设置, 引入了一个momentum encoder来生成特征, 并使用来自momentum encoder的软标签作为训练目标, 考虑负样本对中潜在的正样本, 个人感觉和MoCo很像.
-
Image-Text Matching Loss(ITM)会激活基于图像的文本编码器. 它旨在学习图文多模态表示, 捕捉视觉和语言间更加细粒度的对齐. ITM是一个二分类任务, 模型会使用一个ITM头(一个线性层)来预测在给定一组图文对的多模态表示(由基于图像的文本编码器生成)下, 图片和文字是否匹配. 在一个batch里面, 有些负样本和正样本相似度比较高, 这些负样本往往更能帮助模型学会区分真正匹配与几乎匹配但是仍然不匹配的情况, 这些负样本成为"硬负样本", 这些硬负样本对有更大的可能性会用于计算ITM损失.
-
Language Modeling Loss(LM)会激活基于图像的文本解码器, 目标是在给定图像的情况下生成文本描述. 它通过优化交叉熵损失来训练模型, 使模型以自回归的方式最大化文本的似然. 他们在计算损失的时候用了0.1的标签平滑. 相比在视觉语言预训练中被广泛使用的MLM损失, LM可以让模型具有更好地泛化能力, 能够将视觉信息转换为连贯的文字描述.
为了在有效进行预训练的同时利用多任务学习, 文本编码器和文本解码器共享除了SA层意外的所有参数. 原因在于解码和编码任务的差异主要体现在SA层上. 具体来说, 编码器使用的双向自注意力来构建当前输入token的表示, 而解码器使用英国自注意力(casual self-attention)来预测下一个token. 另一方面, embedding, CA层和FNN在编码与解码任务中的功能相似, 因此共享这些层可以提高训练效率, 同时受益于多任务学习.
CapFilt¶
由于高昂的标注成本, 目前只有数量有限的高质量人工标注图文对\(\{(I_h, T_h)\}\)(例如, COCO). 最近的工作使用了大量自动从网络手机的图像和alt-text对\(\{I_w, T_w\}\), 然而, 这些alt-text往往无法准确描述图像的视觉内容, 因此对学习视觉-语言对齐来说是一种含有较多噪声的信号.
作者提出了Captioning和Filtering(CapFilt)方法, 用于提升文本语料的质量. 上图为CapFilt示意图. 该方法引入了两个模块: 一个captioner, 用来根据网络图像生成描述, 以及一个filter, 用来剔除噪音图文对. Captioner和filter都从同一个预训练的MED模型初始化, 并分别在COCO数据集上进行调优. 调优过程相对轻量.
这里的image-grounded text encoder/decoder是MED中两个encoder/decoder的衍生
根据论文的描述, 这个”image-grounded text encoder”和”image-grounded text decoder”实际上都是从同一个预训练的MED模型中衍生出来的. MED本身是一个同时包含编码器和解码器的多模态预训练架构, 因此在实现CapFilt方法时, 我们会分别对其中的“解码器部分”进行微调(得到captioner), 对“编码器部分”进行微调(得到filter).
换句话说, captioner和filter并不是完全独立的两个模型, 而是基于同一个MED多模态模型的不同部分(encoder与decoder), 分别承担生成描述和过滤不匹配图文对的功能. 通过这种方式, captioner和filter共享了相同的预训练参数, 只是在后续微调时各自针对不同的目标进行训练.
具体而言, Captioner是一个基于图像的文本解码器, 它通过LM目标进行调优, 在给定图像的情况下解码文本. 对于网络图像\(I_w\), captioner会生成合成描述\(T_s\), 每张图像对应一条描述. Filter则是一个基于图像的文本编码器, 通过ITC和ITM目标进行微调, 用来判断某段文字是否和图像匹配. Filter会剔除原始网络文本\(T_w\)和合成文本\(T_s\)中的噪声文本, 如果ITM头部预测某段文本和图像不匹配, 那么该文本就被认为是噪音. 最后, 他们将过滤后的图文对和人工标注对结合, 形成一个新的数据集, 并用它来预训练一个新模型.
-
Li, J., Li, D., Xiong, C., & Hoi, S. (2022). BLIP: Bootstrapping language-image pre-training for unified vision-language understanding and generation (No. arXiv:2201.12086). arXiv. https://doi.org/10.48550/arXiv.2201.12086 ↩