一、概述
1、是什么
BLIP 全称《BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation
》,
是一个多模态视觉-文本大语言模型,隶属BLIP系列第一篇,可以完成:图像描述、视觉问答、图像检索。由于没有接入LLM,所以虽然可以做生成任务,但是没有很强的对话能力以及世界知识。
2、亮点
主要是模型和数据两方面:
*模型方面:把模型设计成了一个unified 框架,可以同时满足:图文检索和图像描述任务。主要有三部分构成:视觉编码器、文本编码器和多模态编码器。
*数据方面:提出了一个Captioner和Filter 模块,Captioner对一张图生成描述(也就是图文对的文)、filter过滤噪声图文对。用这种数据清洗方法就能利用大量的互联网数据,并降低里面的噪音。
PS
*这篇文章的模型方面基本上和albuf类似,数据方面的创新很不错,一定要注意这里没有LLM,只有一阶段训练。
*这篇文章的模型流程因为涉及到数据清洗和下游任务,整体流程是:脏数据训练BLIP->使用BLIP脏数据版应用到CapfFlit 数据清洗流程得到干净数据->使用干净数据再pre-train BLIP—> 应用到下游任务。
*作者没有做消融实验,验证为什么比CLIP好,只是最终的图文检索结果却是比CLIP好不少,但是涉及到:多出来的bert参数、3个loss、数据。这里其实没有消融。
二、模型
1、模型结构
本质其实是:图像编码器VIT、文本编码器bert架构、然后在bert里增加cross attention、causal self attention模块,如下图里的cross attention、bi self attention、feed forward参数共享。其中
*图像编码器为ImageNet 预训练的vit b/16(无特殊说明均为这个模型)、VIT L/16。
*文本编码器为bert base 初始化的模型。
逻辑上来讲主要有四部分构成:视觉编码器、文本编码器、多模态编码器和多模态解码器。具体来讲:
*视觉编码器:下图最左边的是视觉编码器,就是 ViT 的架构。将输入图像分割成一个个的 Patch 并将它们编码为一系列 Image Embedding,并使用额外的 [CLS] token 来表示全局的图像特征。
* 文本编码器:下图第二列,就是 BERT 的架构,其中 [CLS] token 附加到文本输入的开头以总结句子,作用是提取文本特征做对比学习。
*视觉文本编码器:下图第三列,使用 Cross-Attention,作用是根据 ViT 给的图片特征(K、V)和文本输入(K)做二分类,所以使用的是编码器,且注意力部分是双向的 Self-Attention。添加一个额外的 [Encode] token,作为图像文本的联合表征。
*视觉文本解码器:下图第4列的是视觉文本解码器,使用 Cross-Attention,作用是根据 ViT 给的图片特征和文本输入做文本生成的任务,所以使用的是解码器,且注意力部分是 Casual-Attention,目标是预测下一个 token。添加一个额外的 [Decode] token 和结束 token,作为生成结果的起点和终点。
一个需要注意的点是:每个 image-text 在输入时,image 部分只需要过一个 ViT 模型,text 部分需要过3次文本模型。
loss部分放在这部分讲解。因为后面数据清洗等都用到,所以调节一下。BLIP 在预训练期间联合优化了3个目标,有两个理解任务的目标函数(ITC、ITM、)和一个生成任务的目标函数(ITG)。
*ITC:
对比学习目标函数 (Image-Text Contrastive Loss, ITC)。
作用于视觉编码器和文本编码器,目标是对齐视觉和文本的特征空间。方法是使得正样本图文对的相似性更大,负样本图文对的相似性更低,在这里依然使用了 ALBEF 中的动量编码器。具体而言就是使用一个模型权重副本,这个权重的更新每次只更新很少,它的目的是产生一些伪标签,辅助模型的训练。
*ITM:图文匹配目标函数 (Image-Text Matching Loss, ITM)。
作用于1视觉编码器和视觉文本编码器,目标是学习图像文本的联合表征,以捕获视觉和语言之间的细粒度对齐。ITM 是一个二分类任务,使用一个分类头来预测图像文本对是正样本还是负样本。在这里依然使用了 ALBEF 中的 hard negative mining 技术,就是根据一个batch内(这里是仿照moco维护了一个队列)来计算图文ITC得分,然后取ITC得分最大的(最相似,但是不是一对,可以认为是困难样本)一对样本来计算。
*ITG:图像生成 Image-Text generation也就是
语言模型目标函数 (Language Modeling Loss, LM)。
作用于视觉编码器和视觉文本解码器,目标是根据给定的图像以自回归方式来生成关于文本的描述。与广泛使用的 MLM 损失 (完形填空) 相比,LM 使模型能够将视觉信息转换为连贯的字幕。

