多模态 CLIP/BLIP/BLIP-2论文理论知识总结

因为前面学习了扩散模型,熟悉SD功能的都知道UI里面有个反推的内容即CLIP/BLIP工具,现在就来学习一下这里面的内容,说实在的不知道是这个老师讲的好的原因还是其他的,感觉这两篇论文学下来的收获比前面学那么多扩散模型的收获多,前面看数学推导头好秃(╥﹏╥)

一、CLIP模型

Contrastive Language-Image Pretraining,用于联合图像和文本模态的多模态学习任务,论文《Learning Transferable Visual Models From Natural Language Supervision》,论文的页数很多,但重要的内容主要就在前面15页左右,再往后都是很多实验的分析啥的。

 CLIP 论文逐段精读【论文精读】_哔哩哔哩_bilibili

1. CLIP训练 

CLIP是BLIP的前身,或者说是一个很高水平的基础, 视频听下来最深的印象就是论文团队对于这个大模型的训练用了从网上爬下来的4亿个图像文本对,真是钞能力啊~CLIP通过4亿的数据来学习图像和文本之间的对应关系,实现了扩模态的语义理解,适用于很多扩模态的任务,就比如文生图、利用图像反推其文本tag等,更详细的知识点看视频,我这里就自己总结一下,给自己留个可以快速review的地方。

1)首先是预训练,从网上爬下来N个配对的图像文本对,这里是从网上爬下来的,不是手工标注的,所以不是那么的复杂和费时,当然爬4亿对还是很花时间的,毕竟这些数据还要尽可能的包含大部分不同多样的内容,这样模型才能更好地训练得出图像与文本之间的关系,扯远了。图像和文本是配对的,然后分别送入文本编码器(比如text transformer模型)和图像编码器(ResNet或ViT),分别得到N个文本特征和图像特征,然后进行配对,N*N矩阵的对角线的配对是正确的,所有是正样本有N个,而其他的就是不配对的是负样本,通过正负样本来进行一个对比学习;

2)然后就是测试,图中测试阶段是步骤(2)(3),具体就是说希望模型根据图像能得出的是一句话,而不是一些单词,这里就对N个类别的单词填充扩展成一个句子,句型模板是“一张什么什么的图”,再将句子送入到之前的文本编码器中,得到N个文本特征,此时输入一张图片到之前的图像编码器中,得到图像特征,将此时的图像特征一次和文本特征计算余弦相似度,通过判断相似度最高的就是该图匹配的文本。

这个方法重要的点就在于两个方面,首先是利用的对比学习,使用对比损失函数来训练;其次是用到zero-shot零样本中,也就是说大模型训练好了,随便输入一张从网上弄下来的图片到模型中都可以给你得到相应匹配的文本信息,即使这张图的类别模型没有训练过。所以CLIP最大的优点在于不需要大量标注的数据就可以进行训练,对于多模态任务比如图像分类、图像生成、物体检测、视频搜索都有很好的效果。

这是训练image/text编码器的伪代码,具体就是模型从训练集中随机取出一张图像和标签文本,分别计算出输入图像和文本的特征,提取embedding向量,然后将两个特征向量进行归一化处理后用余弦相似度计算出它们之间的相似性,以判断随机抽取的标签文本和图片是否匹配,这是batch=1的情况。当然这里是batch=N,有N个标签和N个样本,有N^2个图像文本匹配的余弦相似度,训练流程类似,最后loss的计算,即最后CLIP训练目标是最大化N个正样本的余弦相似性(接近1),同时最小化N^2-N个负样本的余弦相似性(接近0)。

2. 对于下游任务的微调方法

虽然CLIP的zero-shot效果很好,但是对于一些特殊的数据集可能更好地作微调变few-shot,以上是对于zero、few-shot还有其他方法之间的对比,可以看出随着训练样本的增加,后面few-shot的效果是可以超过zero-shot的。

对于微调,用CLIP在做下游任务时可以微调,论文中也提到了两种方法:

1)Linear probe,把预训练好的CLIP大模型的内容冻住,只在上面添加训练一个分类头Fc;

2)Fine tune,把整个网络模型放开,直接去做端对端的学习,根据需求来手动调整模型参数。后者fine更适合用来大数据集,而且手动调参方法也很多,这里完全放开的话可能不能更好体现出到底是CLIP模型本身带来的效果好还是调整参数和数据集的因素,所以更推荐的是前者liner probe,不用调参,只根据下游任务修改最后一层。

二、BLIP模型

论文《BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation》

 多模态论文串讲·下【论文精读·49】_哔哩哔哩_bilibili

1. BLIP架构 

BLIP模型是在前人的基础上设计了一个可以说综合体的模型,根据需求任务来选择哪些要用哪些不用,具体如上图。

1)图像这边就是一个完整的ViT结构,输入到图像编码器里面得到图像特征;

2)文本模型这边是有3个模型,前两个①②是Encoder模型,后者③是Decoder。

①是Text Ecoder文本编码器,使用的是BERT模型,基于Transformer 的双向编码器,它使用了多层 Transformer 结构,根据输入的文本信息得到文本特征,然后将图像特征和文本特征做ITC loss,获得图像与文本之间的共享语义表示,这里两者结合有点CLIP的影子(CLIP ViT-L/14 的 Text Encoder 是一个 Transformer 结构);

②是Image-grounded Text Encoder多模态编码器,多了一个cross attention借助图像的特征信息来得到文本特征,最后做ITM loss,使得不同模态之间的信息更好地融合,更适合图像-本文理解等任务,这里三者结合就是一个可以共享参数的ALBEF;

