首发于Paper鉴赏
视觉与视觉语言预训练-CLIP

视觉与视觉语言预训练-CLIP

SOTA 的视觉系统都是在预先定义的固定类别上以分类任务训练的,这实际上限制了模型的泛化性和在新的类别数据上的可用性。文章就解决这一问题,在双塔结构的基础上,提出了一个简单的图文对比学习的方法,通过从英文维基百科中构建高频视觉概念的允许列表来从互联网上收集数据集约 4 亿(image, text)对用于模型预训练,并在超过 30 中不同的视觉数据集上验证了该方法的有效性。文章设计了大量的实验证明了 CLIP 在视觉特征提取及Zero-shot 的优势。


代码地址:github.com/OpenAI/CLIP

图文预训练的方式选择

文章对比了三种模型预训练的方式,并对比了性能,分别是:

  1. Image Caption
  2. BoW Prediction
  3. Contrastive Learning

Image Caption 是利用视觉信息来解码生成文本的任务,如下图所示,理论上这样的模型具有更高的表达性,但是文章实验证明这样的 Transformer-based 语言模型在 zero-shot ImageNet 的分类效果上较弱,且训练速度很慢


图1 Image Caption 示意图

BoW Prediction 是文章参考了另一篇论文中的基于词袋的弱监督的模型训练方法,原理很简单,就是一个多标签学习的方法,流程大概是对 caption 进行分词,然后剔除高频词,停用词... 操作之后剩下的词作为 image 的标签,这样一个 image 就从属多个类别,利用 BCE 就可以训练了。

Contrastive Learning 是本文最终选择的预训练方式,后面会具体介绍。无论是训练速度和最终模型的效果都比前两种方法好很多,下图对比了三种不同的预训练方式在 ImageNet 上 Zero-shot 的准确率以及训练效率,BoW Prediction 比 Image Caption 学习快 3 倍,而 CLIP 比 BoW Prediction 快 4 倍。

图2 三种不同预训练方式的性能对比

CLIP 的训练和推理过程

CLIP 使用的是典型的双塔结构Image encoder 尝试了 5 种 ResNets,和 3 种 ViT结构,5 种 ResNet 包括 ResNet-50、ResNet-101 和 3 种使用 EfficientNet 的复合系数扩大的 RN50x4,RN50x16 和 RN50x64,在实验中 CLIP 默认的模型结构是 ViT-L/14@336px。

Text encoder 选用 transformer 结构,12 层 512-wide 和 8 attention heads。输入文本序列的最大长度为 76。文本序列用 [SOS] 和 [EOS] 包围,transformer 最后一层的激活的 [EOS] 对应的特征作为输入文本序列的表征用于映射到多模空间中。 训练参数,Batch size 32768,词表 size 49408,Adam 优化器,总数据量 4 亿图文对。


训练方法,如图3(1)所示,利用图文的特征 encoder 分别获取图像和文本的特征,然后构成了一个 NxN 的一个相似度矩阵,其中对角线上的图文对是正样本,此外的 N^2 - N 是负样本,通过对每行 image->text 做交叉熵 loss,每列 text->image 做交叉熵loss,目标就是优化这两个 loss 之和,从而达到视觉信息和文本信息的交叉模态对齐的效果。

图3 CLIP 整体架构

推理过程,如图3(2)和(3)所示,以图像分类为例,首先将新的类别使用 text prompt 拼合起来经过 Text encoder 得到对应的 embedding,同时将图像经过 Image encoder 得到对应的 embedding,和所有的类别对应的 embedding 做内积计算相似度,取最大相似度即可。

CLIP Prompt engineering and ensembling

下图在36个数据集上对比了直接用类别 text 输入 text encoder 和利用 prompt 及其集成的方式的 Zero-shot 平均效果。平均能够提升 5 个点。 作者也在 ImageNet 上集成了 80 种不同的上下文 Prompts,比如 “A photo of a big {label}”,“A photo of a small {label} ” ... 比单个的 prompt 准确率提高了3.5%。 对于 ensembling 来说,并不会增加计算量,而是离线的将各种 Prompt 通过 text encoder 计算好,在 embedding 空间取平均,on line 计算的时候只是匹配的类别对应的 embedding。

图4 Prompt 工程及其集成在 Zero-shot 的效果

CLIP 获取的图像特征泛化能力更强

下图左图对比了 CLIP 和不同模型在20个数据集上的平均效果,能够发现两个点,第一,CLIP Zero-shot 的效果比其他模型 16-shot 的效果还好。第二,CLIP 的 4-shot 才能够达到和 Zero-shot相同的效果,只能说明 Fine-tune 任务是有牺牲的。 下图右图对比了Zero-shot CLIP 和 ResNet50 的linear Probe(固定 backbone 只训练 softmax 分类层)对比,在 16 个数据集上 ResNet50 的linear Probe的效果不及 CLIP 的 Zero-shot。说明 CLIP 的Zero-shot 泛化能力很强,比通过 ImageNet 训练的 ResNet 50强很多。

图5 CLIP 对比在 Zero-shot 和 few-shot 的效果

CLIP Zero-shot vs Probe

下图左图的实验是计算每个类别多少样本训练的 Few-shot 能够达到和 Zero-shot 一样的水平,平均值是 28.8 个样本,最大值 184,最小值 0.9,说明 Zero-shot 迁移的数据效率差异很大。 下图右图的实验室对比了全监督的 linear Probe 和 Zero-shot,毫无疑问 linear Probe 的效果要明显优于Zero-shot,尽管 Fine-tune 会让预训练模型有些牺牲。线性拟合发现,平均全监督的 linear Probe 涨点 1% 对应的 Zero-shot 会涨点 1.5%,只有在准确都在0.9以上的时候效果才差不多,说明潜在的表征质量高的时候 Zero-shot 效果才会更好。

图6 CLIP 对比在 Zero-shot 和 Linear Probe 的效果

CLIP 的优缺点

优点:

  1. 不得不说的是这篇文章的实验做的非常细致,通过对其实验的观察,能够发现很多问题,比如 Fine-tune 的一些弊端在实验中就有体现。
  2. 使用大规模的图文预训练,并结合 Prompt 在Zero-shot上取得了较好的结果,非常具有创新性和影响力。

缺点:

  1. 数据量虽然够大,但经过各种筛选及人工剔除得到的数据和真实世界的认知分布相比存在偏差,这个也是 ALIGN 文章效果更好的原因。
  2. 对于 Prompt 的探索不够细致,CoOp 发现自动学习的 Prompt 效果更好。

编辑于 2021-10-25 14:05