BLIP2

1 Why BLIP2?

如果VLMs能现有的最先进的单模态模型中获取知识,那样可以极大的提高VLMs的能力。因此作者提出了BLIP2,从off-the-shelf(现有的)的视觉或者语言模型中训练VLMs。视觉模型提供高质量视觉表征,语言模型,或者大语言模型,提供强的语言生成和zero-shot transfer。然后训练一个Querying Transformer(q-former)来连接两个模态它使用一系列learnable queries从视觉模型中提取有用的视觉特征,然后送到LLM中输出文本,在这个过程中,q-former起到一个bottleneck的作用,使用少量 learnable queries,从海量图像 patch feature 中,提取出压缩过的精华表示,这样减少了大量 feature 传给 LLM,推理和训练都快了很多(否则 LLM 输入长度爆炸),并且强制只用少量 token 表达视觉信息,相当于“逼着模型抓重点”,更容易 zero-shot transfer。

q-former使用双阶段训练:第一阶段是vision-language representation learning,逼着q-former学会提取和text最相关的视觉特征。第二阶段是vision-to-language generative learning,把q-former的输出送给frozen LLMs,让他的输出可以被LLMs看懂。

总而言之,BLIP2的动机是什么?作者期望能利用sota的vision model和llms来提升vlm的性能。但是vision model没见过text,llms没见过image,所以想让两个frozen model合作起来去提升vlm的性能,关键就是让两个模态进行对齐,于是作者设计了q-former。它可以学会如何根据text去提取最合适的visual features,可以学会如何把visual feature转译成llms能看懂的特征,省去了让llms对齐视觉特征的heavy burden。

2 Method

2.1 Q-Former Architecture

Q-Former用来链接来自不同模态的模型,它从image encode中提取固定数量的特征(和图片的分辨率无关)。如上图所示,q-former包含两个子模块,两个子模块的self-attention共享参数

  • 左边的是image transformer,使用cross attention喝image encoder交互,它的输入是learnable queries,先经过SA,在经过CA和frozen image features交互。queries也可以和text进行交互,这取决于不同的预训练任务及其相应的self attention mask。
  • 右边的是text transformer,既可以是text encoder也可以是text decoder。

Q-Former的参数使用BERT进行初始化,CA的参数随机初始化,总共包含188M的参数。Q-Former总共使用32个queries,每个有768 dimension,输出为\(Z\): 32✖️768,比ViT-L/14的257✖️1024要小很多。

2.2 Vision-Language Representation Learning from a frozen image encoder

Q-Former的训练目标是让其学会提取和text最相关的视觉特征。作者使用三个子任务训练Q-Former的视觉特征提取能力。

2.2.1 Image-Text Contrastive Learning

这个阶段负责对齐Image transformer的输出\(Z\)和text transformer的输出\(t\),\(t\)就是[CLS]token。query有32个,每个query都会和\(t\)进行计算相似度,选取最高的那个作为该张图片和文本的相似度。作者在这里使用的是in-batch negatives而不是momentum queue。为了避免信息泄漏,作者使用了unimodal self-attention mask。

在这个任务里,image transformer和text transformer的输出共同参与loss的计算

2.2.2 Image-grounded Text Generation

用来生成文本的信息需要通过queries提取出来,然后通过self-attention传递给text tokens。作者使用multimodal causal attention:

query tokens之间可以互相交,text tokens可以看到它之前的text tokens和所有的query token。这一块有点像prefix decoder。

为什么不能让query token看到text token?

  1. 防止query作弊:如果 Query 可以看到文本,那么 Query 就能提前获取完整的文本信息,这等于模型“作弊”,因为 Query 提前知道答案了。这样会导致训练和推理不匹配(训练时能看到 Text,推理时却不能),影响模型泛化能力。
  2. 确保query只提取视觉信息,而不依赖文本:Query 设计的目的是 提取图像特征,而不是学习文本模式Query的作用应该是学会提取对文本理解/生成最有用的视觉特征,而不是根据文本提取视觉特征如果 Query 看到 Text,它可能会依赖文本信息,而不是纯粹地学习图像表示,就是成了根据文本提取视觉特征了。这会降低 Query 的通用性,让模型更倾向于文本,而不是结合视觉信息进行推理。

除此之外,作者把[CLS]替换成[DEC]来标识decoding task。在这个任务中,text transformer的输出参与loss计算。

2.2.3 Image-Text Matching

这个任务旨在学习细粒度的图文特征匹配。是一个二分类任务,要看该图文对是否匹配。对于这个任务,使用双向注意力机制,queries和text tokens全都能互相看见:

