0%

Vision-Language Learning

Vision-Language Learning

ViLT

  • ViLT移除了多模态学习框架中预训练的目标检测器,换成了可以学习的Patch Embedding Layer,推理时间快
  • ViLT的训练时间长,复杂度大,视觉端不够强,效果不够好

CLIP

  • 使用Image-text contrastive loss训练,使图文对的特征尽量接近
  • 模态交互使用简单的点乘,高效

以往方法中发现比较好的一些经验:

  • 视觉文本双分支,且视觉需要更多的参数去学习
  • 模态融合很重要,用一个vit去做融合会比浅层的融合或者点乘更好
  • UNITER、ViLT中使用的Word Patch Alingment(WPA) loss计算起来非常慢
  • CLIP使用的ITC loss非常有效
  • MLM loss有效(Mask Language Modeling,也就是BERT的训练方式,遮住一个词再去预测这个词,做完形填空,在ALBEF中就是输入图像和被遮盖的句子,然后预测完整句子)
  • ITM loss有效(Image Text Matching loss,二分类问题,判断当前图像和文本是不是一个对,如果不做限制,会很快达到较高的准确率,因为负样本很多,因此通常需要做限制,比如ALBEF中选最接近正样本的负样本,利用在ITC loss中计算的相似度,选除自己之外最相似的负样本)

ALBEF

Align before Fuse: Vision and Language Representation Learning with Momentum Distillation

  • 预训练的目标检测器提取的视觉特征和文本端是没有对齐的,没有进行end-to-end训练,对于多模态编码器来说,学习图像文本的特征就比较困难,所以ALBEF提出要在融合之前就对齐图像和文本的特征(实际上就是使用了一个ITC loss)

  • 提出momentum distillation(一种自训练方法),使用momentum model来生成伪标签,进而实现自训练,来从noisy web data(从网上爬下来的图像文本对,利用caption filtering来解决noisy web data的问题)获得更好的训练效果

    noisy web data中的图像文本对常常是弱相关的,比如文本包含了与图像无关的描述,或者图像包含了文本没有描述的实体对象,有些负样本的描述甚至比GT更好,对ITC和MLM loss都会有影响,使模型学习困难。

    momentum model是通过EMA得到的,目的是让模型的预测输出不仅仅跟ground truth的one hot label接近,还要和momentum model出来的pseudo targets要尽可能match,直观来说,模型从one hot label里学习大量信息,但one hot label存在噪声或是错误的时候,稳定的momentum model能够提供一些修正和改进。

image-20230621224557706

VLMo

VLMO: Unified Vision-Language Pre-Training with Mixture-of-Modality-Experts

Motivation_1:

  • CLIP,ALIGN所使用的双塔模型(dual-encoder)使用简单的点乘来完成模态的交互,好处是非常适合图文检索的任务,因为特征可以提前抽好,计算时只需要算点乘,但是这种点乘方式只引入了浅的视觉文本交互,不足以完成更加复杂的下游任务比如visual reasoning
  • 单塔(fusion encoder)模型使用多层的transformer来完成模态间的交互,在更加复杂的下游任务如VL classification上有更好的效果,但对于检索任务来说,这种单塔结构需要把所有可能的图像文本对都过一遍encoder,因此推理速度慢

为了吸取两种结构的优点,VLMo引入了Mixture-of-Modality-Experts,VLMo可以用作双塔编码器来分别编码图像和文本以用于检索任务,也可以用作融合编码器来模拟图像文本对的深度交互以用于分类任务

Motivation_2:

  • 多模态数据当时最大的setting是14million,规模还是不够大,如何能够利用现有的单模态的大规模数据集来提升多模态预训练的性能

提出stagewise pre-training strategy

image-20230622105919294

  • MoME中,MHSA部分是共享的,同样的self-attention weights可以用于不同模态的输入。对于不同的模态选择不同的modality expert
  • 模型结构灵活,但需要多次前向,训练时间长

分阶段的预训练

  • 先在vision上预训练,然后直接利用训练好的self-attention在language上训练L-FFN

image-20230622211859643

BLIP

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

论文: https://arxiv.org/pdf/2201.12086.pdf

代码: https://github.com/salesforce/BLIP

Unified

  • understanding:图文检索,VQA, VR,VE任务
  • generation:Image Captioning

作者是 ALBEF 原班人马,基本可以看做吸收了 VLMo 思想的 ALBEF。训练的 loss 和技巧都与 ALBEF 一致,属于 ALBEF 的后续工作

Motivations:

  • 模型角度:encoder-only的模型如CLIP和ALBEF没办法很直接的运用于text generation任务中,而encoder-decoder模型如SimVLM又不能直接的用于image-text retrieval的任务。因此需要提出一个统一框架来同时完成两类任务。

  • 数据角度:ALBEF中可以看出足够从noisy web text中学到的是次优解。为了有效清洗数据集,让模型更好利用数据集的图像文本配对信息BILP提出了captioner和filter模型。

    captioner作用给定任意一张图片去生成一些字幕,这样可以得到大量的合成数据,再去训练flter model将图像和文本不匹配的对从数据集删掉,大部分爬下来的数据很多是不匹配的noisy文本对。captioner可以生成非常好的有描述性的文本。那么filter会使用cap生成的文本去训练而不是用原有的文本对。

