文章目录
BLIP
论文: 《BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation》
代码:https://github.com/salesforce/BLIP
Introduction
视觉语言预训练(Vision-Language Pre-training, VLP
)在各种多模态下游任务中取得了巨大的成功。然而,现有的VPL方法有两个主要的局限性:
(1)模型视角
现有的VLP模型要么基于encoder架构,要么基于encoder-decoder的架构。然而,基于encoder的模型不太容易直接转移到文本生成任务(例如图像字幕),而encoder-decoder模型尚未成功地用于图像-文本检索任务。
即大多数现有的预训练模型只擅长基于理解的任务或基于生成的任务。
(2)数据视角
大多数最先进的方法(例如CLIP,ALBEF,SimVLM )对从网络收集的图像-文本对进行预训练。尽管通过扩大数据集获得了性能提升,但噪声web text对于视觉语言学习来说是次优的。
因此本文提出了BLIP: Bootstrapping language-image Pre-training
,从noise 图像文本对中学习,用于统一的视觉语言理解和生成
Method
模型架构
为了预训练具有理解和生成能力的统一模型,提出了编码器-解码器的多模态混合(multimodal mixture of encoder-decoder, MED
),这是一种多任务模型,可以运行如下的三种功能
(1)Unimodal encoder : 分别对图像和文本进行编码。图像编码器就是ViT
(上图左1), 文本编码器与BERT
相同(上图左二),其中在文本输入的开头附加一个[CLS]
令牌以总结句子。
(2)Image-grounded text encoder: 通过为文本编码器的每个Transformer块在自注意(self-attention, SA)
层和前馈网络(feed forward network, FFN)
之间插入一个附加的交叉注意(Cross Attention,CA)层
来注入可视信息。任务特定的[Encode]
标记被附加到文本中,[Encode]的输出嵌入被用作图像-文本对的多模态表示。
(3)Image-grounded text decoder : 其用因果自注意层(casual Self-Attention)
代替Image-grounded text encoder
中的Bi Self-Att
。一个[Decode]
标记用于表示序列的开始,一个序列结束标记用于表示其结束
预训练目标
在预训练中共同优化了三个目标,两个基于理解的目标和一个基于生成的目标。
每个图像-文本对只需要通过计算量较大的visual transformer进行一次前向传递,并通过文本转换器进行三次前向传递。
其中激活不同的功能以计算如下所述的三种损失:
(1)Image-Text Contrastive Loss (ITC) 用于激活Unimodal encoder
。它的目的是通过鼓励positive的图像-文本具有相似的表示 (相反,使得negtive的图像文本队具有不同的表示) 来对齐视觉转换器和文本转换器的特征空间。 ( 这一步和CLIP模型非常类似,就是把文本和图像两种模态对齐到一个特征空间上)
遵循《Align before Fuse: Vision and Language Representation Learning with Momentum Distillation》 中提到的ITC loss ,其中引入动量编码器产生特征,并从动量编码器创建软标签作为训练目标。
(2)Image-Text Matching Loss (ITM) 用于激活 image-grounded text encoder
。它旨在学习图像-文本多模态表示,以捕获视觉和语言之间的细粒度对齐。
ITM是一个二元分类任务,其中模型使用ITM头(线性层)来预测给定图像-文本对的多模态特征是正的(匹配的)还是负的(不匹配的)。
为了找到具有丰富信息的负样本,我们采用《Align before Fuse: Vision and Language Representation Learning with Momentum Distillation》 中提到hard negative mining strategy
,其中batch中具有较高contrastive similarity 的负样本对更有可能被选择来计算损失。
(3)Language Modeling Loss (LM) 用于激活image-grounded text decoder
。它旨在生成给定图像的文本描述。它优化了交叉熵损失,训练模型以自回归的方式最大化文本的可能性。在计算损失时,我们使用0.1的标签平滑。与广泛用于VLP的MLM损失相比,LM使具有泛化能力的模型能够将视觉信息转换为连贯的字幕。
Image-grounded Text Encoder
用于判断图像和文本是否匹配
Image-grounded Text Decoder
用于根据输入图片生成字幕
Image-grounded Question Encoder
和Answer decoder
联合起来用,可以用于视觉问答系统。
为了在利用多任务学习的同时执行有效的预训练,文本编码器和文本解码器 共享除SA层之外的所有参数。(原因是编码和解码任务之间的差异最好由SA层捕获。)
特别是,编码器使用双向自注意(Bi Self-Attn)来构建当前输入标记的表示,而解码器使用因果自注意 (Casual Self-Attn) 来预测下一个标记。
另一方面,编码和解码任务之间的嵌入层、CA层和FFN的作用相似,因此共享这些层可以提高训练效率,同时受益于多任务学习。
字幕和过滤(Capfilt)
image-text pairs
{ ( I h , T h ) } \{(I_h, T_h)\} {(Ih,Th)}: 由于标注成本过高,高质量的人工标注图像-文本对数量有限。alt-texts pairs
{ ( I w , T w ) } \{(I_w, T_w)\} {(Iw,Tw)} : 从网络上自动收集大量的图像文本对,通常不能准确地描述图像的视觉内容,是一个noisy的信号,对于学习视觉语言对齐来说是次优的。
因此,BLIP提出了一种提高文本语料库质量的新方法Captioning and Filtering (CapFilt), 下图给出了CapFilt的示例。
Capfilt引入了两个模块:一个用于生成给定web图像的标题的captioner
,以及一个用于去除noisy 图像-文本对的filter
。captioner和filter都是从相同的预训练MED模型初始化的,并在COCO数据集上分别进行微调。
captioner
是一个Image-grounded text decoder
。它与LM
目标进行了微调,以解码给定图像的文本。给定web图像 I w I_w Iw, captioner生成合成字幕 T s T_s Ts,每个图像对应一个字幕。Filter
是一个Image-grounded text encoder
。它与ITC
和ITM
目标进行了微调,学习文本是否与图像匹配。Filter去除原始web文本 T w T_w Tw和合成文本 T s T_s Ts中的噪声文本,如果ITM头预测文本与图像不匹配,则认为文本是噪声文本。最后,将过滤后的图像文本对与人工注释的图像文本对结合起来形成一个新的数据集,我们使用它来预训练一个新的模型。
BLIP2
论文: 《BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models》
代码: https://github.com/salesforce/LAVIS/tree/main/projects/blip2
Introduction
BLIP2 是一个通用的且高效的视觉语言预训练(Vision-language pre-training,VLP
)模型 : 从现成的冻结的预训练图像编码器和冻结的预训练大型语言模型中引导视觉语言预训练,并使用轻量级查询转换器Q-Former 弥补了语言和视觉两种模态上的差距。
- 预训练的视觉模型:可以提供高质量的视觉表示(visual representation)
- 预训练的语言模型:尤其是大语言模型,可以提供强大的语言生成和zero-shot的迁移能力。
为了减少计算成本和解决灾难性遗忘问题,这两个unimodal 模型在预训练过程中保持冻结状态。
- 为了实现与冻结unimodal 模型的有效视觉语言对齐,提出了一个使用新的两阶段预训练策略进行预训练
Querying Transformer (QFormer)
。
Method
Q-Former是一种轻量级的Transformer,它使用一组可学习的查询向量从冻结图像编码器中提取视觉特征,它充当冻结图像编码器和冻结LLM之间的信息瓶颈,为LLM输出所需文本提供最有用的视觉特征。
Q-Former的两个预训练阶段:
(1) vision-language representation learning stage
: 通过冻结的图像编码器执行视觉语言表征学习,强制Q-Former学习与文本最相关的视觉表征。
(2) vision-to-language generative learning stage
: 通过将Q-Former的输出连接到一个冻结的LLM来执行视觉到语言的生成学习,并训练Q-Former,使其输出的视觉表示可以被LLM解释。
模型结构
不论图像分辨率是多少,Q-Former 从图像编码器中提取固定数量的输出特征。
如下图所示,Q-Former由两个Transformer子模块组成,它们共享相同的self-attention层:
(1) Image transformer
: 与冻结图像编码器交互进行视觉特征提取 (Q-former中左边的框)
(2) Text Transformer
: 既可以作为文本编码器又可以作为文本解码器 (Q-former中右边的框)
创建了一组可学习的query embeddings
作为image transformer 的输入。
- queries 通过
self-attention
层实现不同query的相互交互 - queries 通过
cross -attention
与冻结的图像特征交互。 - queries 通过相同的
self-attention
与文本交互。
Q-Former预训练第一阶段
在表示学习阶段( vision-language representation learning stage
),将Q-Former连接到一个固定的图像编码器,并使用图像-文本对进行预训练。该阶段目标是训练Q-Former,这样查询就可以学习提取文本中信息量最大的视觉表示。
受BLIP的启发,在该阶段共同优化了三个共享相同输入格式和模型参数的预训练目标。如下图所示,每个目标在查询和文本之间使用不同的注意力屏蔽策略来控制它们的交互。
Image-Text Contrastive Learning (ITC)
通过对比正对和负对的图像-文本相似性,学习对齐图像表示和文本表示,最大化它们共同的信息。
将来自image transformer 的输出查询表示Z
与来自text transformer 的文本表示t
对齐,其中t是[CLS]
令牌的输出嵌入。
由于Z
包含多个输出嵌入(每个查询嵌入一个),我们首先计算每个查询输出与t
之间的成对相似度,然后选择最高的一个作为图像-文本相似度。
为了避免信息泄漏,我们采用unimodal self-attention mask
(右图),其中查询和文本不允许彼此看到。Image-grounded Text Generation (ITG)
训练Q-Former在给定输入图像的条件下生成文本。
由于Q-Former的体系结构不允许冻结图像编码器和文本标记之间的直接交互,因此生成文本所需的信息必须首先由查询提取,然后通过self-attention层传递给文本标记。因此,使得查询提取与文本信息相关的所有视觉特征。
使用多模态因果自注意掩码multimodal causal self-attention mask
(中图) 来控制查询-文本交互。
查询间可以相互交互,但不能处理文本交互。
每个文本都可以处理所有查询及其前一个文本。还用一个新的[DEC]
令牌替换[CLS]
令牌,作为第一个文本令牌,向解码任务发出信号。Image-Text Matching (ITM)
旨在学习图像和文本表示之间的细粒度对齐。
这是一个二元分类任务,其中要求模型预测图像-文本对是正的(匹配)还是负的(不匹配)。
我们使用双向自关注掩码bi-directional self-attention mask
(左图),所有查询和文本都可以相互关注。
因此,输出查询嵌入Z捕获多模态信息。我们将每个输出查询嵌入到一个两类线性分类器中以获得logit,并将所有查询的logit平均值作为输出匹配分数。
Q-Former预训练第二阶段
在vision-to-language generative learning stage
,我们将QFormer (包括冻结图像编码器) 连接到冻结的LLM,以获取LLM的生成语言能力。
如上图所示,使用一个全连接(FC)层,用于将输出查询嵌入Z
线性投影到与LLM的文本嵌入相同的维度。然后将投影后的查询嵌入添加到输入文本嵌入中。它们作为软视觉提示(soft visual prompts
),对由Q-Former提取的视觉表示进行条件约束。
由于Q-Former已被预先训练以提取语言信息的视觉表示,因此它有效地充当信息瓶颈,为LLM提供最有用的信息,同时删除无关的视觉信息。这减少了LLM学习视觉语言一致性的负担,从而减轻了灾难性遗忘问题。
我们实验了两种类型的LLM:
- 基于解码器的LLM
使用语言建模损失(language modeling loss
)进行预训练,其中冻结的LLM的任务是根据Q-Former的视觉表示生成文本。(上图) - 基于编码器-解码器的LLM
使用前缀语言建模损失(prefix language modeling loss
)进行预训练,我们将文本分成两部分。前缀文本与可视化表示相连接,作为LLM编码器的输入。后缀文本用作LLM解码器的生成目标。(下图)