type
status
password
date
slug
summary
category
URL
tags
icon
Abstract
当前的计算机视觉(CV)模型通常被训练用于预测有限的物体类别。这种严格的监督训练方式限制了模型的泛化性和实用性,因为这样的模型通常还需要额外的标注数据来完成训练时未曾见过的视觉“类别”。
直接从图片的描述文本中学习是一个很好的解决方案,因为这样我们可以获取更多的监督信号。这篇文章中,我们证明了利用一个简单的预训练任务(即预测哪个文本描述对应当前图像)在一个从互联网上搜集的4亿个(图像,文本)对的数据集上可以取得SOTA的图像表征。
预训练完之后,在下游任务上,我们可以通过用自然语言(文本)匹配图像从而实现zero-shot。我们在30个不同类型的下游CV 任务上进行了基准测试,包含了诸如 OCR、视频动作检测、坐标定位和许多类型的细粒度目标分类等任务。 CLIP 在大多数任务上表现非常好,在不需要任何数据集的专门训练的情况下,能与完全用有监督方式训练出来的模型取得同样效果,甚至还会更高。 例如,CLIP 在不使用 ImageNet 那128万个训练集的情况下,就跟一个有监督训练好的 ResNet50 打成平手。
1、Introduction and Motivating Work
在NLP中,预训练的方法目前其实已经被验证很成功了,像BERT和GPT系列之类的。其中,GPT-3从网上搜集了400 billion byte-pair-encoded tokens进行预训练然后可以在很多下游任务上实现SOTA性能和zero-shot learning。这其实说明从web-scale的数据中学习是可以超过高质量的人工标注的NLP数据集的。
然而,对于CV领域,目前预训练模型基本都是基于人工标注的ImageNet数据集(含有1400多万张图像),那么借鉴NLP领域的GPT-3从网上搜集大量数据的思路,我们能不能也从网上搜集大量图像数据用于训练视觉表征模型呢?
本文主要是与 Learning Visual N-Grams from Web Data (2017年)的工作比较相似,他们都做了 zero-shot 的迁移学习,但当时 Transformer 还未提出,也没有大规模的且质量较好的数据集,因此17年的这篇论文的效果并不是很好。有了 Transformer、对比学习、”完形填空“ 等强大的自监督训练方式后,最近也有一些工作尝试把图片和文本结合起来,去学得更好的特征,如 VirTex,ICMLM,ConVIRT,这些工作与 CLIP 很相似,但也有所区别,VirTex使用自回归的预测方式做模型的预训练;ICMLM使用 ”完形填空“ 的方法做预训练;ConVIRT 与 CLIP 很相似,但只在医学影像上做了实验。这三种方法都没有在模型或数据集上使用很大的规模。
- VirTex:Learning Visual Representations from Textual Annotations
- ICMLM:Learning Visual Representations with Caption Annotations
- ConVIRT:Contrastive Learning of Medical Visual Representations from Paired Images and Text
2、Approach
2.1、Natural Language Supervision
CLIP 方法的核心就是利用自然语言的监督信号来训练一个比较好的视觉模型。为什么要用自然语言的监督信号来训练视觉模型?
- 不需要再去标注这些数据了。像 ImageNet 需要先定好 1000 个类,而这 1000 各类也需要之前筛选好,根据这些类去下载图片,再清理数据集,然后标注,这个过程比较复杂。如果只需要下载 图片-文本对,别的标注都不需要做,那么数据的规模很容易就变大,而且现在的监督信号是一个文本,而不是这种 N 选 1 的标签,模型的输入输出自由度就大了很多。
- 因为训练时把图片和文本绑定到一起,那么训练的特征就不再仅是一个视觉特征了,而是一个多模态的特征,也就很容易去做 zero-shot 的迁移学习。如果只是做单模态的自监督学习,无论是单模态的对比学习(如MOCO),还是单模态的掩码学习(如MAE),都只能学到视觉特征,而无法与自然语言联系到一起,这样很难做 zero-shot 迁移。
总之,用自然语言的监督信号来训练视觉模型是非常有潜力的。
2.2、Creating a Suffificiently Large Dataset
现有工作主要使用了三个数据集,MS-COCO、Visual Genome 和 YFCC100M。 MS-COCO 和 Visual Genome 是高质量的人工标注数据集,但是数据量太少了,每个大概有10万张训练图片。 相比之下,其他计算机视觉系统是在多达35亿张 Instagram 图片上训练的。 拥有1亿张照片的 YFCC100M 是一个可能的替代方案,但标注质量比较差,每个图像配对的文本信息都是自动生成的,许多图像使用自动生成的文件名(如 20160716 113957.JPG)作为 “标题”,或包含相机曝光设置的 “描述”。如果对 YFCC100M 进行清洗,只保留带有自然语言标题或英文描述的图像,数据集缩小了6倍,大概只有1500万张照片, 这个规模就与ImageNet的大小大致相同。
为了解决这个问题,OpenAi构建了一个包含 4 亿对(图像、文本)对的新数据集,称为 WI(WebImageText),这些数据从互联网上的各种公开来源收集。 一共有500,000个查询文本,每个文本包20,000 个(图像、文本)对。 生成的数据集的总字数与用于训练 GPT-2 的 WebText 数据集相似。 我们将此数据集称为 WebImageText 的 WIT。
2.3、Selecting an Effificient Pre-Training Method
目前,先进的视觉模型需要大量的计算资源。 Mahajan 的ResNeXt101-32x48d模型需要需要 19 GPU years ,Xie 的Noisy Student EfficientNet-L2模型需要 33 TPUv3 core-years。这两个系统都只训练了 1000 个物体类别,从自然语言中学习图像类别的任务可能需要消耗更多的计算资源。在我们训练的过程中,发现训练效率是成功的关键,也正是这个原因,我们最终选择了的对比学习。
具体方法为,文本使用 Transformer,图像使用CNN,都是从头开始训练的,任务就是给定一张图片,要去预测这张图片所对应的文本,即caption。给定一批 对(图像,文本),CLIP 被训练来预测批次中 种可能的(图像,文本)配对中哪些是实际存在的。为此,CLIP 通过联合训练图像编码器和文本编码器来学习多模态的Embedding,最大化批次中 对真实配对的图像和文本嵌入的余弦相似度,同时最小化 对错误配对的嵌入余弦相似度。
在图 2 中,我们展示了一个 6300 万参数的transformer语言模型,蓝线部分就是基于 Transformer 做预测型任务(如 GPT)的训练效率;橘黄色线是使用 BOW 的方式做预测任务,也就是说不需要逐字逐句地去预测文本,文本已经被全局化地抽成了一些特征,约束也就放宽了,可以看到约束放宽以后训练效率提高了三倍;如果进一步放宽约束,即不在去预测单词,只是判断图片和文本是否匹配(图中绿线),这个效率又进一步提高了4倍。