2、模型亮点
统一了两个任务:文本生成和特征检索。
PS
如果有机会还是想看到特征检索的消融实验,证明到底是数据、模型、loss是的图文检索能力大幅领先CLIP系列。
三、数据
1、数据标签
标准的图文对。会拆成三种大的结构满足三个loss:ITC、ITM、ITG。
2、数据构成
Pretrain
总共有 14M 张图像,包括两个人工注释数据集(COCO 和 Visual Genome)和三个网络数据集(Conceptual Captions , Conceptual 12M , SBU captions),还尝试了一个额外的web数据集LAION (该数据集包含115M图像,具有更多的噪声文本,只从原始 LAION400M 下载大于 256 像素的图像。由于 LAION 的规模很大,在预训练期间我们每个 epoch 只使用的1/5。)。
3、数据清洗
高质量的人工注释图像-文本对 (例如, COCO) 因为成本高昂所以数量不多。最近的工作 ALBEF, SimVLM 利用从网络自动收集的大量替代的图文对 。但是, 这些网络的替代数据集通常不会准确地描述图像的视觉内容, 质量相对嘈杂, 带噪声的监督信号肯定不是最优的。
本文提出了一种高效率利用噪声网络数据的方法:Captioning and Filtering,CapFilt。是本文的一个亮点,首先要知道他其实就是BLIP模型,并且是经过脏数据pre-train 的,只不过将他的三个loss分割成了两个模
块:
*字幕器 Captioner: 对应是多模态解码器。训练时在 COCO 数据集上使用 LM 目标函数(ITG)微调。推理时
给定网络图片 , Captioner 生成合成描述。
*过滤器 Filter: 对应多模态编码器的。训练时在 COCO 数据集上使用 ITC 和 ITM 目标函数微调。推理时
如果 ITM 头将其预测为与图像不匹配,则认为文本有噪声
Filter 删除(原始Web 文本和合成文本中的嘈杂文本)。
最后,将过滤后的图像-文本对与人工注释对相结合,形成一个新的数据集,作者用它来预训练一个新的模型。

四、策略
1、训练过程
策略:使用3个loss单阶段预训练(不含数据清洗、下游任务finetune)。
*视觉编码器以 ImageNet-1K 上预训练的 ViT 权重初始化,文本编码器以 BERT-Base 的权重初始化。冻结VIT。
* 使用权重衰减为 0.05 的 AdamW 优化器。学习率预热至 3e-4 (ViT-B) / 2e-4 (ViT-L),并以 0.85 的速率线性衰减,Batch Size 2880 训练 20 Epochs。
*在预训练期间,采用分辨率为 224 × 224 的随机图像裁切,在微调期间将图像分辨率提高到 384 × 384。
2、推理过程
看需要可以完成图文匹配和图像描述问答等。
五、结果
1、多维度对比。
这个时间点2024大家看看就好了,因为已经出了BLIP2和Instruct BLIP了。
检索任务
两个数据集 COCO 和 Flickr30K。与现有方法相比,BLIP 实现了显着的性能提升。使用相同的 14M 预训练图像,BLIP 在 COCO 上的平均召回率 R@1 上比之前的最佳模型 ALBEF 高出 +2.7%。作者还通过将在 COCO 上微调的模型直接迁移到 Flickr30K 来做 Zero-Shot Retrieval BLIP 的性能也大大优于现有的方法。