image-20230622220632343

Mixture of Encoder and Decoder

BLIP模型结构上整合了 ALBEF 和和 VLMo。BLIP包含4个部分,图像部分是一个完整的ViT模型,文本这边有三个模型分别用于计算三个不同的loss。

  • 对于第一个N层的文本模型,目的是根据输入的文本,做分类任务,和视觉特征做ITC loss。[CLS]标记被附加到文本输入的开头以总结句子。
  • 第二个模型在第一个模型基础上加入了cross attention(FFN和Self-Attention部分都是共享参数),引入了图像特征,计算ITM loss,前两个模型其实就是ALBEF的结构,不同的是它可以共享参数。一个任务特定的[Encode]标记被附加到文本中,[Encode]的输出嵌入被用作图像-文本对的多模态表示
  • 为了做生成任务,第三个模型引入了decoder,第一层的self-attention换成了因果关系注意力(causal self-att),通过前面文本推测后面文本。解码器拿到视觉特征和未掩码的语言特征,过一个 casual self-attention 层,做 GPT 中使用的LM(language modeling) 任务。这里区别于 MLM 的 mask 机制(做完型填空),是通过 causal self-attention 来实现因果推理(前半句预测后半句).[Decode]token用于表示序列的开始。
  • 缺点是训练时间仍然很长,图像端只需要一次forward,但文本端需要进行3次forward,分别计算3个loss

image-20230622221134739

CapFilt

如何清洗数据集,得到更高质量,更少噪声的图像文本对?

  • Filter: 将训练好的模型里的图像模型,和做ITC、ITM的两个文本模型拿出来在 COCO 上微调一下,微调过后的MED(Mixture of Encoder and Decoder)就是Filter,可以用于计算图像文本的相似度,判定图文对是否匹配,从而实现过滤。
  • Captioner: Image-grounded Text Decoder可以生成文本,在COCO上微调就得到了captioner。在实验中,BLIP 的解码能力很强,生成的captions甚至比gt更好,用于自训练后也可以涨点 2-3。

Captioner被其他方法用于生成captions,一个例子是 stable diffusion ,在做微调时,会遇到数据集只有图片没有 caption 的情况,比如 pokeman 数据。SD用 BLIP 来做caption生成,然后微调 stable diffusion 发现效果很好。 另一个例子是知名的开源多模态数据集 LAION,他们也用了 BLIP 来辅助制作数据集,首先用BLIP来生成40个captions,然后使用CLIP进行ranking,选出最好的caption,然后再用一个模型修复语法和标点。

image-20230623091948616

CoCa

CoCa: Contrastive Captioners are Image-Text Foundation Models

github: https://github.com/lucidrains/CoCa-pytorch

image-20230623110005666

它也是 ALBEF 的后续工作,模型非常像。区别在于:

  • 图像用了 attentional pooling(可学习的pooling)

  • 去掉了 ITM loss,目的是加快训练,原本文本需要 forward 2-3 次,去掉 ITM loss 之后只需要 forward 一次就可以了。在 ALBEF 中,ITM 需要完整的 text,而 MLM 需要掩码,所以是两次输入。在 BLIP 中,ITC 一次,ITM 因为在文本模型中插入了新的模块,所以得单独做前向。而 LM 因为用了既多了新的模块又得用 causal self-attention 所以又得单独做一次。在 CoCa 中,为了完成 captioning loss (实际上就是GPT用的Language Modeling loss)和 ITC loss,只需要做一次前向即可。GPT 中把 cls-token 放在最后面就可以得到全局表征来做 ITC loss 了。

image-20230623105943691

六边形战士

image-20230623110629351

总结:

  • 简单有效的结构设计
  • zero-shot 性能很强,在 imagenet 上微调不微调的差距很小

BEiT v3

(BEiT v3) Image as a Foreign Language: BEiT Pretraining for All Vision and Vision-Language Tasks

把图像看作语言,用统一的 multi-way transformer (mixture of experts ) 架构和单个 masked modeling loss,将任意模态看做是同一个模态来建模。

任意模态输入网络后,都被表示为 list of tokens,直接将它们看做是相同的模态来做 masked modeling(完形填空) 。

  • 可以灵活的处理各种下游任务,包括多模态和单模态的

如果想要拿过去做下游任务的话,直接将需要的那部分模型拿出来即可。比如做视觉任务就拿视觉模型,做语言任务就拿语言模型。如果是做多模态任务,可以灵活地模拟不同的需求,比如:1. 做生成任务可以拿多模态部分的参数出来 2. 做图文检索可以单独取出视觉部分和语言部分来模拟 CLIP。不仅仅是能做任意任务,还继承了前作的优点,比如 CLIP 这种弱跨模态交互带来的计算效率的优势。

image-20230623113005597