2.3.1、为什么使用对比学习
如果给定一张图片,然后去预测它对应的文本的话,需要逐字逐句地去预测这个文本,那么这个任务就太难了,因为对于一张图片来说,可以有很多不同的描述,文本之间的差距将是非常巨大的。如果用这种预测型的任务去预训练模型的话,它就会有太多的可能性了,那么这个模型训练的就非常慢。
作者发现如果把训练任务变成对比的任务,也就是说只需要判断这个图片和这个文本是不是配对的,那么这个任务就简单了很多,约束一下就放宽了很多。在 Figure 2中仅仅把预测型的目标函数换成对比型的目标函数,训练效率一下就提高了4倍。
其他工作发现,虽然图像的生成模型可以学习高质量的图像表示,但它们需要比具有相同性能的对比模型多一个数量级的计算量。
2.4、Choosing and Scaling a Model

分别将文本和图像进行编码,之后使用 metric learning 进行训练,将图像与文本的相似性提高。在预测阶段,通过一系列生成的文本对和目标图像,计算余弦相似度从而获取预测值。
2.4.1、图像编码器
我们为图像编码器考虑了两种不同的架构。第一种,我们使用 ResNet-50(He 等人,2016a)作为图像编码器的基础架构,因其广泛应用和已验证的性能。我们使用 He 等人(2019)的 ResNetD 改进和 Zhang(2019)的抗锯齿矩形模糊池化对原始版本进行了若干修改。我们还将全局平均池化层替换为注意力池化机制。注意力池化实现为单层 “Transformer 式” 多头 QKV 注意力,其中查询基于图像的全局平均池化。
虽然之前的计算机视觉研究通常通过单独增加宽度或深度来缩放模型,但对于 ResNet 图像编码器,我们发现在所有宽度、深度和分辨率上分配额外的计算优于仅将其分配给模型的一个维度。
第二种架构,我们实验了最近提出的视觉 Transformer(ViT)(Dosovitskiy 等人,2020)。我们严格遵循其实现,仅进行了微小修改:在 Transformer 之前的patch和position embeddings组合中添加额外的layer normalization,并使用略有不同的初始化方案。
2.4.2、文本编码器
文本编码器是 Transformer(按照Radford 等人的结构进行了修改)。我们使用一个 6300 万参数的 12 层 512 维模型,具有 8 个注意力头。使用lower-cased BPE进行分词,词汇表大小为 49,152(Sennrich 等人,2015)。为了计算效率,最大序列长度限制为 76。文本序列用 [SOS] 和 [EOS] 标记括起来,Transformer 最高层在 [EOS] 标记处的激活被视为文本的特征表示,经层归一化后线性投影到多模态嵌入空间。文本编码器中使用掩码自注意力,以保留用预训练语言模型初始化或添加语言建模作为辅助目标的能力,尽管这留待未来工作探索。
对于文本编码器,我们只缩放模型的宽度,使其与计算出的 ResNet 宽度增加成正比,根本不缩放深度,因为我们发现 CLIP 的性能对文本编码器的容量不太敏感。
2.5 Training
- 图像编码器:使用5个ResNet模型和3个ViT模型。
- 对于ResNet模型,我们训练了ResNet-50、ResNet-101,以及RN50x4、RN50x16和RN50x64;其中RN50x4代表RN50 4倍的计算量。
- 对于ViT模型,我们训练了ViT-B/32、ViT-B/16和ViT-L/14。。
所有模型均训练32个 epoch。我们使用 Adam 优化器,并使用余弦计划衰减学习率,batch size=32,768。
初始超参数是在最小的ResNet50模型上,通过网格搜索、随机搜索和手动调优相结合的方式设置的,并且只进行了1个epoch。由于计算限制,较大的模型通过启发式方法调整超参数。
可学习的温度参数τ初始化为相当于(Wu et al., 2018)中的0.07,并进行裁剪以防止对数几率缩放超过100,我们发现这是防止训练不稳定所必需的。
使用混合精度(Micikevicius et al., 2017)来加速训练并节省内存。为了节省更多内存,使用了梯度检查点(Griewank & Walther, 2000; Chen et al., 2016)、半精度Adam统计(Dhariwal et al., 2020)和半精度随机舍入的文本编码器权重。嵌入相似度的计算也进行了分片,各个GPU仅计算其本地批次嵌入所需的成对相似度子集。
最大的ResNet模型RN50x64在592个V100 GPU上训练了18天,而最大的ViT模型在256个V100 GPU上训练了12天。对于ViT-L/14,我们还在更高的336像素分辨率下预训练了1个额外的epoch,以提升性能,类似于FixRes(Touvron et al., 2019)。我们将这个模型表示为ViT-L/14@336px。除非另有说明,本文中报告的所有“CLIP”结果均使用此模型,我们发现它表现最佳。
3、Experiments
通过一系列的对比CLIP在zero shot、few shot以及在数据集上进行fine tune的效果都很好。
3.1、Zero-Shot Transfer
3.1.1、MOTIVATION
在计算机视觉中,Zero-Shot通常指对图像分类中未见物体类别的泛化研究。我们在此以更广泛的意义使用该术语,研究对未见数据集的泛化能力。
3.1.2、USING CLIP FOR ZERO-SHOT TRANSFER
CLIP 预训练的目标是预测图像和文本片段在数据集中是否配对。在Zero-Shot过程中,对于每个数据集,我们将数据集中的所有类别名称作为潜在文本配对集合,并根据 CLIP 预测最可能的(图像,文本)配对。
具体来说,我们首先通过各自的编码器计算图像的特征嵌入和可能文本集合的特征嵌入,然后计算这些嵌入的余弦相似度,通过温度参数 缩放,并通过 softmax 归一化为概率分布。值得注意的是,该预测层是一个具有 L2 归一化输入、L2 归一化权重、无偏置和温度缩放的多项逻辑回归分类器。
对于零样本评估,我们在文本编码器计算出Embedding将其缓存,并在所有后续预测中复用。
3.1.3、INITIAL COMPARISON TO VISUAL N-GRAMS
在表 1 中,我们将 Visual N-Grams 与 CLIP 进行了比较。最佳 CLIP 模型尽管未使用该数据集的 128 万个人工标注训练样本,仍达到了原始 ResNet-50 的性能。此外,CLIP 模型的 top-5 准确率显著高于 top-1 准确率,该模型的 top-5 准确率达到 95%,与 Inception-V4(Szegedy et al., 2016)相当。在零样本设置下与强监督基线性能相当的能力表明,CLIP 向灵活实用的零样本计算机视觉分类器迈出了重要一步。