这样,query embeddings \(Z\)里面就会包含了多模态的信息,然后把每个query送到linear head得到two class probability,然后对于每个query产生的概率做average,得到该图片和该文本匹配的概率。作者使用了hard negative mining,可以创造出更有挑战力的image-text pairs。

为啥这里query可以看见text tokens?

  1. image-text matching是理解类型的任务,在实际推理的时候,图片和文本就是一同输入到模型里去的,不存在query作弊偷看文本信息,导致训练和推理不匹配。
  2. 因为最后使用query的输出来判断图文是否匹配,所以query之中必须内嵌文本模态的信息,所以query需要看到text tokens。

2.3 Vision-to-Language Generative Learning from frozen LLM

首先使用FC layer把query embeddings \(Z\)投影到和LLM的embedding相同的维度,然后,将投影过后的嵌入加到input text embeddings的前面,作为soft visual prompts,其作用是“condition the LLM on visual representation extracted by the Q-Former”。因为Q-Former已经训练好,有能力提取出对语言模态最有用(原文中是”language-informative”)的信息,所以它可以给LLM输出最有用的信息,并且去除掉一些无关的信息。这样可以减少LLM从头训练学会如何对齐视觉和语言模态的大量计算负担,同时减少LLM在学习模态对齐时的灾难性遗忘问题。

作者使用两类LLM,分别是decoder-only和encoder-decoder的。

  • 对于decoder-only:使用language modeling loss预训练,LLM根据视觉表征产生文本。输入是soft visual prompts + input texts
  • 对于encoder-decoder:使用prefix language modeling loss训练,把input texts分为两部分,prefix和suffix,soft visual prompt和prefix构成encoder的输入,suffix为decoder的输入。

再举一个具体简单的例子讲一下两种类型的LLM是怎么训练的。 比如对于一个训练样本,图片中是一个男孩在踢球,文本是:

{
“instruction”: “What is happening?”,
“response”: “A boy is playing football.”
}

上面的文本是在数据集中就已经分好了的。对于decoder-only的模型,其输入是[soft visual prompt] + “what is happening” + [a boy is playing football],只在a boy is playing football上计算loss,mask是类似于prefix decoder的mask。对于encoder-decoder的模型,训练时,encoder输入是[soft visual prompt] + “what is happening”,decoder输入是a boy is playing football,其自回归输出a boy is playing football。

2.4 Model Pretraining

数据集:使用和BLIP一样的训练数据集,总共129M,使用CapFilt策略,对于每张图片,用BLIP的captioner产生10个captions,这10个合成的caption和原本的文本一起,使用clip的图文相似度进行排序,从中挑选出两个captions作为该张图片的caption,在实际训练的时候,从这两个captions里面随机选取一个参与模型训练。

使用的image encoder和LLM:image encoder使用来自CLIP的ViT-L/14和来自EVA-CLIP的ViT-g/14。LLM使用OPT和FlanT5

3 Experiment

3.1 Image Captioning

首先在COCO上fintune model,使用“a photo of”作为prompt template,使用language modeling loss训练模型,保持LLM冻结,只更新q-former的参数和image encoder的参数。

3.2 VQA

在VQA数据集上finetune Q-Former和image encoder。LLM接收来自Q-former的output和question两者作为input,生成答案。作者在原文中说到:“In order to extract image features that are more relevant to the question, we additionally condition Q-Former on the question. Specifically, the question tokens are given as input to the Q-Former and interact with the queries via the self-attention layers, which can guide the Q-Former’s crossattention layers to focus on more informative image regions.” 这里作者并没有明说self-attention的mask是什么,通过作者这段话的内容可以推测,应该是使用的是bidirectional self attention,因为作者说让question去condition q-former,并且希望提取和问题更加相关的视觉特征,所以需要通过双向注意力在query embeddings中嵌入question的内容。

可能会有人问,这里为什么使用bidirectional self attention,但是在ITG里使用causal mask?其中一个原因上面已经阐述,就是让query里encode一些问题信息,让其在图片中抓取和问题相关的视觉信息。第二个是,训练和推理时可以保持一致,因为问题在训练时是暴露给模型的,推理时,问题也全部暴露给模型。但是ITG是预训练,是要学习通用的能力,是要让query学会通用的视觉表达,学会提取对所有语言任务最有益的表达,而不是单独为了某个下游任务服务,比如,image captioning任务看不见text,但是VQA能看见text,为了通用起见,统一让query看不见text。

3.3 Image-Text Retrieval

这个任务不涉及文本生成,作者直接finetune一阶段的预训练模型,不包含LLM。具体来说,在COCO上,finetune image encoder和Q-Former,使用ITC、ITM、ITG三个loss进行finetune。作者也证明了,即便这个任务不设计文本生成,使用ITG loss进行训练也对检索任务有益。

 

 

 

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