图片描述
两个数据集 NoCaps 和 COCO,两者都使用在 COCO 上微调的模型和 LM 损失进行评估。在每个字幕的开头添加了一个提示 "a picture of",发现这样使得结果更好了。使用了 14M 预训练图像的 BLIP 大大优于使用相似数量预训练数据的方法。使用了 129M 图像的 BLIP 实现了与使用了 200M 的 LEMON 相比具有竞争力的性能。值得注意的是,LEMON 需要很耗费计算量的预训练的目标检测器和更高分辨率 (800×1333) 的输入图像,导致推理时间比使用低分辨率 (384×384) 输入图像的无检测器 BLIP 慢得多。

视觉问答
BLIP 没有将 VQA 制定为多答案分类任务,而是按照 ALBEF 的做法把 VQA 视为一种答案生成的任务。结构如下图所示,在微调过程中,作者重新排列预训练模型,把视觉编码器的输出塞进文本编码器,这样图像和问题就编码为了多模态嵌入,再把这个表征输入文本解码器获得答案。VQA 模型使用真实答案作为目标使用 LM 损失进行微调。
使用 14M 图像,BLIP 在测试集上优于 ALBEF 1.64%。


自然语言视觉推理
模型预测一个句子是否描述了一对图像,是个二分类任务。为了能对两对图像进行推理,作者对预训练模型进行了简单的修改,如下图。首先两个图片通过视觉编码器得到视觉特征,再分别通过两个交叉注意力来处理两个输入图片,并且把它们的输出合并起来送入 FFN 中。这两个 Cross-Attention 层是从相同的预训练权重初始化的。通过 [Encode] token 的过了 MLP 的输出完成二分类任务。BLIP 优于所有现有方法,除了 ALBEF 执行定制预训练的额外步骤。但是有趣的是,NLVR2 的性能并没有从额外的网络图像中受益太多,这可能是由于网络数据和下游数据之间的域差距。


视觉对话
在自然会话设置中扩展了 VQA,其中模型不仅需要基于图像-问题对预测答案,还需要考虑对话历史和图像的字幕。作者对预训练模型进行了修改,如下图12所示。图片先经过 Image Encoder 得到视觉表征,Caption Encoder 的输入是字幕和 [Encode] token,并通过交叉注意力建模它们。Dialog Encoder 的输入是 [Encode] token,问题 QA 和对话历史。使用 ITM 损失进行二分类式的训练,以区分问题的答案是真还是假。
BLIP 在 VisDial v1.0 验证集上实现了最先进的性能。


2、消融实验
CapFlit
当使用 14M 的数据集设置时,联合使用字幕器 Captioner 和过滤器 Filter 可以观察到性能改进,而且它们的效果相互互补,证明了 CapFilt 方法能够从嘈杂的原始数据中提炼出有用的数据。
当使用更大的数据集 129M 的设置或者更大的模型 ViT-L 时,CapFilt 可以进一步提高性能,这验证了它在数据大小和模型大小方面的可扩展性。而且,仅仅增加字幕器和过滤器的模型尺寸时,也可以提高性能。

下图中,作者展示了一些示例的字幕与对应的图片。 是直接从网络上爬取的原始字幕, 是字幕器生成的字幕。图中的红色文本是 Filter 删除的文本,绿色文本是 Filter 保留下来的文本。可以看出几张图片里面,红色的文本不是不好,只是没有绿色的文本对图片的描述更加贴切。这个结果说明了 CapFilt 方法确实是能够提升图文对数据集的质量。

参数共享策略
不共享self attention 的效果最有好,原因:
*降低参数量,训练更快。
*因为毕竟解码器和编码器不同。(这个在BLIP2里面是完全共享,通过不同的attention mask解决)

六、使用方法
参见git,更推荐使用BLIP2或者Instruct BLIP。
七、待解决
暂无。