CLIP 在另外两个报告的数据集上也优于 Visual N-Grams。在 aYahoo 数据集上,CLIP 的错误数量减少了 95%;在 SUN 数据集上,CLIP 的准确率是 Visual N-Grams 的两倍多。为了进行更全面的分析和压力测试,我们在附录 A 中实现了一个更大的评估套件。总体而言,我们从 Visual N-Grams 报告的 3 个数据集扩展到包括超过 30 个数据集,并与 50 多个现有计算机视觉系统进行比较,以全面评估结果。
3.1.4、PROMPT ENGINEERING AND ENSEMBLING
一个常见问题是多义性。当仅向 CLIP 的文本编码器提供类别名称时,由于缺乏上下文,它无法区分词语的具体含义。例如,“boxer” 一词显然指犬种,但对于缺乏上下文的文本编码器来说,它也可能指 “拳击手”。
另一个问题是,在我们的预训练数据集中,与图像配对的文本通常不是单个词语,而是描述图像的完整句子。为解决这个问题,我们使用提示模板 “A photo of a {label}.” 帮助明确图像的内容。与 GPT-3 的 “提示工程” 讨论类似,我们也观察到通过为每个任务定制提示文本可以显著提高零样本性能。例如,同样面对“boxer”以此,我们可以使用 “A photo of a {label}, a type of pet.” 帮助明确图像的内容;
我们还尝试通过集成多个零样本分类器来提高性能。这些分类器通过使用不同的上下文提示生成,例如 “a photo of a big {label}” 和 “a photo of a small {label}”。我们观察到,通过多个生成的零样本分类器可以有效的提高性能,并在大多数数据集上使用该方法。在 ImageNet 上,我们集成了 80 个不同的上下文提示,这使性能比上述单个默认提示提高了 3.5%。在图 4 中,我们可视化了提示工程和集成如何改变一组 CLIP 模型与 Li 等人(2017)直接嵌入类别名称的无上下文基线方法的性能对比。

