【论文笔记】BLIP: Bootstrapping Language-Image Pre-training forUnified Vision-Language Understanding and

1.背景

1.1 之前存在的两个问题

(1) 模型视角:大多数方法要么采用基于编码器的模型,要么采用编码器-解码器模型。基于编码器的模型不太容易直接转移到文本生成任务(例如,图像字幕),而编码器-解码器模型尚未成功用于图像文本检索任务。

(2)数据集j角度:存在噪声,训练次优

基于编码器的模型:CLIP,缺少decoder对文本生成的能力相对较弱

采用编码器-解码器:SimVLM

1.2 提出的解决办法

(a) 编码器-解码器的多模态混合(MED)

可以用于单一模态,也可以作为基于图像的文本任务的编码器或者是解码器

该模型与三个视觉语言目标联合预训练:图像文本对比学习、图像文本匹配和图像条件语言建模。

(2)字幕和过滤(CapFilt):一种新的数据集增强方法

将预先训练的MED微调为两个模块:一个是生成给定网络图像的合成字幕的字幕器,另一个是从原始网络文本和合成文本中去除噪声字幕的过滤器。

二.方法

1.1 BLIP 模型架构

能看到ALBEF和VLMO的影子。

  • 每个图像-文本对只需要正向通过一次视觉转换器,并且分别三次正向通过文本转换器,并通不同的损失函数来激活 单模态编码器,基于图像的文本编码器,基于图像的文本解码器的功能。
  • 通过在自注意力 (SA) 层和文本编码器的每个变换器块的前馈网络 (FFN) 之间插入一个额外的交叉注意力 (CA) 层来注入视觉信息。

1.2 损失函数

  1. 图像-文本对比度损失(ITC):激活单模态编码器
  2. 图像-文本匹配损失(ITM):激活基于图像的文本编码器 。
    ITM是一种二元分类任务,其中模型使用ITM头(线性层)来预测图像-文本对匹配的还是不匹配的
  3. 语言建模损失(LM):激活基于图像的文本解码器

文本编码器和文本解码器共享除SA(self-attention)层之外的所有参数,只由SA层来捕捉编码和解码任务之间的差异同时也提高了交叉注意力和FFN层的效率。区别于ALBEF,BLIP的计算ITC和计算ITM的SA层共享参数。

编码器采用双向自注意来构建当前输入tokens的表示,而解码器采用因果自注意来预测下一个tokens。

1.3 CapFilt

引入了两个模块:一个用于生成给定网络图像的字幕的字幕器,以及一个用于去除噪声图像-文本对的过滤器。

三.模型实现

【代码】GitHub

 核心问题就是想明白三个损失函数怎么实现,怎么对应(如果你vit和bert已经相对熟悉)

如果你对21年的ALBEF这篇论文和代码有所了解,就会发现其实代码上基本上一脉相承。它同样也是用到了动量蒸馏的技巧和ITC,ITM等训练目标,但是将原先的掩码语言建模(MLM)任务更换成了语言建模(LM)任务

 ALBEF代码不熟悉的可以先看看【读论文看代码】多模态系列-ALBEF

3.1 模型构建

(1)tokenize增加了两个special tokens 和 一个编码器的tokenid

(2)视觉编码器额外提供了16层VIT的选择

(3)文本编码器从 ALBEF 的 BertForMaskedLM  替换成了一个用bert-base-uncased初始化的Bert模型

 BaseModelOutputWithPoolingAndCrossAttentions

(4)多模态解码器(文本解码器)同样也是替换成了bert-base-uncased初始化的Bert模型,

 

 CausalLMOutputWithCrossAttentions

3.2 语言建模(LM)任务

为了文本生成任务,将MLM任务更换成LM


 

猜你喜欢

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