BLIP论文学习笔记

Paper: BLIP: Bootstrapping Language-Image Pre-training for
Unified Vision-Language Understanding and Generation

论文中文名称:引导语言图像预训练以实现统一视觉语言理解和生成

摘要

重点: 模型为视觉语言预训练模型
以往的模型: 提升精度主要靠数据集
本研究: 新的视觉语言预训练框架,可以利用图像理解来进行文本生成
模型特点: BLIP 通过对描述进行引导,有效地利用了嘈杂的网络数据。描述生成器生成合成描述,过滤器再进行过滤。
论文截图

应用: 图像文本检索,图像描述,图像问答,在视频语言领域也有很好的泛化能力

引言

VLP(视觉语言预训练模型)两个重大限制
1.结构:encoder结构模型不适用于文本生成,encoder-decoder还没有成功采用到图像到文本的检索任务中
2.现有的网络图像文本数据对虽然有效,但是质量较差的网络文本并不是训练VL时的最佳选择
本模型
是最好的用于下游任务的VLP框架
贡献/创新点:
新的模型结构:MBD
Multimodal mixture of Encoder-Decoder (MED):多模态混合的ED结构模型
那么这个结构好在哪里呢?

  • 能够进行多任务的预训练和迁移学习:这个结构的适应性很强,可以作为单模态的编码器、基于图像的文本编码器或者解码器。预训练时把三个VL目标联合:对比学习、图文匹配和语言建模
  • 描述和过滤(CapFilt)从有噪声的图像文本对数据集中提升质量:把训练好的MBD进行两个部分的微调——a.描述器 对给定的图像进行描述 b.过滤器:从原始的网页给的文本描述和合成描述中移除噪声描述
    发现和结果
    1.CapFilt工具(实际上是两个模块):这种引导式的方法效果很好,越多样化的描述效果越好
    2.在很多图像语言任务上效果很好,图像文本匹配,问答,推理和对话。在视频领域的匹配和问答上也有较好的效果
    结构图
    解释:
    image的encoder是通过多个基础的由自注意力、前馈和残差连接组成的层,得到最后的向量
    text的encoder有三种分别用于不同的任务,通过分类头+句子的方式进行不同的网络传递
    text encoder 跳过交叉注意力,利用多个多头自注意力机制和前馈网络生成向量,进行ITC任务(图像文本对照)
    image-grounded Text encoder 引入交叉注意力机制在多头自注意力机制后,来连接两个模态,进行ITM(图像文本匹配任务)
    image-grounded text decoder通过因果自注意力机制来和图像encoder连接,最终生成文本
    所以用于生成任务的还是decoder only.
    结构

相关工作

VLP
预训练能够提供一个下游任务表现好的基础。

  • 数据方面,大家都在网络图像文本对,我也在用。不过他们用的时候有噪声,虽然他们也去除了一些,不过还是有影响。Blip就不一样了,Blip加了CapFilt,也就是利用描述和过滤器进行优化,效果好多了
  • 结构方面,大家也都想把图文都搁在同一个网络框架里,但是怎么设计才能把理解和生成任务都做好是个问题,基于encoder和e-decoder的模型想干好这件事都不太行。Blip可以,用多模态ed混合的模型不仅灵活效果好,而且还能在预训练时简单高效
    知识蒸馏
    大家都用训练好的模型又蒸馏了模型,Blip在蒸馏时也加入了Capfilt。描述模块会从语义丰富的描述里蒸馏知识,过滤器再减少噪声。
    数据增强
    图像增加就用的以前哪些方式,文本增强用LLM。论文提到了自己利用合成描述时有优势,我的理解是可能和图片有对照,生成的时候就有主题不会乱生成,并且用起来效果会比NLP的效果好。

方法

模型结构

1.visual transformer作为图像encoder
把图像划分成不同的块,然后再把他们编码成一系列的embedding,并且加上分类头代表是图像。
和利用预训练模型来提取物体,这种方式更适合计算,并且最近一些方法也都采用了这种。
2.多任务模型
text encoder用的是bert架构
Image-grounded text encoder 添加交叉注意力层
decoder使用causal se-att代替biatt,然后用了一些pad token

预训练目标