3.1.5、ANALYSIS OF ZERO-SHOT CLIP PERFORMANCE
如图5所示,在 27 个数据集中的 16 个上CLIP比ResNet-50表现更优。在 “通用” 物体分类数据集如 ImageNet、CIFAR10/100、STL10 和 PascalVOC2007 上,在所有情况下CLIP 相比 ResNet-50均略有优势。

我们发现 CLIP 在一些专业、复杂或抽象的任务上表现不佳,如卫星图像分类(EuroSAT 和 RESISC45)、淋巴结肿瘤检测(PatchCamelyon)、合成场景中的物体计数(CLEVRCounts)、自动驾驶相关任务如德国交通标志识别(GTSRB)、识别最近车辆的距离(KITTI Distance)。
在图 6 中,我们可视化了CLIP Few Shot的能力。虽然直观上零样本性能低于单样本性能,但我们发现零样本 CLIP 与 4 样本的性能相当。

3.2、表示学习
研究模型的表示学习能的方法有很多。在模型提取的表示上拟合线性分类器并衡量其在各类数据集上的性能是一种常见方法。另一种方法是衡量模型端到端微调的性能,这种方法灵活性更高,性能更高。我们选择第一种方式。
7、局限性
CLIP 仍存在许多局限性。尽管在各章节的分析中已讨论了其中一些,我们在此总结并归纳如下:
- 特定任务的性能不足:3.1 节分析发现,CLIP 的zero shot在几类任务上仍较弱。而且,它也难以处理更抽象和系统化的任务,如计算图像中的物体数量。最后,对于预训练数据集中可能未包含的新任务(如分类照片中最近车辆的距离),CLIP 的性能接近随机。我们确信,仍有许多任务的zero shot性能接近随机水平。
- 分布外泛化能力有限:CLIP 并未根本上解决深度学习模型泛化问题,而是试图通过在庞大且多样的数据集上扩展数据的有效分布范围。
- 数据效率问题:CLIP 未解决深度学习数据效率低下的问题,如果将 CLIP 训练中见过的每个图像以每秒 1 张的速度播放,遍历 32 个训练 epoch 中见过的 128 亿张图像需要 405 年。鉴于自监督(Henaff, 2020; Chen et al., 2020c)和自训练(Lee; Xie et al., 2020)方法已证明可提高标准监督学习的数据效率,将其与 CLIP 结合是有前途的方向。