BLIP系列文章小结(BLIP, BLIP-2, InstructBLIP)

PaperCiteDategithub
BLIPhttps://proceedings.mlr.press/v162/li22n/li22n.pdf8812022-01https://github.com/salesforce/LAVIS/tree/main
BLIP-2https://arxiv.org/pdf/2301.12597.pdf4552023-01https://github.com/salesforce/LAVIS/tree/main
InstructBLIPhttps://arxiv.org/abs/2305.065001572023-05https://github.com/salesforce/LAVIS/tree/main

1 背景

BLIP系列是多模态任务比较有代表性的一份工作,本文将对BLIP系列的3篇paper进行详细解读,便于多模态的初学者入门,也以便自己日后回顾。

概括来看:

  • BLIP的核心创新点在于boostrapping caption的方案的设计。该方案用于“提纯”带噪声web datasets,从而进一步提升多模态模型的效果。
  • BLIP-2的核心创新点有二,其一是设计了一个轻量架构QFormer(querying transformer)来建立图像-文本的桥梁,其二是设计了一种二阶段预训练范式实现高效训练,实现将目前的视觉backbone与LLM模型链接起来。
  • InstructBLIP的核心创新点在于系统的研究了vision-language的intruction tuning技术方法。并设计了一种instruction-aware的特征提取方式来增强多模态模型的能力。

2 BLIP

2.1 main-idea

目前VLP(vision-language pre-training)数据集大多是网络爬取而来(称之为web datasets),里面的caption包含很多噪声,并不是一个理想的监督来源。BLIP这篇文章提出一种boostrapping caption的方案来“提纯”带噪声web datasets,从而进一步提升多模态模型的能力。概括来说:这篇文章设计了一种去噪方案,来提纯web datasets,以此带来精度提升。

2.2 method

2.2.1 模型架构

BLIP多模态架构为双塔架构。论文中用3个vision language pretraining(VLP) task来激发模型的多模态能力。
在这里插入图片描述

2.2.2 多模态预训练任务
2.2.2.1 Image-Text Contrastive Loss (ITC)

和CLIP训练任务一致。核心思想是:给定图片-文本向量对 { ( f e a i m g ( 1 ) , f e a t e x t ( 1 ) ) , ( f e a i m g ( 2 ) , f e a t e x t ( 2 ) ) , ⋯   , ( f e a i m g ( N ) , f e a t e x t ( N ) ) } \{(\mathrm{fea}_{\mathrm{img}}^{(1)}, \mathrm{fea}_{\mathrm{text}}^{(1)}), (\mathrm{fea}_{\mathrm{img}}^{(2)}, \mathrm{fea}_{\mathrm{text}}^{(2)}), \cdots, (\mathrm{fea}_{\mathrm{img}}^{(N)}, \mathrm{fea}_{\mathrm{text}}^{(N)}) \} {(feaimg(1),featext(1)),(feaimg(2),featext(2)),,(feaimg(N),featext(N))}.其训练目标为,同pair的 ( f e a i m g ( i ) , f e a t e x t ( i ) ) (\mathrm{fea}_{\mathrm{img}}^{(i)}, \mathrm{fea}_{\mathrm{text}}^{(i)}) (feaimg(i),featext(i))相似度越接近越好,非同pair的 ( f e a i m g ( i ) , f e a t e x t ( j ) , i ≠ j ) (\mathrm{fea}_{\mathrm{img}}^{(i)}, \mathrm{fea}_{\mathrm{text}}^{(j)}, i \neq j) (feaimg(i),featext(j),i=j)相似度越远越好,形如
L o s s = 1 2 ( ∑ i = 0 N C E ( exp ⁡ ( f e a i m g ( i ) ⋅ f e a t e x t ( i ) ) ∑ j = 0 N exp ⁡ ( f e a i m g ( i ) ⋅ f e a t e x t ( j ) ) ) + ∑ j = 0 N C E ( exp ⁡ ( f e a i m g ( j ) ⋅ f e a t e x t ( j ) ) ∑ i = 0 N exp ⁡ ( f e a i m g ( j ) ⋅ f e a t e x t ( i ) ) ) ) Loss = \frac{1}{2} \left(\sum_{i=0}^{N} CE(\frac { \exp ( \mathrm{fea}^{(i)}_{\mathrm{img}} \cdot \mathrm{fea}^{(i)}_{\mathrm{text}})} {\sum_{j=0}^{N}{\exp( \mathrm{fea}^{(i)}_{\mathrm{img}} \cdot \mathrm{fea}^{(j)}_{\mathrm{text}})} } ) + \sum_{j=0}^{N} CE(\frac { \exp ( \mathrm{fea}^{(j)}_{\mathrm{img}} \cdot \mathrm{fea}^{(j)}_{\mathrm{text}})} {\sum_{i=0}^{N}{\exp( \mathrm{fea}^{(j)}_{\mathrm{img}} \cdot \mathrm{fea}^{(i)}_{\mathrm{text}})} } ) \right) Loss=21(i=0NCE(j=0Nexp(feaimg(i)featext(j))exp(feaimg(i)featext(i)))+j=0NCE(i=0Nexp(feaimg(j)featext(i))exp(feaimg(j)featext(j))))
伪代码如下(from CLIP paper)