三种任务的方法介绍
(激活的网络层在上面的网络结构里)
** ITC(Image-Text Contrastive Loss)**
这里介绍了一个ITC损失的计算方法。并且对潜在positive对进行软标签标注提高精度。(这里损失方法得去看引用论文是怎么计算的)
** Image-Text Matching Loss (ITM)**
用的简单分类任务来训练(是否匹配)。那些相似度高,但是不匹配的图文对更大可能被用来计算损失值。
** Language Modeling Loss (LM)**
利用自回归的方式来进行训练,使正确文本生成的可能性更大,而没有用MLM。并使用了label smoothing。
在以上三种任务中,除了self-attention层的参数共享来提高效率。因为其他层作用差不多,所以参数用同一套就可以了

CapFilt

来源
现在的数据集人工的贵,自动采集的差,所以除了COCO,人工的也得提高质量。
微调
利用MBD预训练模型在COCO数据集上进行微调得到captioner和filter。
capfit
简述:1.最初的数据集为人工和网络数据集,通过预训练获得了MBD模型_v0。
2.利用人工数据集进行ITC和ITM任务、LM任务的单独微调得到filter和caption。filter用来进行图文对对比删除,caption进行图的描述生成并通过filter,生成的集合组合成新的数据集
3.将生成和过滤过的新的数据集进行重新预训练,得到下游任务的应用的预训练模型。

实验

细节

pytorch+32个GPU
利用了vit和bert的预训练网络结构。
batchsize=2880
epochs=20
optimizer=AdamW
weight decay=0.05
lr=3e-4
decay_rate=0.85
pretrain random image crops resolution=224224
finetune ~ solution=384
384
dataset size=14M(H:COCO & visual genome W:Conceptual Captions, Conceptual 12M, SBU captions )
extra dataset = “LAION”

Capfilt的效果

1>0
1+1>2
more data,more useful
并且VIT-L结构的也可以有提升的效果

结果展示
精度和例子
beam search和nucleus sampling的影响
共享策略的对比

合成描述

利用核采样的生成策略来生成图片描述,同时对比beam search的策略对图片的描述效果。
**核采样是什么?**通过备选词的概率和,设定阈值抽取数据集,来抽取token并生成新的描述,这种方法噪声高,不过多样性较好,更适合这个研究所需要的多样性的标题。beam search一般用来选择概率更高的词,不过会比较单一。
这两个应该是LM generation里的概念。

参数共享

1.共享SA层之外的层,能够有效果的提升,并且可以缩小整个尺寸的大小。
2.如果共享了SA层,效率会下降,因为两者任务会有冲突
3.但是captioner层和filter层两个层如果共享参数效果就不会太好,因为captioner生成的参数需要filter来过滤,如果共享,filter效果会下降。

任务对比

1.图像文本检索,和ALBEF相比,召回率提高2.7%,并且在其他没训练的数据集上也进行了评估,效果也不错
2.在图像描述生成时,事先生成前缀,一张…的图片,只需要填中间的内容。效果很好,和lemon模型差不多,但是lemon模型更大,推理速度更慢,并且对图像分辨率的需求较高,这些方面blip要更好
3.图像问答任务,利用图像编码器和文本编码器来进行encoder,最后进行训练一个decoder进行问答任务训练,效果好,体积小
4.NLVR 两图像关系描述,调整注意力层来适应两个图片和一个文本输入,并输出一个文本。具体就是设置了两个CA+FFN。效果最好
5.visual dialog
采用的是辨别式的VD模型。Visdial和VQA的区别在于history要作为单独的输入添加到对话中而不是仅仅和question进行连接。效果也是最好的。结构就是设计了不同的encoder,最后判别True or False
6.视频问答对视频进行抽帧输入并进行问答效果也挺好的,哪怕是这种方式并不能使用到时间信息

额外研究

1.证明capfilt的有效性不是由于多余训练导致的,在更换数据之后,效果并没有增加(证明质疑点)
2.在用Capfilt更新数据集之后,模型应该重新被训练,而在之前的模型上训练是没有帮助的,这和知识蒸馏是一样的,学生模型不能根据老师模型初始化(这点暂时不懂)

总结

最主要的是提出了一个框架,这个框架可变性较强,适用于各种下游人物
并且这个引导式的方法能够对数据集有一个好的清洗和增强效果。
最后提高效果可以通过多个Capfilt组合、生成更多caption以及多轮bootstrapping(到现在也不知道为啥要用这个单词,我估计是想和Clip挨的近一点,从BD开头的英文字母里挑出来的单词)能够进一步提升效果

  • 16
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值