BLIP:Bootstrapping Language-Image Pre-training
研究背景视觉-语言预训练Vision-Language Pre-training简称 VLP显著提升了许多视觉语言任务的性能。VLP可以理解为视觉领域的BERT或者GPT。基本思想是用大量图片文本数据进行预训练让模型同时学习图片和文字之间的对应关系再迁移到各种下游任务。如图片 一只狗在草地上玩飞盘。 文本A dog catches a frisbee on the grass.模型不断学习图片是什么内容文本是什么意思图片和文字是不是匹配因此之后做很多任务都会变得更容易如图像描述Image Captioning、图片检索Image Retrieval、VQAVisual Question Answering、图文匹配现有方法的问题问题一大多数现有模型只能擅长理解类或生成类任务中的一种不能同时做好BLIP希望统一。1.理解任务【Encoder-based擅长判断】模型只需要理解图片和文字之间关系。如图片 sitting on a sofa 问题What animal is on the sofa? 模型回答Cat。 属于VQA任务是在固定答案集合中选择概率最高不需要逐词生成完整句子不算生成或图片文字是否匹配 图片 文字A red car. 输出相似度 0.96 True它们主要使用Encoder编码器。大概结构图片 → Image Encoder → Image Feature 比较两个Feature是否接近 文字 → Text Encoder → Text FeatureEncoder模型特别适合✅ 图文匹配 ✅ 图像检索 ✅ 分类它没有Decoder不会一句一句生成这些都属于理解任务Understanding。2.生成任务【Encoder-Decoder擅长写出来】要求模型自己写文字。如输入图片 输出A little boy is riding a bicycle.结构图片 → Encoder → Feature → Decoder → 一句一句输出文字Encoder-Decoder适合Image Caption、OCR生成、Visual Dialog生成能力很强但是Retrieval效果不好。因为Retrieval需要快速计算Image Feature和Text Feature间距离。而Decoder主要负责预测下一个词并不是为了计算Embedding。问题二目前性能提升主要依赖于不断扩大网络收集的图文数据规模但是数据噪声很多监督信号并不好如图片 标题IMG_202205.jpg或者Nice.或者hahaha图片 文字My vacation.文字几乎没有描述图片模型学不到真正对应关系。还有错误标注BLIP提出的方法提出BLIP一个新的视觉语言预训练框架可以同时迁移到理解任务和生成任务。做VQA、Caption、Retrieval、Text Generation都可以。一、新的模型架构MEDMultimodal Mixture of Encoder-Decoder传统模型通常只有一种固定结构而 MED可以根据任务切换三种不同的工作方式。不同任务打开不同功能。论文称Mixture。1.Unimodal Encoder普通Encoder图片和文字分别编码比较距离。用于Image-Text Contrastive LearningITC。图片 → Image Encoder → Image Feature 文字 → Text Encoder(BERT) → Text Feature文本A dog is running. 输入[CLS] A dog is running最后[CLS] 的输出表示整个句子的语义和ViT完全一样。这一阶段主要学习图片和文本各自的表示为后续图文对比学习ITC提供基础。2.Image-grounded Text Encoder基于图像的文本Encoder加入Cross-Attention图片帮助文字理解。图片 文字A dog is running.Encoder同时看图片、文字学习是不是匹配用于Image-Text Matching。在文本编码器每一个 Transformer Block 中都加入了一个Cross-AttentionCA层。Self-AttentionSA只关注自己这一种模态。 如A cat sits on a sofa. cat 可以关注A sits sofa但是不能看图片学到的是文本内部的关系。Cross-AttentionCA可以关注另一种模态的信息。 模型读到cat时不仅可以关注其它单词还可以关注图片中的对应区域学习图文之间关系。Cross Attention作用如果不看图片animal可能狗猫马不知道。加入Cross Attention文字开始关注图片知道animal就是狗此处的cross attention是在逐点对比文本与图像是否匹配匹配结果存在[Encode]中最后经ITM输出二分类结果匹配/不匹配。原来TransformerSelf Attention → Feed Forward现在Self Attention → Cross Attention → Feed Forward每一层都会融合图片信息。增加一个task-specific[Encode] token如输入[Encode] A cat sits on a sofa.[Encode] 输出的向量代表整张图片 整句话共同形成的表示。称为multimodal representation以后Image-Text MatchingITM等任务就利用这个向量完成分类。3.Image-grounded Text Decoder生成任务Decoder开始工作需要逐词生成一句话。如图片 Decoder一步一步生成A cat is sleeping就是Caption Generation。所以作者把 Self-Attention【Bidirectional的左右都能看】换成Causal Self-Attention因果自注意力【只能看左边】也叫掩码自注意力Masked Self-Attention保证模型在生成第 t 个词时只能利用前面已经生成的词而不能访问未来的词这正是 GPT 等自回归语言模型采用的机制。因为生成文本时不能偷看答案例如训练A cat sits on a sofa.生成到 A cat 时模型只能看到 A cat不能提前看到sits on a sofa否则训练就没有意义。图片信息仍然通过 Cross-Attention 注入因此模型在生成每一个词时都可以参考图片内容。如图片 → Image Encoder → 图片特征 ↑ Cross-Attention ↑ [Decode] → A → cat → is → sitting → ...[Decode]表示开始生成句子。模型看到[Decode]后就开始一个词一个词地输出文本。生成到eos生成停止。训练时的具体操作以预测第一个词为例1、输入起点把[Decode]输入到解码器的 0 号位置。2、特征提取[Decode]结合图像的信息通过 Cross Attention经过 N 层网络后在 0 号位置输出一个隐层向量。3、映射为词表概率向量经过最终的线性层LM Head和 Softmax生成一个全词表维度的概率分布比如词表有 30,000 个词就会输出 30,000 个概率值。4、计算 Loss找到真实标签Ground Truth中第 1 个词a在词表中的索引。计算预测分布与a之间的交叉熵损失Cross-Entropy Loss。公式含义模型目标就是让预测出a的概率尽可能逼近 100%。1、需要处理纯文本时可以作为单模态编码器使用。2、需要理解图片和文本之间的关系时可以作为图像引导的文本编码器负责提取图文联合表示用于图文检索、视觉问答等理解任务。3、需要生成文本时可以作为图像引导的文本解码器根据图片内容逐步生成文字描述。为了让 MED 学会这些能力作者同时设计了三种训练目标。1、图文对比学习Image-Text Contrastive LearningITC。它的目标是让匹配的图文在特征空间中距离更近不匹配的图文距离更远。主要提升图文检索能力。2、图文匹配Image-Text MatchingITM。模型需要判断一张图片和一句文字是否真正对应帮助模型学习更细粒度的跨模态理解能力。3、图像条件语言建模Image-Conditioned Language ModelingLM。模型根据图片内容预测下一词学习如何生成自然、准确的图像描述提升模型的生成能力。Bootstrapping 可以理解成自己帮助自己学习。或者自动改善训练数据。BLIP做了两步。二、CapFiltCaptioning and Filtering目前高质量的图文数据非常少且人工标注昂贵近年来很多模型都改用互联网数据。文字虽然能够大量自动获取但很多没有描述图片内容这些 alt-text 对视觉语言学习来说是一种噪声监督noisy signal。监督信息本身就是错误的模型学不到正确的图文对应关系。1.Captioner生成新的Caption先训练一个 Captioner。不是重新设计的新模型就是上一节介绍的MED切换成Image-grounded Text Decoder生成模式然后利用 COCO 数据集微调。由于 COCO 的描述都是人工写的因此 Captioner 能够学会看到图片 → 生成准确描述。网页图片️ 网页原始文字My lovely weekendCaptioner 不看网页文字直接根据图片生成A cat sitting on a sofa.【Synthetic Caption合成描述】记作2.Filter过滤新的描述并不是全部都拿去训练因为模型可能生成错误描述还需要第二个模块Filter。Filter 同样来自 MED。不过切换的是Image-grounded Text Encoder理解模式。利用ITC、ITM进行微调学会判断图片和文本是否真正匹配。图片 文本A cat sitting on a sofa. ITM Head 输出Matched → 保留图片 文本A dog running. ITM Head 输出Unmatched → 删除Filter不仅过滤 Captioner 生成的新文本还过滤原来的网页文本。对于同一张图片同时拥有网页原始文字和生成的新文字。Filter 分别判断是否匹配以及是否匹配。ITM Head 判断 Unmatched 的删除。因为 Captioner 不是百分之百正确。如果图片比较复杂或者图片质量很差Captioner 也可能描述错误。所以生成以后仍然需要再检查一遍。Captioning和Filtering两步缺一不可。3.重新构建数据集经Filter得到高质量图文对与人工标注数据合并形成新的训练集。然后重新训练一个 BLIP 模型。实际上整个过程不是训练 BLIP → 直接结束而是① 训练初始 BLIPMED ↓ ② 微调成 Captioner ↓ ③ 微调成 Filter ↓ ④ 清洗整个互联网数据 ↓ ⑤ 得到新的高质量数据集 ↓ ⑥ 从头重新训练最终 BLIP因此Captioner 和 Filter 更像是数据制作工具。真正部署、测试时使用的是最后重新训练出来的新 BLIP。作者把这个过程称为Bootstrapping模型利用自己已有的能力去改善训练数据再利用改善后的数据训练出一个更强的模型。整个流程叫Caption Bootstrapping可以表示为网页图片 Iw │ ├──────────────┐ │ │ Captioner 原始网页文本 Tw │ │ 生成 Ts │ └──────┬───────┘ │ Filter图文匹配 │ 保留高质量图文对若二者都合适都保留 │ 与 COCO 合并 │ 重新训练新的 BLIP模型先借助少量高质量人工数据如 COCO学会生成和判断图文再反过来提升大规模网页数据的质量最后再利用这些高质量数据重新进行预训练。整个过程形成了一个模型提升数据质量数据质量再提升模型能力的循环这正是 BLIP 中 CapFilt 的核心思想也是它区别于以往直接使用网页图文数据训练的重要创新。预训练目标BLIP 利用三个互补的预训练目标共同训练模型。ITC 学习图片和文本的全局语义对齐使模型具备检索能力ITM 学习图文之间细粒度的对应关系使模型具备更强的理解能力LM 学习根据图片逐词生成文本使模型具备生成能力。1.Image-Text Contrastive LossITC激活Unimodal Encoder单模态编码器。图片和文本分别独立编码不进行跨模态交互。假设有一张猫的图片对应文本A cat sitting on a sofa.经过编码后得到图片向量和文本向量训练目标就是让匹配的图片和文本向量距离更近不匹配的距离更远。因此 ITC 学习的是全局语义对齐global alignment。引入了Momentum Encoder动量编码器因为现实中的训练数据并不完美。如图片文本A small pet sitting indoors. 虽然没有出现 cat 但也是正确描述。如果模型把所有没有配对的文本都认为是负样本就会把一些实际上描述同一图片的文本也推远。因此提出Momentum Encoder。可以理解成一个更新速度更慢、更稳定的教师模型。它会产生更加稳定的特征表示并利用这些表示生成Soft Label软标签。传统分类标签通常只有Cat 1Dog 0软标签可能变成Cat 0.92Pet 0.87Animal 0.81。这样模型不会把所有非配对样本都当成完全错误允许某些样本具有一定相似性更符合真实数据的情况。2.Image-Text MatchingITM激活的是Image-grounded Text Encoder。这时图片和文本已经通过Cross-Attention融合模型学习的不再只是整体是否相似是更加细粒度fine-grained的对应关系。如图片一只猫坐在沙发上。文本一A cat is sitting on a sofa. 文本二A dog is sitting on a sofa.对于 ITC 来说两句话都出现了 animal、sofa 等类似语义因此相似度可能都比较高。但 ITM 更关注细节会进一步检查图片里的到底是不是猫动作是不是坐着位置是不是沙发ITM实际上就是一个二分类问题。输入融合后的图文表示[Encode]输出经过一个线性层ITM Head最后预测Matched或 Not Matched。Hard Negative Mining困难负样本挖掘设训练数据中有两种错误文本1A plane flying in the sky. 2A dog sitting on a sofa.对于猫图片来说第一句太容易判断错误第二句却很容易混淆。如果一直训练第一种错误样本模型很快就学会了没有什么提升。因此作者希望训练更加困难的负样本。具体做法先利用 ITC 的相似度。如果一个错误文本和图片非常相似图片猫 文本Dog sitting on sofa 相似度0.82它就更有可能被选中作为负样本。这样的训练更加有效因为模型必须学习更加细致的视觉差别而不仅仅依靠粗略语义。3.Language ModelingLM激活Image-grounded Text Decoder负责生成图片描述。输入模型逐词生成完整句子A ↓ A cat ↓ A cat is ↓ A cat is sitting ↓ A cat is sitting on ...训练目标让模型预测的下一个词尽可能接近真实文本。Label Smoothing 0.1它是一种常见的正则化方法。例如真实标签本来是Cat 1Dog 0加入 Label Smoothing 后Cat 0.9Dog 0.1。这样模型不会过于自信可以减少过拟合提高泛化能力。使用LM而不是很多 VLP 模型采用的MLMMasked Language ModelingMLM 就是 BERT 的训练方式。如A cat is [MASK] on a sofa. 模型预测sitting这种训练方式只能学习填空模型始终知道句子大部分内容。而LM 模型必须逐词生成。A → A cat → A cat is → A cat is sitting因此它学会了如何把图片信息转换成完整自然语言。这种能力对于图像描述等生成任务更加重要。参数共享Parameter SharingBLIP有 Text Encoder 和 Text Decoder如果完全独立参数会增加一倍。实际上两者只有Self-Attention不一样其余模块其实作用相同这些都可以共享。Encoder使用Bidirectional Self-Attention双向自注意力能综合整个句子上下文理解当前词。Decoder 使用Causal Self-Attention因果自注意力预测下一个词只能看到前面的词不能提前看到后面的词因此生成更加符合真实推理过程。于是 BLIP 中Embedding、Cross-Attention、FFN都共享只有 Self-Attention 分开。这样既减少参数数量又能让 Encoder 和 Decoder 在共享知识的基础上分别完成理解和生成任务提高训练效率同时充分发挥多任务学习的优势。Image Encoder图像编码器把图片切成很多小块Patch。ViT不会一次看整张图片而是切成很多小块---------------- | P1 | P2 | P3 | P4 | ---------------- | P5 | P6 | P7 | P8 | ---------------- | P9 |P10 |P11 |P12 | ----------------每一个 Patch 就像 NLP 中的一个Word Token。图片 → Patch → Embedding →Transformersequence of embeddings每一个 Patch 都会变成一个向量。例如Patch1 → [0.31,0.84,...] Patch2 → [0.19,0.52,...] Patch3 → [0.62,0.77,...]最后得到Patch1 Patch2 Patch3 ... Patch196就是一串Embedding序列Sequence。[CLS] TokenViT最前面会加一个[CLS] Patch1 Patch2 Patch3 ...因为最后Transformer会输出CLS embedding Patch1 embedding Patch2 embedding ...其中CLS就是整个图片的代表。如图片最后CLS → [0.84,0.91,0.63...] 表示整张图片的信息代表Global Feature全局特征。为什么不用目标检测器早期视觉语言模型通常会先利用目标检测器找到图片中的物体。图片️目标检测器先识别Cat、Sofa、Tree再把这些目标送给语言模型做视觉语言任务。这种方法虽然有效但是计算量较大因为目标检测本身就是一个复杂任务。ViT 不需要先检测物体而是直接处理整张图片因此计算更加简单、高效传统ViTBLIP认为ViT更简单、更快、更统一、不需要额外目标检测器、更容易训练所以采用ViT。caption的选择已经生成A dog is模型对于下来选哪个词不同算法有不同策略。Nucleus Sampling假设模型预测先按概率从大到小排序然后才计算累计概率。Token概率累计概率running0.450.45playing0.250.70jumping0.150.85sleeping0.080.93barking0.040.97eating0.031.00如果设置p 0.9那么累计到running playing jumping sleeping已经超过0.9。于是Sampling Pool候选集合就是running playing jumping sleeping然后随机抽一个可能抽到running也可能 playing 或 jumping这就是Sampling。Nucleus核心因为它只保留概率最高的一小部分词。不是所有词随机而是只在最有可能的一部分里面随机。因此既不会太离谱又有随机性。p0.9论文说p{0.85,0.9,0.95} 都差不多p越大候选越多随机性越强。如果 p0.85 候选running、playing、jumping如果 p0.95 候选running、playing、jumping、sleeping、barkingBeam SearchBeam Search束搜索是一种确定性的解码方法。目标是生成概率最大的句子。如图片模型可能认为第一名A dog is running. 概率0.92第二名A brown dog is running. 概率0.90第三名A dog plays outside. 概率0.87Beam Search总是选第一名。所以同一张图片生成十次都是A dog is running. 没有变化。Nucleus Sampling VS. Beam SearchNucleus Sampling第一次A brown dog is running.第二次A dog plays in the grass.第三次A happy dog running outdoors.因为生成越随机意味着错误也越多Noise Ratio更高Filter删除比例更高。生成更加多样、更加令人意外的Caption。如图片Beam Search总是A dog is running.Nucleus生成的句子可能包含以前没有的信息brown颜色、Labrador品种、frisbee飞盘、grassy草地、playful状态。Beam Search对于任何狗都写 A dog. 任何猫都写A cat. 不会犯错但是也没有新信息。这一节可以总结成下面这张图图片 │ ▼ Captioner ┌────────────┴────────────┐ ▼ ▼ Beam Search Nucleus Sampling 确定性解码 随机采样解码 │ │ ▼ ▼ A dog is running. 每次可能不同 • A brown dog is running. • A playful dog runs outdoors. • A Labrador chases a frisbee. │ │ ▼ ▼ 信息较少 信息更多、更丰富 │ │ ▼ ▼ BLIP预训练效果较差 BLIP预训练效果更好核心思想作者发现了一个看似矛盾但很重要的现象Nucleus Sampling生成的 Caption噪声更多因此会有更多 Caption 被 Filter 删除但是保留下来的 Caption 往往更加丰富、多样提供了更多细节和新的语义信息。相比之下Beam Search虽然生成的 Caption 更稳定、错误更少但容易反复使用训练集中最常见、最保守的表达例如 A dog is running.对模型来说新增的信息有限。实验结果说明对于视觉语言预训练来说合成 Caption 的多样性Diversity比单纯追求最高概率Most Probable更重要。多样的 Caption 能让模型接触到更丰富的语言表达和视觉描述从而学到更全面的视觉-语言对应关系。结果BLIP在很多视觉语言任务上都取得了当时最先进State-of-the-ArtSOTA的效果。包括Image-text Retrieval图片找文字或文字找对应图片、Image Captioning给图片写描述、VQAVisual Question AnsweringBLIP即使没有专门训练视频数据也能直接迁移到视频语言任务并取得不错效果。