在这里插入图片描述

有了上面的背景知识,ITC的步骤就很好理解了:

STEP1: 图片经过image encoder得到image embedding R B × 3 × H × W ⟶ E n c o d e r i m g R B × L i m g × d \mathbb{R}^{B\times 3 \times H \times W} \stackrel{\mathrm{Encoder}_{\mathrm{img}}} \longrightarrow \mathbb{R}^ {B\times L_{\mathrm{img}} \times d} RB×3×H×WEncoderimgRB×Limg×d

STEP2: 文本经过text encoder得到text embedding R B × L × d ′ ⟶ E n c o d e r t e x t R B × L t e x t × d \mathbb{R}^{B\times L \times d'} \stackrel{\mathrm{Encoder}_{\mathrm{text}}} \longrightarrow \mathbb{R}^ {B\times L_{\mathrm{text}} \times d} RB×L×dEncodertextRB×Ltext×d

STEP3: 分别拿到image embedding中[CLS]token对应的embedding f e a i m g ∈ R B × d \mathrm{fea}_{\mathrm{img}} \in \mathbb{R} ^{B \times d} feaimgRB×d, 与文本text embedding中[CLS]token对应的embedding f e a t e x t ∈ R B × d \mathrm{fea}_{\mathrm{text}} \in \mathbb{R} ^{B \times d} featextRB×d.

STEP4: f e a i m g \mathrm{fea}_{\mathrm{img}} feaimg f e a t e x t \mathrm{fea}_{\mathrm{text}} featext投影到同一维度

STEP5: 同pair的 ( f e a i m g ( i ) , f e a t e x t ( i ) ) (\mathrm{fea}_{\mathrm{img}}^{(i)}, \mathrm{fea}_{\mathrm{text}}^{(i)}) (feaimg(i),featext(i))相似度约接近越好,非同pair的 ( f e a i m g ( i ) , f e a t e x t ( j ) , i ≠ j ) (\mathrm{fea}_{\mathrm{img}}^{(i)}, \mathrm{fea}_{\mathrm{text}}^{(j)}, i \neq j) (feaimg(i),featext(j),i=j)相似度越远越好。

在这里插入图片描述

2.2.2.2 Image-text matching (ITM)

ITM也是VLP的常用任务,它的实现形式有很多,核心思想是:给定图片-文本向量对 { ( f e a i m g ( 1 ) , f e a t e x t ( 1 ) ) , ( f e a i m g ( 2 ) , f e a t e x t ( 2 ) ) , ⋯   , ( f e a i m g ( N ) , f e a t e x t ( N ) ) } \{(\mathrm{fea}_{\mathrm{img}}^{(1)}, \mathrm{fea}_{\mathrm{text}}^{(1)}), (\mathrm{fea}_{\mathrm{img}}^{(2)}, \mathrm{fea}_{\mathrm{text}}^{(2)}), \cdots, (\mathrm{fea}_{\mathrm{img}}^{(N)}, \mathrm{fea}_{\mathrm{text}}^{(N)}) \} {(feaimg(1),featext(1)),(feaimg(2),featext(2)),,(feaimg(N),featext(N))}.其训练目标为预测 ( f e a i m g ( i ) , f e a t e x t ( j ) ) (\mathrm{fea}_{\mathrm{img}}^{(i)}, \mathrm{fea}_{\mathrm{text}}^{(j)}) (feaimg(i),featext(j))是否来自同一个pair。是为1,否则为0。形如:
L o s s = ∑ i ∑ j { C E ( L o g i t ( f e a i m g ( j ) , f e a t e x t ( i ) ) , 1 ) i f   i = j C E ( L o g i t ( f e a i m g ( j ) , f e a t e x t ( i ) ) , 0 ) i f   i ≠ j \mathrm{Loss} = \sum_{i} \sum_{j} \begin{cases} \mathrm{CE}(\mathrm{Logit}_{} (\mathrm{fea}^{(j)}_{\mathrm{img}}, \mathrm{fea}^{(i)}_{\mathrm{text}}), 1) \quad \mathrm{if \, i = j} \\ \mathrm{CE}(\mathrm{Logit}_{} (\mathrm{fea}^{(j)}_{\mathrm{img}}, \mathrm{fea}^{(i)}_{\mathrm{text}}), 0) \quad \mathrm{if \, i \neq j} \end{cases} Loss=ij{CE(Logit(feaimg(j),featext(i)),1)ifi=jCE(Logit(feaimg(j),featext(i)),0)ifi=j
下面来看具体是如何实现的。

STEP1: 图片经过image encoder得到 image embedding R B × 3 × H × W ⟶ E n c o d e r i m g R B × L i m g × d \mathbb{R}^{B\times 3 \times H \times W} \stackrel{\mathrm{Encoder}_{\mathrm{img}}} \longrightarrow \mathbb{R}^ {B\times L_{\mathrm{img}} \times d} RB×3×H×WEncoderimgRB×Limg×d

STEP2: 文本经过text encoder得到text embedding R B × L × d ′ ⟶ E n c o d e r t e x t R B × L t e x t × d \mathbb{R}^{B\times L \times d'} \stackrel{\mathrm{Encoder}_{\mathrm{text}}} \longrightarrow \mathbb{R}^ {B\times L_{\mathrm{text}} \times d} RB×L×dEncodertextRB×Ltext×d,和ITC有所区别的是,此处将image embedding 作为encoder_hidden_states也送入到text encoder(image embedding与text embedding在cross-attent层进行特征交互,image se quence embedding作为key,value。text embedding作为query)。因此最后输出的text embedding也同时蕴含了image sequence embedding的信息。作者将此时的text encoder称为 image-ground text encoder

image embedding与text embedding在cross-attention的特征交互实现可见transformers库BertSelfAttention函数

STEP3: 取文本text embedding中[CLS]token对应的embedding f e a t e x t ∈ R B × d \mathrm{fea}_{\mathrm{text}} \in \mathbb{R} ^{B \times d} featextRB×d

  • 当送入image sequence embedding与text是pair时, f e a t e x t \mathrm{fea}_{\mathrm{text}} featext的类别标签为1
  • 当送入image sequence embedding与text非pair时, f e a t e x t \mathrm{fea}_{\mathrm{text}} featext的类别标签为0

随后用cross-entropy计算损失。

训练完成后:得到 image-ground text encoder

在这里插入图片描述

2.2.2.3 Language modeling loss(LM)

LM时GPT系列的预训练任务。简单来说就是根据前面的词来预测下一个词。与NLP的LM有所不同的是VLP同时将image-embedding引入到上下文信息。

STEP1: 图片输入到image encoder中的得到 image embedding( f e a i m g \mathrm{fea}_{\mathrm{img}} feaimg)。 R B × 3 × H × W ⟶ E n c o d e r i m g R B × L i m g × d \mathbb{R}^{B\times 3 \times H \times W} \stackrel{\mathrm{Encoder}_{\mathrm{img}}} \longrightarrow \mathbb{R}^ {B\times L_{\mathrm{img}} \times d} RB×3×H×WEncoderimgRB×Limg×d

STEP2: 将 image embedding( f e a i m g \mathrm{fea}_{\mathrm{img}} feaimg)作为key,value送入到text-decoder的cross-attention中与text embedding进行特征交互。作者将此时的text-decoder称为image-ground text decoder

STEP3:最大化自回归序列的似然概率进行训练。训练完成后:得到 image-ground text decoder
∑ i = 1 L log ⁡ ( p ( y i ∣ y < i , f e a i m g ; Θ ) ) \sum_{i=1} ^ {L} \log (p(y_i|y_{<i}, \mathrm{fea}_{img}; \Theta)) i=1Llog(p(yiy<i,feaimg;Θ))
在这里插入图片描述

通过以上预训练任务:得到

  • image encoder
  • image-ground text encoder
  • image-ground text decoder
2.2.3 boostrapping caption(核心)

通过2.2.2节的预训练任务我们得到3个模型:1)image encoder;2)image-ground text encoder ;3) image-ground text decoder

下面来看如何结合上述上个模型来对web dataset进行“提纯”,主要步骤如下:

STEP1: 用人工标注的数据集 { ( I h , T h ) ∣ h = 1 , 2 , . . . } \{(I_h, T_h)|h=1,2, ...\} {(Ih,Th)h=1,2,...}对预训练模型image-ground text encoder与 image-ground text decoder 进行微调。 ( I h , T h ) (I_h, T_h) (Ih,Th)为图文对。

STEP2: 遍历web datasets { ( I w , T w ) ∣ w = 1 , 2... } \{(I_w, T_w)|w=1,2... \} {(Iw,Tw)w=1,2...}.进行下面操作

  • STEP2.1 通过 image-ground text decoder (论文称之为Captioner)预测 I w I_w Iw的caption T s T_s Ts。此时对于图片 I w I_w Iw有两个图文对 ( I w , T w ) (I_w, T_w) (Iw,Tw) ( I w , T s ) (I_w, T_s) (Iw,Ts)
  • STEP2.2 通过image-ground text encoder(论文称之为Filter)来判别图文对 ( I w , T w ) (I_w, T_w) (Iw,Tw) ( I w , T s ) (I_w, T_s) (Iw,Ts)是否matching。过滤不matching的图文对 ( I w , T w N o t   m a t c h i n g ) , ( I w , T s N o t   m a t c h i n g ) (I_w, T^{\mathrm{Not \, matching}}_w), (I_w, T^{\mathrm{Not \, matching}}_s) (Iw,TwNotmatching),(Iw,TsNotmatching)

STEP3: 汇总所有图文对 D = { ( I w , T w m a t c h ) + ( I w , T s m a t c h ) + ( I h , T h ) } D = \{(I_w, T_w^{\mathrm{match}})+(I_w, T_s^{\mathrm{match}}) + (I_h, T_h) \} D={(Iw,Twmatch)+(Iw,Tsmatch)+(Ih,Th)}

用提纯后的数据集用2.2.2的预训练任务重新训练。

在这里插入图片描述

2.3 result

从作者给出的实验来看,boostrapping caption不论在retrieval还是在caption任务上都能带来一定的提升。但当scale up dataset and scale up model后,boostrapping caption的提升就很有限了(在caption任务上尤为明显),如下表的最后一行。

在这里插入图片描述

BLIP只评估了在flickr30K上的zero-shot retrieval的能力,相比之前的SOTA在image-to-text retrieval的R@1上有2个点的提升,其它指标提升不大。其它对比结果见原论文。

在这里插入图片描述

3 BLIP-2

3.1 main-idea

BLIP-2主要从模态对齐、高效训练两个方向对图文多模态预训练任务(vision-and-language pre-training VLP)做出优化。在模态对齐上提出了一个轻量架构QFormer(querying transformer)来建立图像-文本的桥梁。在高效多模态训练上,结合QFormer提出一种二阶段预训练范式来将目前的视觉backbone与LLM模型链接起来。在VQAv2任务上,仅用了 1 54 \frac{1}{54} 541倍Flamingo80B的训练数据,却带来8.7%精度提升。

3.2 method

3.2.1 模型架构

**BLIP2的核心是引入了QFormer(Querying Transformer)模块来将对齐图片特征与文本特征。**QFormer内部包含两个transformer子模块,其一为image transofmrer,其二是text-transformer。image transformer比text-transformer多了一个cross-attention层,这两个transformer共享Self-Attention参数,如下图所示。

PS: 作者源码中用一个Bert模型来实现QFormer,通过魔改BertLayer实现通过条件判断来确定走image transformer分支还是text-transformer分支。感兴趣的同学可以深入看一下源码,核心逻辑位于:
lavis/models/blip2_models/Qformer.BertLayer

这里面有一个需要注意的点:作者没有将image encoder得到的image embedding作为image transformer的输入,而是定义了一个可训练的query作为输入。image embedding用作cross attention层的key, value。

这个地方理解可能比较难,尝试直觉的解释一下。NLP任务的transformer会对输入的token新增[CLS]token,通过训练将文本的信息融入到[CLS]token中。在分类、检索等下游任务中将[CLS]token对应位置的输出作为文本的表征。这里放一张图便于理解观察shape变化(忽略了batch size维度)。

在这里插入图片描述

类似的,QFormer定义了learning query通过训练将与文本对齐后的图片的信息融入到learning query中。与NLP不同的是:

  • QFormer的image-transforme没有将图片的embedding作为输入和[CLS]token组合起来送入模型,而是将image embedding作为cross-attention的key,value。
  • QFormer的image-transforme输入的[CLS] token有多个(姑且这么称呼,论文称为learned queries,其实是一回事),而NLP中只有一个[CLS]token。

PS: 这种做法现在CV里面很常用。如Dalle2中的DiffusionPrior模块,diffusion model中的text inversion技术都用到了类似的思想。

QFormer的整体pipeline如下图所示,为了便于理解同时给出了shape变化(忽略了batch size维度)。image encoder是eva_clip_g

在这里插入图片描述

3.2.2 多模态预训练任务

BLIP2的预训练任务分为两个阶段。第一个阶段用于对齐多模态表征。主要通过Image-Text Contrastive Loss (ITC)、 Image-text matching (ITM)、Image-grounded Text Generation3个任务的联合训练来实现。第二个阶段用于让LLM理解第一个阶段产生的soft visual prompt的语义,从而借助LLM强大的知识库实现视觉推理等更为复杂的任务,主要通过language modeling(LM)任务的训练来实现。

BLIP2的预训练任务同样用了BLIP提出的boostrapping caption(也称为CapFilt method)技术。

3.2.2.1 多模态表征对齐预训练 (第一阶段)

主要通过ITC、ITM, ITG三个预训练任务来对齐QFormer产生的文本表征与图片表征。三个预训练任务联合优化。

Image-Text Contrastive Loss (ITC)

与常规ITC任务不同的是:单个图片BLIP2产生的image embedding有32个(等于learned query的数量),而text embedding只有1个。BLIP2的操作是,同时计算32个image embedding与text embedding的距离,仅取最近的计算loss

下图详细梳理了整体pipeline及对应的shape变化(忽略了batchsize)

在这里插入图片描述

Image-text matching (ITM)

图片匹配的整体架构如下图所示。此时会将query embedding与text embedding拼接起来作为输入,送入到QFormer中的Image Transformer中。最后对Qformer在query embedding位置的输出向量取平均后进行预测。下图中详细展示了整体pipeline与shape变化(包含batch size维度)。

在这里插入图片描述

Image-grounded Text Generation (ITG)

此处直接用QFormer的text transformer做image caption任务。有一个细节值得注意:作者将图片与文本表征的交互放到了self-attention中。下图是摘取的部分self-attention层代码。
在这里插入图片描述

3.2.2.2 多模态表征理解预训练(第二阶段)

通过3.2.2.1我们得到一个训练好的QFormer,这个QFormer能够实现将图片转为一个32x768(用32个token来表征图像)。3.2.2.2的任务是让预训练的LLM模型能够理解上述的图片表征,从而借助LLM强大的知识库来实现问答、推理等任务。也就是说,这一阶段我们需要通过训练来赋予图片token能被LLM理解的语义。

这一步的训练比较简单。固定image encoder与预训练的LLM模型,仅训练QFormer和新增的一个投影层。训练任务为language modeling。最终实现QFormer输出的图片表征(论文称之为soft visual prompt)变成LLM能看懂的样子。

在这里插入图片描述

3.3 result

BLIP-2在image-caption, VQA,跨模态搜索的zero-shot能力都超过之前的方法。

在这里插入图片描述

作者发现当换更大的视觉backbone与language model时,VQA任务的指标还能有明显提升,说明BLIP-2的scale up的能力不错。

在这里插入图片描述

另外作者对二阶段训练的必要性进行了消融实验。实验发现不预先进行第一阶段表征对齐的预训练,直接进行二阶段的表征理解训练(让LLM理解visual prompt的语义),将会明显降低精度。更多的实验结果看原论文。

在这里插入图片描述

4 InstructBLIP

4.1 main-idea

这篇文章在BLIP-2的基础上,在26个数据集上系统研究vision-language的指令集微调(intruction tuning)。并设计了一种instruction-aware的特征提取方式,使得模型能够根据不同instruction来提取图片中特定的表征,以此提升多模态能力。

4.2 method

4.2.1 模型架构

InstructionBLIP是用指令集对训练好的BLIP-2进一步微调。微调的架构如下:

在这里插入图片描述

InstructionBLIP仅微调Q-Former和FullyConnected两个模块,和BLIP-2中第二阶段的微调参数一致。有所区别的是它的Q-Former的输入不仅有learned queries还有instruction的文本,其目的是为了让Q-Former产出的soft visual prompt更有倾向性(即能根据不同的指令提取不同的图像特征,也即是instruction-aware visual feature extraction)。只要理解了learned queries和instruction是如何融合的,InstructionBLIP这篇paper也就理解了。

从源码来看instruction-aware visual feature extraction的实现比较简单,直接将learned queries的embedding (image_learned_embed)和instruction的文本embedding(instruct_embed)在特征维度拼接起来,再送入到SelfAttention层中。其它都和BLIP-2中第二阶段微调一致。

embeddings = torch.cat((image_learned_embed, instruct_embed), dim=1)
4.2.2 构建多模态instuction数据集

作者主要在26个数据集上研究VLP的指令集微调,并将其分为了11个类别,如下图所示。作者再将这26个数据集划分成held-in数据集和held-out数据集(填充为黄色的为held-in,白色的为held-out)。仅用held-in的数据集进行训练,用held-out数据集进行zero-shot评估。设计instruction有3大类,训练的时候根据类别随机采样instruction。

由于每个datasets的数量不同,还需要对datasets进行平衡,否则模型可能会在数据量大的datasets过拟合,在数据量少的datasets欠拟合。平衡规则如下:

假定各dataset的数据量为: { S 1 , S 2 , … , S D } \{ S _ { 1 } , S _ { 2 } , \dots , S _ { D } \} {S1,S2,,SD},在训练阶段采样的数据来自dataset d的概率为 p d = S d ∑ i = 1 D S i . p _ { d } = \frac { \sqrt { S _ { d } } } { \sum _ { i = 1 } ^ { D } \sqrt { S _ { i } } } . pd=i=1DSi Sd .

在这里插入图片描述

在这里插入图片描述

4.3 result

从作者在held-out数据集测试的结果来看经过指令集微调后,Instruction的效果有明显提升。在测试的几类任务上encoder-decoder的LLM架构(T5)似乎比decode-only更有优势(Vicuna)。

在这里插入图片描述

总结

本文系统总结了BLIP系列文章的技术方案与技术细节。

  • BLIP的核心创新点在于boostrapping caption的方案的设计。该方案用于“提纯”带噪声web datasets,从而进一步提升多模态模型的效果。
  • BLIP-2的核心创新点有二,其一是设计了一个轻量架构QFormer(querying transformer)来建立图像-文本的桥梁,其二是设计了一种二阶段预训练范式实现高效训练,实现将目前的视觉backbone与LLM模型链接起来。
  • InstructBLIP的核心创新点在于系统的研究了vision-language的intruction tuning技术方法。并设计了一种instruction-aware的特征提取方式来增强多模态模型的能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值