文章目录
📖年份:2022
📖期刊/影响因子:
📖数字对象唯一标识符DOI:arXiv.2201.12086
📖代码:https://github.com/salesforce/BLIP
📖作者:Junnan Li Dongxu Li Caiming Xiong Steven Hoi
🍒摘要:
视觉-语言预训练(VLP)提高了许多视觉语言任务的性能。然而,大多数现有的预训练模型仅仅擅长基于理解的任务或者基于生成的任务。此外,性能的提高在很大程度上是通过扩大从网络上收集的带有噪声的图像-文本对数据集实现的,而这是一只次优的监督来源。在本文中,我们提出了一个新的VLP框架BLIP,它可以灵活运用与视觉-语言理解和生成任务。BLIP通过引导生成描述的方法,有效地利用了有噪声的网络数据,其中一个captioner生成合成描述,而一个filter去除有噪声的描述。我们在广泛的视觉-语言任务中取得了最先进的成功,例如图像-文本检索(平均召回率@1提高了2.7%)、图像描述(在CIDEr上提高了2.8%)以及视觉问答(VQA分数提高了1.6%)。当BLIP以零样本的方式直接应用到视频-语言任务上时也表现出了很强的泛化能力。代码、模型和数据集已经发布。
🥝研究背景:
近年来,视觉-语言预训练在各种多模态下游任务取得了巨大的成功。然而,现存的方法有两个主要的局限性:
(1)模型方面:大多数任务要么采用基于encoder的模型要么采用encoder-decoder模型。可是,基于encoder的模型不太容易直接应用到文本生成任务(例如图像描述),而encoder-decoder模型还没有成功地应用到图像-文本数据检索任务。
(2)数据角度:大多数最先进的方法(例如CLIP,ALBEF,SlimVLM)在从网络收集到的图像-文本对上进行预训练。尽管通过扩大数据集获得了性能提高,但是本文表明,对于视觉-语言学习来说,有噪声的网络文本是一种次优的选择。
为此,我们提出了BLIP。BLIP是一个全新的VLP框架,与现有任务相比能够更广泛的应用于下游任务。它分别从模型和数据角度引入了两个贡献:
(a)Mutilmodal mixture of Encoder-Deconder(MED):一种有效的多任务预训练和灵活迁移学习的新模型架构。MED可以作为单模态encoder,也可以作为基于图像的文本encoder,或者基于图像的文本decoder。该模型与三个视觉-语言目标联合进行预训练:图像-文本对比学习、图像-文本匹配以及图像条件语言建模。
(b)Captioning and Filtering(CapFilt):一种全新的数据集引导任务用于从带有噪声的图像-文本对中学习。我们将预训练的MED微调为两个模块:一个captioner用来给网络图像生成合成描述,一个filter用来去除原始网络文本和合成文本的噪声描述。
我们进行了大量的实验和分析,并做出了以下主要观察。
-
我们发现captioner和filter共同工作通过引导描述在大量的下游任务中都取得了显著的性能提升。我们还发现更多样化的描述能取得更大的收益。
-
BLIP在在广泛的视觉-语言任务中实现了最先进的性能,包括图像-文本检索,图像描述。视觉问答,视觉推理和视觉对话。我们直接将模型应用到两个视频-语言任务:文本到视频检索和视觉问答时,也是件了最先进的零样本能力。
🍑研究方法及改进:
我们提出了BLIP,一个统一的VLP框架用来从有噪声的图像-文本对中学习。本节首先介绍了我们的新模型架构MED及其预训练目标,然后描述了用于数据集引导的CapFilt。
Model Architecture
我们采用了一个visual transformer作为我们的图像编码器,他将输出图像分割成了小块,并将其编码为一个embedding序列,并使用一个额外的[CLS]标记来表示全局图像特征。与使用预训练的目标检测器进行视觉特征提取,使用ViT更易于计算并已被最新的方法所采用。
为了预训练一个既有理解和生成能力的统一模型,我们提出了多模态混合encoder-decoder(MED),一i个多任务模型可以在以下三种功能之一中运行:
(1)单模态encoder,分别对图像和文本进行编码。文本encoder与BERT一样,[CLS]标志被附加到输入文本的开头以便于总结句子。
(2)基于图像的文本encoder,通过在文本encoder的每个transformer块的自注意(SA)层和前馈神经网络(FNN)插入一个额外的交叉注意(CA)层来引入视觉信息。用于特定任务的[Encode]标志被添加到文本末尾中,[Encode]的输出embedding被用作图像-文本对的多模态表征。
(3)基于图像的文本decoder,**使用因果自注意层替换基于图像的文本encoder中的双向自注意层。[Deconde]标志被用来表示序列的开始,而一个终止标记(end-of-sequence token)被用来表示序列的结束。
预训练目标
我们在预训练中联合优化了三个目标,两个基于理解的目标和一个基于生成的目标。每个图像-文本对仅需要通过计算量更大的vision transformer进行一次前向传递,以及通过text transformer进行三次前向传递,其中激活不同的功能来计算以下三种损失。
Image-Text Constrastive Loss(ITC) 激活单模态encoder。它旨在通过鼓励正向的图像-文本对具有相似的表征来使vision transformer和text transformer的特征空间对齐,与负面对形成对比。它已被证明是提高视觉和语言理解的有效目标。我们遵循Li等人提出的ITC损失函数,其中引入momentum encoder来生成特征,并从momentum encoder中创建soft labels作为训练目标以考虑吧在负样本中可能存在的正样本。
Image-Text Matching Loss(ITMS) 激活基于图像的文本encoder。它旨在学习图像-文本多模态表征,捕捉视觉和语言之间的细粒度对齐。ITM是一个二元分类任务,模型使用ITM头(一个线形层)来预测给定他们的多模态特征的图像-文本对是正样本(匹配)的还是负样本(不匹配)。为了找到更具有信息量的负样本,我们采用了Li等人的硬否定挖掘策略,在该策略中,在一个批次中对比相似度高的负样本对更有可能被选中来计算损失。
Language Modeling Loss(LM) 激活基于图像的文本decoder,目的是生成给定图像的文本描述。他优化了一个交叉熵损失,以自回归的方式训练模型以最大化文本的似然度。我们在计算损失时应用标签平滑值为0.1。与目前广泛应用与VLP的MLM损失相比,LM使模型有泛化能力将视觉信息转化为连贯的描述。
为了在使用多任务学习时进行高效的预训练,文本encoder和文本decoder共享所有参数,除了SA层。原因是encoding和decoding任务之间的差异最好由SA层捕获。特别是,encoder使用bi-directional
self-attention 为当前input tokens构建特征,而decoder使用causal self-attention 来预测下一个tokens。另一方面,embedding层,CA层和前馈网络在encoding和decoding任务相似,因此共享这些层可以提高训练效率,同时有益于多任务学习。
CapFilt
由于高昂的标注成本,高质量的人工标注的图像-文本对数量有限(如COCO)。近期工作(CLIP)利用了从网络上自动收集的大量图像和替代文本对{(Iw, Tw)}。然而,替代文本经常不能正确描述图像的视觉内容,使得他们成为学习视觉-语言对齐的次优噪声信号。
我们提出了Cpationing和Filtering(CapFilt),一个全新的任务来提高文本语料库的质量。图3给除了对CapFilt的图解。它介绍了两个模块:captioner用于给定的网络图像生成描述,并且filter用来去除带有噪声的图像-文本对。captioner和filter都由相同的预训练MED模型初始化,并分别在COCO数据集上微调。微调是一个轻量级的过程。
具体来说,captioner是一个基于图像的文本decoder。它由LM目标来微调用来解码给定图像的文本。给定网络图像
I
w
I_w
Iw,captioner对每个图像生成合成描述
T
s
T_s
Ts。filter是一个个基于图像的文本encoder,它由ITC和ITM目标微调而来学习文本是否与图像匹配。filter去除了原始网络文本
T
w
T_w
Tw和合成文本
T
w
T_w
Tw中的噪声文本,如果ITM头预测文本与图像不匹配,该文本则被认为是带有噪声的。最后,我们将过滤猴的图像-文本对和人工标注的图像-文本对组合成一个新的数据集,并利用该数据集对新的模型进行预训练。
🍍方法:
Pre-training Details
模型在Pytorch中实现,并在两个16-GPU节点上训练。image transformer由在ImageNet上预训练的ViT初始化,text transformer由
B
E
R
T
b
a
s
e
{BERT_base}
BERTbase初始化。我们探索了ViT的两种变体:ViT-B/16和Vit-L/16。除非另有说明,本文中报告的所有结果均使用 ViT-B 作为“BLIP”。我们使用批量大小为2880(ViT-B)/2400(ViT-L)进行20个epoch的预训练。我们使用权重衰减为0.05的AdamW优化器。学习率被调整到3e-4(ViT-B)/ 2e-4(ViT-L),并以0.85的速率进行线性衰减。我们在预训练阶段随机裁剪图像分辨率为224×224,并在微调阶段将图像分辨率增加到384×384。我们使用与Li等人相同的预训练数据集,共14M张图像,包括两个人工注解的数据集(COCO和Visual Genome),三个网络数据集Conceptual Caption,Conceptual 12M,SBU Caption)。我们还实验了额外的网络数据集LAION,它包括了115M图像和更多的有噪声的文本。
Effect of CapFilt
在表一中,我们比较了在不同数据集下的预训练模型以展示CapFilt在下游任务的效果,包括图像-文本检索和经过微调和零样本设置的图像描述。
当只有captioner或filter被应用到14M图像的数据集上时,可以观察到性能提升。当一起应用时,它们的效果互补,与使用原始噪声网络文本相比有了显著的改进。
CapFilt能够通过使用更大的数据集和更大的视觉主干网络进一步提升性能,这验证了它在数据大小和模型大小方面的可扩展性。此外,通过使用带有Vit-L的更大的captioner和filter,基础模型的性能也可以得到改善。
在图四中,我们展示了一些示例描述和它们相应的图像,定型的展示了captioner生成心得文本描述的效果,以及filter从原始网络文本和合成文本去除带有噪声的描述的效果。
Diversity is Key for Synthetic Captions
在CapFilt中,我们采用核采样(nucleus samplin)来生成合成描述。核采样是一种随机解码方法,其中每个token都是从一组tokens中采样的,这些token的累计概率综合超过了阈值p(实验中p=0.9)。在表2中,我们将它与束搜索进行比较,束搜索是一种确定性解码方法,旨在生成具有最高概率的字幕。
核采样法明显带来了更好的效果,尽管从filter的噪声比可以看出,它的噪声更多。我们假设的原因是核采样生成了更多多样化和令人惊讶的描述,其中包含了模型可以从中受益的更多新信息。另一方面,束搜索倾向于生成数据集中常见的安全描述,因此提供额外知识较少。
Parameter Sharing and Decoupling
在预训练期间,text encoder和decoder共享除了self-attention层的所有参数。在表3中,我们评估及使用不同参数共享策略进行预训练的模型,其中预训练是在14M带有网络文本的图像进行的。
结果表明,与不共享相比,共享除SA层的所有参数可以获得更好的性能,同时也减小了模型的大小从而提高了训练效率。如果SA层被共享,由于编码任务和解码任务之间的冲突会使得模型性能下降。
在CapFilt中,captioner和filter根据COCO数据集分别进行端到端的微调。在表4中,我们研究了captioner和filter以预训练相同的方式进行参数共享的效果。下游任务的性能下降,我们将主要归因于确认偏差(confirmation bias)。由于参数共享,由captioner产生的噪声的描述不易被filter过滤,这可以由较低的噪声比率(与25%相比,降低到了8%)来说明。
Additional Ablation Study
CapFilt的改进并非因为训练时间更长。由于bootstrap数据集包含的文本比原始数据集更多,因此对于相同的epoch数,bootstrap数据集的训练时间更长。为了验证CapFilt的有效性并非因为训练时间更长,我们在原始数据集中复制网络文本,使得其每个epoch的训练样本数与bootstrap数据集相同。如表12所示,使用噪声网络文本进行更长时间的训练并不能提高性能。
在bootstrap数据集上应该训练一个新模型。bootstrap数据集用于预训练一个新模型。我们研究了从之前预训练模型继续训练的影响,使用bootstrap数据集。表13显示继续训练并没有帮助。这个观察结果与知识蒸馏中的普遍做法一致,即学生模型不能从老师那里初始化。
🍓结果与讨论:
Image-Text Retrieval
我们在COCO和Flickr30K数据集上评估BLIP在图像到文本检索(TR)和文本到图像检索(IR)方面的表现。我们使用ITC和ITM损失对预训练模型进行微调。为了实现更快的推理速度,我们遵循Li等人的方法,首先根据图像-文本特征相似性选择k个候选项,然后基于它们的成对ITM分数重新排列选定的候选项。我们为COCO设置k=256,为Flickr30K设置k=128。
如表5所示,BLIP相比现有方法实现了大幅度的性能提升。使用同样的14M张预训练图像,BLIP在COCO上的平均召回率@1比之前最好的模型ALBEF高出2.7%。我们也通过直接将在COCO上微调过的模型转移到Flickr30K上进行了零击检索。结果如表6所示,BLIP同样大幅度超越了现有的方法。
Image Captioning
我们考虑用于图像描述的两个数据集:NoCaps和COCO,两者均使用在COCO上微调并使用语言模型(LM)损失的模型进行评估。与Wang等人相似,我们在每个描述的开头添加了一个提示“一幅图像”,这导致结果稍微好一些。如表7所示,使用14M预训练图像的BLIP显著优于使用相似数量的预训练数据的方法。
BLIP拥有129M张图像,其表现与LEMON拥有200M张图像时相媲美。请注意,LEMON需要一个计算量较大的预训练物体检测器和更高分辨率(800×1333)的输入图像,这导致其推理时间比无需检测器且使用较低分辨率(384×384)输入图像的BLIP慢得多。
Visual Question Answering (VQA)
VQA 要求模型预测给定的图像和问题的答案。我们不是将VQA问题定位成一个多答案分类任务,而是遵循Li等人的方法,将其视作一个答案生成任务,这样可以实现开放式的VQA。如图5(a)所示,在微调过程中,我们将预训练的模型进行重新排列,其中先将图像-问题编码成多模态embedding,然后输入到answer deconder中。使用真实答案作为目标,对 VQA 模型进行了基于语言模型损失的微调。
结果如表8所示。使用14M张图片,BLIP在测试集上比ALBEF高出1.64%。使用129M张图片,BLIP比SimVLM表现更优,而后者使用的预训练数据为其13倍多,且拥有一个具有额外卷积阶段的更大的视觉骨干网络。
Natural Language Visual Reasoning (NLVR2)
N
L
V
R
2
NLVR^2
NLVR2要求模型预测一个句子是否描述了一对图像。为了实现两个图像的推理,我们对预训练模型做了一些简单的修改,这比之前的方法(Li;Wang)相比拥有更有效的计算体系架构。
如图(5)b所示,对于基于图像的文本encoder的每一个transformer block,都存在两个cross-attention来处于两个输入的图像,他们的输入被合并并传到前馈神经网络。这两个CA层从相同的预训练权重进行初始化。在encoder的前六层中,合并层执行简单的平均池化。并在6-12层执行连接后进行线性投影。然后在[Encoder]token的输出embedding上应用MLP分类器。
如表8所示,BLIP的性能超过了所有现有的方法,除了进行了额外自定义预训练步骤的ALBEF。有趣的是,
N
L
V
R
2
NLVR^2
NLVR2的性能并没有从额外的网络图像中受益,可能是由于网络数据和下游数据之间的领域差异。
Visual Dialog (VisDial)
VisDial在自然对话环境中拓宽了VQA的应用,模型不仅需要基于图像-问题对预测答案,而且还需考虑对话历史和图像的描述。我们采用了将答案候选项进行排序的区别设置。如图5©所示,我们将图像和描述embedding进行连接,并通过交叉注意力将它们传递给Dialog Encoder。
dialog encoder经过ITM损失的训练,在给出整个对话历史和图像-描述embedding的情况下,来判断问题的答案是真还是假。如表9所示,我们的方法在VisDial v1.0验证集上达到了最先进的性能。
Zero-shot Transfer to Video-Language Tasks
我们的图像-语言模型对视频-语言任务具有很强的泛化能力。在表10和表11中,我们进行了零样本迁移和文本到视频检索以及视频问答,我们分别对在COCO-retrieval和VQA上训练的模型直接进行评估。为了处理视频的输入,我们对每个视频统一采用n帧(检索时n=8,QA时n=16),并将帧特征连接成一个序列。注意,这种简单的方法忽略了所有的时间信息
尽管存在领域的差异和缺乏时间建模,但我们的模型在两个视频-语言任务上都实现了最先进的性能。对于文本到视频的检索,零样本学习的BLIP甚至超越了在目标视频数据集上微调的模型,其在recall@1指标上提升了12.4%。如果使用BLIP模型来初始化一个带有时间建模的视频-语言模型(例如,用TimeSformer替换我们的ViT),并在视频数据上进行微调,可以进一步提升性能。
🍹论文创新点
- 多模态混合编码器-解码器(MED):BLIP引入了一种新的模型架构,即多模态混合编码器-解码器(MED),用于有效的多任务预训练和灵活的迁移学习。MED可以作为单模态编码器、基于图像的文本编码器或基于图像的文本解码器进行操作。该模型与三个视觉-语言目标联合预训练:图像-文本对比学习、图像-文本匹配和基于图像的语言建模。
- 描述生成和过滤(CapFilt):BLIP提出了一种新的数据增强方法,用于从带有噪声的图像-文本对中学习。首先,使用预训练的MED模型生成合成标题,然后使用过滤器从原始网络文本和合成文本中去除噪声标题。通过标题生成和过滤的协同作用,BLIP实现了在各种下游任务上的显著性能提升。
- 有效利用噪声网络数据:BLIP通过引入CapFilt方法,有效地利用了噪声网络数据。传统的方法通过扩大数据集规模来提高性能,但忽视了噪声数据的负面影响。BLIP通过合成描述和过滤噪声描述的方式,更有效地利用了网络数据。
⚖️不足及可改进的点:
- 框架的性能还有提升空间,尤其是在处理噪声图像-文本对的能力上仍有改进的余地。
- 对于大规模数据集的训练和推理的效率可以进一步优化。
- 在某些特定任务上的表现可能还不如一些专门设计的模型。
🍩展望:
- 多轮数据集自举:通过进行多轮bootstrapping,可以在每轮迭代中利用新生成的数据集对模型进行修正和改进,进一步提高模型性能。
- 为每张图像生成多个合成描述:通过为每张图像生成多个合成描述,可以进一步扩大预训练语料库,从而提高模型的泛化能力和性能。
- 通过训练多个不同的captioner和filter并将它们在CapFilt中组合起来,进行模型集成。模型集成通常可以提高模型的鲁棒性和性能,因为不同模型可能会关注不同的特征并在不同方面表现出优势。