【论文笔记】BLIP-2: Bootstrapping Language-Image Pretrainingwith Frozen Image Encoders and Large Language

1.介绍 

BLIP-2通过轻量级的查询转换器弥补了模态缺口,该转换器分两个阶段进行预训练。第一阶段从冻结图像编码器中引导视觉语言表示学习。第二阶段从冻结的语言模型中引导视觉到语言生成性学习。

1.1 动机

是想要在现成的语言和视觉的单模态模型中获得视觉语言模型

1.2 难点

LLM在其单模态预训练过程中没有看到图像,因此冻结它们使视觉语言对齐特别具有挑战性。

1.3 提出的解决办法 :QFormer

Q-Former是一个轻量级的Transformer,使用一组可学习的查询向量来从冻结图像编码器中提取视觉特征。

第一个预训练阶段,我们进行视觉语言表征学习,这强制Q-Former学习与文本最相关的视觉表征。

第二个预训练阶段,我们通过将Q-Former的输出连接到冻结的LLM来执行视觉到语言生成学习,并训练Q-Former,使其输出的视觉表示可以被LLM解释。

2.方法

2.1 模型架构

  1. Q-Former由两个转换器子模块组成,它们共享相同的自注意层:(1)与冻结图像编码器交互进行视觉特征提取的图像转换器,(2)既可以用作文本编码器又可以用作文本解码器的文本转换器。
  2. 创建了一组可学习的查询嵌入作为图像转换器的输入。查询通过自关注层相互交互,并通过交叉关注层(每隔一个transformer块插入)与冻结的图像特征交互
  3. 通过相同的自关注层与文本进行交互。

 2.2 冻结图像编码器学习视觉语言表示

  • 图像-文本对比学习(ITC) :通过对比正对与负对的图像文本相似性

首先计算每个查询输出与t之间的成对相似性,然后选择最高的一个作为图像-文本相似性。

为了避免查询和文本信息相互泄露泄露,我们使用了一个单峰自注意掩码

  • 基于图像的文本生成(ITG):不允许冻结图像编码器和文本令牌之间的直接交互,因此生成文本所需的信息必须首先由查询提取,然后通过自关注层传递给文本tokens

使用多模态因果自注意掩码来控制查询-文本交互

将[CLS]tokens替换为新的[DEC]tokens,作为通知解码任务的第一个文本tokens

  • 图像-文本匹配(ITM):预测图像-文本对是否匹配

使用双向自我关注掩码

将每个输出查询的嵌入输入到两类线性分类器中获得logit,并将所有查询的logit平均作为输出匹配分数。

2.3 冻结的LLM学习视觉到语言表示

使用全连接(FC)层将输出查询嵌入Z线性投影到与LLM的文本嵌入相同的维度中,然后将投影的查询嵌入预处理为输入文本嵌入。

三.代码

因为是ALBEF和BLIP原班人马的工作,同样是使用到之前工作的很多技巧。

BLIP-2分为三个阶段:①冻结视觉模型: 训练视觉模型到Q-former的映射关系(此时不引入LLM) ②冻结视觉模型和LLM模型训练 :视觉模型到Q-former到LLM的映射关系 ③解冻:微调

3.1 第一阶段:Blip2Qformer

第一个阶段不引入LLM,整体架构如下图所示

 

初始化了BertLMHeadModel(bert + cls【其实就是ffn】)模型作为Qformer并使用了一个query_tokens作为Learned Queries

 

  •  使用 Image-text Contrastive(ITC), Image-text Matching(ITM) 和Image Captioning。前两个也是老生常谈了,在 ALBEF和BLIP中都有类似的损失函数并类似地用上了hard-tough样本选取等技巧。最后一个任务使用了Image Captioning(但其实感觉本质还是lm任务)。
  • 其中Qformer中的bert被反复使用从而共享SA层其中参数

3.1.1 Image Captioning

 其实Qformer就是一个bert模型+一个ffn最后使用因果关系作为输出

3.2 第二阶段:Blip2OPT

第二个阶段引入LLM,冻结视觉和LLM,LLM部分同时输入query_output和text。

整体架构如下图所示:

此时Qformer中就剩个bert模型,在BertEmbeddings也中不做位置和单词的嵌入,只对输入的query_embeds做一次LN和dropout

线性映射到LLM模型

3.2 第三阶段:微调

使用的模型依旧是Blip2OPT,解冻了视觉部分但是仍然不解冻LLM部分

猜你喜欢

转载自blog.csdn.net/weixin_50862344/article/details/131158407