③是Decoder,输入的文本只输入前面部分prefix text,通过它和图像特征来预测后面的文本内容,这里的LM不就是之前扩散提到的LM语言模型嘛,果然是对文本进行预测,输出更连贯的文本序列,只是这里有利用多模态图像的信息。

这就是整个BLIP模型结构又叫MED,综合体模型的好处还在于模型之间的大部分参数是可以共享的,比如上图的同颜色的格子的参数就是共享一致的,这样可以减少很多计算量。

2. BLIP的创新重点 

BLIP更为重要的创新点在于它的预训练部分的Filter和Captioner两个模块。CLIP虽然爬了4亿的数据进行模型训练,但网上的数据有真有假有合适和不合适,这些数据都是没有经过清洗和修正就直接拿来用的,所以导致模型训练也会准确性不高,学到的内容不准确,所以BLIP就在此基础上提出这两个模块,前者用来清晰删除不好的不匹配的文本信息,后者用来增加新的好的文本信息,以此来拥有一个更高质量更匹配的训练数据集 图像文本对。

具体而言就是本身得到的数据集D是由网上爬的可能不匹配的数据+一部分手工标注的匹配的数据(比如COCO数据集),送入BLIP模型预训练,利用手工标注的匹配的数据集+BLIP模型中的前两个ITC&ITM模块来微调此时的blip,也就是Filter,使得Filter可以清理出、删掉不匹配的图像文本对;然后又利用手工标注的匹配的数据集+BLIP的Decoder模块来微调,也就是Captioner,使得Captioner可以根据图像生成更匹配的文本,将生成的新的文本也送入上面的Filter中,让Filter来判断到底是原来网上爬的文本和图像匹配还是Captioner生成的新的文本和图像匹配,选择匹配的删掉不匹配的(说明一点,Captioner模块生成的新的文本不一定是比原来网上爬的文本更匹配,只是多了一种文本选择的机会,有时候可能网上爬的更准有时候可能Captioner更准),这样就可以得到一个新的高质量的数据集D。

上图左边写了3个阶段,明确这3个阶段是独立不相干的,具体内容看图,懒得写了。

消融实验结果如图,可以得到图中左边的几点结论,整体上来说就是用了Filter和Captioner模块来处理数据集和训练肯定比之前就用一个Noisy数据好很多,有很多点的提高。

三、BLIP-2模型

论文《BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models》,本来想用BLIP的,但是没想到23年已经新出了BLIP-2了,那还是先学习最新的,然后再看看哪个更合适,这个就没找视频慢慢学了,找了几篇博客看看。

BLIP2-图像文本预训练论文解读-CSDN博客

一文读懂BLIP和BLIP-2多模态预训练 - 知乎 (zhihu.com) !

1. BLIP-2架构 

在BLIP-2中,作者提出了一种预训练框架,利用 预训练frozen冻结的图像编码器 + 可学习的Q-Former预训练frozen冻结的LLM大规模语言模型 来进行图像和语言的联合预训练。 

1)Image Encoder:负责从输入图片中提取视觉特征,本文试验了两种网络结构,CLIP 训练的 ViT-L/14和EVA-CLIP训练的 ViT-g/14。

2)Large Language Model:负责文本生成,本文试验了decoder-based LLM and encoder-decoder-based LLM。

3)Q-Former:负责弥合视觉和语言两种模态的差距,由Image Transformer(Q左半部分)和Text Transformer(右半部分)两个子模块构成,它们共享相同自注意力层self attention。

Image Transformer通过与frozen图像编码器进行交互提取视觉特征。它的输入是可学习的 query(即与图像匹配的自然语言文本),这些query通过self attention相互作用,再通过cross attention交叉注意力层与冻结的图像特征相互作用,同时还通过共享的self attention与右边的文本进行交互。

Text Transformer作为文本编码器和解码器,它的self attention与左边的Image Transformer共享,根据预训练任务,应用不同的self attention mask自注意力掩码来控制query和文本的交互方式。

2. BLIP-2的创新

为了减少计算成本并避免灾难性遗忘的问题,BLIP-2 在预训练时冻结预训练图像模型和语言模型,但是,简单地冻结预训练模型参数会导致视觉特征和文本特征难以对齐,为此BLIP-2提出两阶段预训练 Q-Former 来弥补模态差距:表示学习阶段和生成学习阶段。

1)学习阶段: 将 Q-Former 连接到冻结的 Image Encoder,训练集为图像-文本对,通过联合优化三个预训练目标(基于我的研究方向的是ITG,如上右图),在Query和Text之间分别采用不同的注意力掩码策略(如上左图),从而控制Image Transformer和Text Transformer的交互方式。

2)生成学习阶段: 将 Q-Former连接到冻结的 LLM,以利用 LLM 的语言生成能力。这里使用全连接层将输出的Query嵌入线性投影到与 LLM 的文本嵌入相同的维度,然后将投影的Query嵌入添加到输入文本嵌入前面。由于 Q-Former 已经过预训练,可以提取包含语言信息的视觉表示,因此它可以有效地充当信息瓶颈,将最有用的信息提供给 LLM,同时删除不相关的视觉信息,减轻了 LLM 学习视觉语言对齐的负担。

如图,论文试验了两种LLM:基于解码器的 LLM 和基于编码器-解码器的 LLM。前者使用语言建模损失进行预训练,其中冻结的 LLM 的任务是根据 Q-Former 的视觉表示生成文本,也就是说直接根据图像生成文本;后者使用前缀语言建模损失进行预训练,将文本分成两部分,前缀文本perfix test与视觉表示连接起来作为 LLM 编码器的输入,后缀文本用作 LLM 解码器的生成目标,也就是说根据前缀文本+图像生成后缀连续的文本。

  • 25
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值