【CLIP】多模态预训练模型CLIP论文详解

CLIP

Paper:Learning Transferable Visual Models From Natural Language Supervision

Affiliation: OpenAI

Publication:ICML-2021

Code: https://github.com/OpenAI/CLIP

1 前言

CLIP( Contrastive Language–Image Pre-training)基于对比学习的语言-图像预训练)建立在零样本迁移(zero-shot transfer)、自然语言监督学习( natural language supervision,) 和多模态学习方面的大量工作之上。
CLIP是一个预训练模型,训练好的模型能实现,输入一段文本(或者一张图像),输出文本(图像)的向量表示。CLIP和BERT、GPT、ViT的区别在于,CLIP是多模态的,包含图像处理以及文本处理两个方面内容,而BERT、GPT是单文本模态的,ViT是单图像模态的。

CLIP惊艳之处在于架构非常简洁且效果好到难以置信,在zero-shot文本-图像检索,zero-shot图像分类,open-domain 检测分割等任务上均有非常惊艳的表现。

1.1 出现的动机

原始文本中预训练模型,在 NLP 领域中产生了革命性的成功。但是在 CV 等其它领域,一般的做法还是在 ImageNet 这种数据集上去训练一个模型,这样会使训练好的模型有诸多限制。那么 NLP 里的这套框架是否能用在 CV 里呢?

1.2 相关工作

CLIP 与 Learning Visual N-Grams from Web Data (2017年)的工作比较相似,都做了 zero-shot 的迁移学习,但当时 Transformer 还未提出,也没有大规模的且质量较好的数据集,因此17年的这篇论文的效果并不是很好。有了 Transformer、对比学习、”完形填空“ 等强大的自监督训练方式后,也有一些工作尝试把图片和文本结合起来,去学得更好的特征,如 VirTex,ICMLM,ConVIRT,这些工作与 CLIP 很相似,但也有所区别,VirTex使用自回归的预测方式做模型的预训练;ICMLM使用 ”完形填空“ 的方法做预训练;ConVIRT 与 CLIP 很相似,但只在医学影像上做了实验。这三种方法都没有在模型或数据集上使用很大的规模。

2 方法

CLIP 方法的核心就是利用自然语言的监督信号来训练一个比较好的视觉模型

思路:为什么要用自然语言的监督信号来训练视觉模型?

  • **不需要再去标注这些数据了。**像 ImageNet 需要先定好 1000 个类,而这 1000 各类也需要之前筛选选好,根据这些类去下载图片,再清理数据集,然后标注,这个过程比较复杂。如果只需要下载 图片-文本 对,别的标注都不需要做,那么数据的规模很容易就变大,而且现在的监督信号是一个文本,而不是这种 N 选 1 的标签,模型的输入输出自由度就大了很多。
  • 因为训练时把图片和文本绑定到一起,那么训练的特征就不再仅是一个视觉特征了,而是一个多模态的特征,也就很容易去做 zero-shot 的迁移学习。如果只是做单模态的自监督学习,无论是单模态的对比学习(如MOCO),还是单模态的掩码学习(如MAE),都只能学到视觉特征,而无法与自然语言联系到一起,这样还是很难做 zero-shot 迁移。

多模态预训练的监督学习任务包括:跨模态掩码,跨模态匹配,条件文本生成(Captioning)

跨模态掩码又包括语言掩码建模,视觉掩码建模

跨模态匹配又包括图像文本匹配,图像文本对比学习(CLIP使用)

2.1 模型整体结构

【CLIP】多模态预训练模型CLIP论文详解_第1张图片

2.2 Contrastive pre-training
  • 模型的输入是若干个 图像-文本 对。

  • 图像部分:图像通过一个 Image Encoder 得到一些特征,这个 encoder 既可以是 ResNet,也可以是 Vision Transformer。假设每个 training batch 都有 N 个 图像-文本 对,那么就会得到 N 个图像的特征

    (如图 I 1 , I 2 , , , , I N I_1,I_2,,,,I_N I1,I2,,,,IN)。

    【CLIP】多模态预训练模型CLIP论文详解_第2张图片

文本部分:文本通过一个 Text Encoder 得到一些文本的特征。同样假设每个 training batch 都有 N 个 图像-文本 对,那么就会得到N 个文本的特征(如图 T 1 , T 2 , , , T N ) 。 T_1,T_2,,,T_N)。 T1,T2,,,TN)

【CLIP】多模态预训练模型CLIP论文详解_第3张图片

CLIP 就是在以上这些特征上去做对比学习,需要正样本和负样本的定义,在这里配对的 图像-文本对就是正样本(即下图中对角线(蓝色)部分, I 1 − T 1 , I 2 − T 2 , , , , I N − T N I_1-T_1,I_2-T_2,,,,I_N-T_N I1T1,I2T2,,,,INTN),配对的图像和文本所描述的是同一个东西,矩阵中剩下的所有不是对角线上的元素(图中白色部分)就是负样本。有了正、负样本后,模型就可以通过对比学习的方式去训练,不需要任何手工的标注。OpenAI专门去收集了一个数据集WIT(WebImageText),其中有4亿个图像-文本 对,且数据清理的比较好,质量比较高,这也是CLIP如此强大的主要原因之一。

【CLIP】多模态预训练模型CLIP论文详解_第4张图片

2.3 Create dataset classifier from label text

CLIP 经过预训练后只能得到视觉上和文本上的特征,并没有在任何分类的任务上去做继续的训练或微调,所以它没有分类头,那么 CLIP 是如何做推理的呢?

【CLIP】多模态预训练模型CLIP论文详解_第5张图片

作者提出 prompt template:以 ImageNet 为例,CLIP 先把 ImageNet 这1000个类(如图中"plane", “car”, “dog”, …, “brid”)变成一个句子,也就是将这些类别去替代 “A photo of a {object}” 中的 “{object}” ,以 “plane” 类为例,它就变成"A photo of a plane",那么 ImageNet 里的1000个类别就都在这里生成了1000个句子,然后通过先前预训练好的 Text Encoder 就会得到1000个文本的特征。

其实如果直接用单词(“plane”, “car”, “dog”, …, “brid”)直接去抽取文本特征也是可以的,但是因为在模型预训练时,与图像对应的都是句子,如果在推理的时候,把所有的文本都变成了单词,那这样就跟训练时看到的文本不太一样了,所以效果就会有所下降。此外,在推理时如何将单词变成句子也是有讲究的,作者也提出了 prompt engineering 和 prompt ensemble,而且不需要重新训练模型。

2.4 Use for zero-shot prediction

【CLIP】多模态预训练模型CLIP论文详解_第6张图片

在推理时,无论来了任何一张图片,只要把这张图片扔给 Image Encoder,得到图像特征(绿色框, I 1 I_1 I1)后,就拿这个图片特征去跟所有的文本特征(紫色框, T 1 , T 2 , , , T N T_1,T_2,,,T_N T1,T2,,,TN)去做 cosine similarity(余弦相似度)计算相似度( I 1 − T 1 , I 1 − T 2 , , , I 1 − T N I_1-T_1,I_1-T_2,,,I_1-T_N I1T1,I1T2,,,I1TN),来看这张图片与哪个文本最相似,就把这个文本特征所对应的句子挑出来,从而完成这个分类任务。

在实际应用中,这个类别的标签也是可以改的,不必非得是 ImageNet 中的1000个类,可以换成任何的单词;这个图片也不需要是 ImageNet 的图片,也可以是任何的图片,依旧可以通过算相似度来判断这图中含有哪些物体。即使这个类别标签是没有经过训练的,只要图片中有某个物体也是有很大概率判断出来的,这就是 zero-shot。但如果像之前的那些方法,严格按照1000个类去训练分类头,那么模型就只能判断出这1000个类,这1000个类之外的所有内容都将判断不出来。

CLIP 彻底摆脱了 categorical label 的限制,无论在训练时,还是在推理时,都不需要有这么一个提前定好的标签列表,任意给出一张图片,都可以通过给模型不同的文本句子,从而知道这张图片里有没有我想要的物体。

【CLIP】多模态预训练模型CLIP论文详解_第7张图片

CLIP 把视觉的语义和文字的语义联系到了一起,学到的特征语义性非常强,迁移的效果也非常好。如图左侧部分是在 ImageNet 上训练好的 ResNet101,右侧是 CLIP 训练出的 ViT-L,在 ImageNet 上 ResNet 和 CLIP 效果相同,但在 ImageNetV2、ImageNet-R、ObjectNet、ImageNet Sketch、ImageNet-A上,ResNet 的性能明显就不行了,迁移的效果惨目忍睹,但对于 CLIP 来说,它的效果始终都非常好。这也说明了 CLIP 因为和自然语言处理的结合,导致 CLIP 学出来的视觉特征和我们用语言所描述的某个物体产生了强烈的联系

3 预训练方法

3.1 预训练方法选择

首先作者尝试图像这边使用卷积神经网络,然后文本方面用 Transformer,都是从头开始训练的,任务就是给定一张图片,要去预测这张图片所对应的文本,即caption,属于条件文本生成

之后采用了对比学习
  如果给定一张图片,然后去预测它对应的文本的话,需要逐字逐句地去预测这个文本,那么这个任务就太难了,因为对于一张图片来说,可以有很多不同的描述,文本之间的差距将是非常巨大的。如果用这种预测型的任务去预训练模型的话,它就会有太多的可能性了,那么这个模型训练的就非常慢。
  作者发现如果把训练任务由预测性任务变成对比的任务,也就是说只需要判断这个图片和这个文本是不是配对的,那么这个任务就简单了很多,约束一下就放宽了很多。在 Figure 2中仅仅把预测型的目标函数换成对比型的目标函数,训练效率一下就提高了4倍。

【CLIP】多模态预训练模型CLIP论文详解_第8张图片

图中蓝线是 OpenAI的 gpt 的模型方法,基于Transformer做预测型的任务,中间橘黄色的线指的是一种 bag of words 的方式,就是不需要逐字逐句的预测文本,文本已经全局化的抽成了一些特征,所以相应的约束被放宽了。约束放宽以后,训练效率立即提高了三倍,如果进一步放宽约束,不再去预测单词,只用对比学习的方式判断是不是图片文本对,如图中绿线,训练效率又进一步的提高了四倍。

之所出现这个差异,这不难理解,训练数据所包含的文本-图像对是从互联网收集来的,它们存在一定的噪音,就是说文本和图像可能并不完全匹配,这个时候适当的降低训练目标,反而能取得更好的收敛。而从任务难度来看:Transformer Language Model > Bag of Words Prediction > Bag of Words Contrastive (CLIP)。由于训练数据量和模型计算量较大,训练效率成为一个至关重要的因素。这就是作者最终选择对比学习的方法来训练的原因。

【CLIP】多模态预训练模型CLIP论文详解_第9张图片

上面是CLIP实现的核心代码,具体步骤如下:

  • 图像的输入I[n,h,w,c] ,文本的输入T[n,l],其中n就是 batch size,l 是序列长度。
  • 图像和文本的输入分别通过 Image Encoder 和 Text Encoder 得到图像和文本的特征 I f , T f I_f,T_f If,Tf,其中 Image Encoder 可以是 ResNet 或 Vision Transformer,Text Encoder 可以是 CBOW 或 Text Transformer。
  • 在得到 I f I_f If T f T_f Tf后,这里还有一个映射层 W i , W t W_i, W_t Wi,Wt,映射层主要就是学习如何从单模态变到多模态,然后再做 L2 归一化,就得到了用来对比学习的特征 I e , T e I_e,T_e Ie,Te
  • 有了n个图像的特征和n 个文本的特征之后,计算 cosine similarity,得到的相似度用来做分类的logits。
  • logits 和 ground truth 的labels 计算交叉熵损失, l o s s i , l o s s t loss_i,loss_t lossi,losst分别是 Image 和 Text 的 loss,最后求平均就得到了loss.

因为使用的数据集太大了,模型不太会有过拟合(over-fitting)的问题,所以他们的实现就比之前的工作要简单很多。同时也因为数据集很大,也不需要做太多的数据增强,作者唯一使用的数据增强就是随机裁剪。

**在训练 CLIP 时,Image Encoder 和 Text Encoder 都不需要提前进行预训练的。最后做投射时,并没有用非线性的投射层(non-linear projection),而是使用线性的投射层(linear projection)。**对于以往的对比学习(如SimCLR,MOCO)用非线性的投射层会比用线性的投射层带来将近10个点的性能提升,但作者说在多模态的预训练过程中线性与非线性差别不大,他们认为非线性的投射层应该只是用来适配纯图片的单模态学习。

因为 CLIP 模型太大了,数据集也太大了,训练起来太耗时,所以不太好做调参的工作,所以在算对比学习的目标函数时,将 temperature 设置为可学习的 log-parametized 乘法标量(以往的对比学习中 temperature 是个非常重要的超参数,稍微调整就会使最后的性能发生很大的改变),temperature 在模型训练时被优化了,而不需要当成一个超参数再去调参。

Temperature 是一个超参数,可用于控制生成语言模型中生成文本的随机性和创造性。 它用于调整模型的softmax输出层中预测词的概率。 温度参数定义为在应用 softmax 函数之前用于调整 logits 的比例因子的倒数。

当Temperature 设置为较低的值时,预测词的概率会变尖锐,这意味着选择最有可能的词的概率更高。这会产生更保守和可预测的文本,因为模型不太可能生成意想不到或不寻常的词。另一方面,当Temperature 设置为较高值时,预测词的概率被拉平,这意味着所有词被选择的可能性更大。这会产生更有创意和多样化的文本,因为模型更有可能生成不寻常或意想不到的词。

温度参数通常设置为 0.1 到 1.0 之间的值,具体取决于生成文本中所需的随机性和创造性水平。温度值为 1.0 对应于标准 softmax 函数,其中预测词的概率未按比例缩放。

3.2 模型的选择与缩放

在视觉方面,模型既可以选择 ResNet,也可以是 ViT,文本上基本就是 Transformer,模型的选择都是很常规的,只有很小的改动,但这些改动都是为了训练的更高效、性能更好。

3.3 训练

在视觉方面,作者一共训练了 8 个模型,5 个 ResNets 和 3 个 Vision Transformers:

  • 对于 ResNets,作者训练一个Resnet50 、一个ResNet101,然后再训练三个Resnet50:它们根据EfficientNet的方式,把模型里的 channel 宽度、模型深度和模型大小做了调整,得到了三个 ResNet 的变体,即RN50x4、RN50x16 和 RN50x64,计算量分别是 ResNet 的 4、16、64 倍。
  • 对于 Vision Transformers,作者尝试了 ViT-B/32,ViT-B/16 和 ViT-L/14(其中 32、16、14都是 patch 的大小)。

ViT-H,ViT-L和ViT-B是指不同规模和复杂度的Vision Transformer模型变体。

一种为

huge,large,base

一种为

ViT-H(High resolution):ViT-H是Vision Transformer模型中的高分辨率变体。它通常适用于处理高分辨率图像或更具挑战性的视觉任务。由于处理高分辨率图像可能需要更多的计算资源和内存,因此ViT-H模型可能更庞大和复杂。
ViT-L(Low resolution):ViT-L是Vision Transformer模型中的低分辨率变体。它通常用于处理低分辨率图像或资源受限的环境。ViT-L模型可能比ViT-H模型更小、更轻量级,适合在资源受限的设备或场景中部署。
ViT-B(Base resolution):ViT-B是Vision Transformer模型中的基准分辨率变体。它可以被视为ViT模型的中间规模。ViT-B通常是指在资源充足但不需要处理过高或过低分辨率图像时使用的模型。
需要注意的是,具体的ViT-H、ViT-L和ViT-B模型的规模和特征可以因不同的研究论文、实现和应用而有所不同。这些命名约定通常是为了区分不同规模和复杂度的模型变体,并在不同的视觉任务和计算资源约束下选择合适的模型。

注意此处VIT-L表示VIT-large是形容规模的

对于所有的模型,都训练 32 epochs,且使用 Adam优化器。对于所有超参数,作者简单的做了一些 Grid Search,Random Search 和手动调整,为了调参快一些,都是基于其中最小的 ResNet50 去做的且只训练 1 epoch,对于更大的模型作者就没有进行调参了。

训练时作者使用的 batch size 为 32768,很显然模型训练是在很多机器上起做分布式训练。同时也用到了混精度训练,不仅能加速训练,而且能省内存。此外作者也做了很多其他省内存的工作。

对于最大的 ResNet 来说,即上文中的RN50x64, 在 592 个 V100 的GPU上训练了18天;而对于最大的 ViT 来说,在 256 个 V100 GPU 上训练只花了 12 天。**证实了训练一个 ViT 是要比训练一个 ResNet 更高效的。因为 ViT-L/14 的效果最好,作者又拿与训练好的 ViT-L/14 再在数据集上 fine-tune 了 1 epoch,而且用了更大的图片(336×336),这种在更大尺寸上 fine-tune 从而获得性能提升的思路来自于 Fixing the train-test resolution discrepancy,最后这个模型就称为 ViT-L/14@336px。**如无特殊指明,本文中所有 “CLIP” 结果都使用了我们发现效果最好的这个模型(ViT-L/14@336px)。

4 实验

4.1 Zero-shot 迁移

4.1.1 与Visual N-grams 对比

【CLIP】多模态预训练模型CLIP论文详解_第10张图片

Visual N-grams 首次以上述方式研究了 zero-shot 向现有图像分类数据集的迁移。如 Table1 所示,作者做了与之前最相似的工作 Visual N-grams 的对比,Visual N-grams 在 ImageNet 的效果只有 11.5% 的准确率,而 CLIP 能达到 76.2%,CLIP 在完全没有用任何一张那128万张训练图片的情况下,直接 zero-shot 迁移就与原始的 ResNet50 打成平手。

4.1.2 Prompt Engineering and Ensembling

prompt 主要是在做 fine-tune 或做推理时的一种方法,而不是在预训练阶段,所以不需要那么多的计算资源,并且效果也很好。prompt 指的是提示,即文本的引导作用。

为什么需要做 Prompt Engineering and Prompt Ensembling?

  • polysemy(一词多义):如果在做文本和图片匹配的时候,每次只用标签对应的那 一个单词 去做文本上的特征抽取,那么很容易遇到这种问题。例如在 ImageNet 中,同时包含两个类,一类是 “construction crane”,一类是 “crane”,在相应的语境下这两个 “crane” 的意义是不一样的,在建筑工地的环境下指的是“起重机”,作为动物又指的是“鹤”,这时就有歧义性。当然别的数据集也有这种问题,如 Oxford-IIIT Pet,有一类叫 boxer,这里指的是狗的一种类别,但对于文本编码器来说它就可能翻译成“拳击手”,那这样提取特征就是不对的。总之,如果只是单独一个单词去做 prompt,那么很容易出现歧义性的问题。
  • **做预训练时,匹配的文本一般都是一个句子,很少是一个单词。**如果推理时传进来的是一个单词的话,很容易出现 distribution gap,提取的特征可能不是很好。

distribution gap 是指不同领域,语言或者数据集之间的模型性能差异。也就是说,同一种模型在不同数据集或应用场景下表现出不同性能。这种现象可能是因为训练数据的不平衡,数据集之间的差距,模型过拟合等原因所致,解决分配差距需要设计更加鲁棒的模型或者更加均衡的数据集。

基于以上两种问题作者提出了 prompt template(提示模板),“A photo of a { label }”。首先所有的标签都变成了一个句子,就不容易出现 distribution gap。而且 label 也一般都是名词,也能减少歧义性的问题。使用 prompt template 后准确率提升了 1.3%。

Prompt Engineering 不只给出这么一个提示模板,作者发现如果提前知道一些信息,这样对 zero-shot 的推理是很有帮助的。假如现在做的事 Oxford-IIIT Pet 这个数据集,这里面的类别一定是宠物,那么提示模板可以变为 “A photo of a { label }, a type of pet.”,把解空间缩小了很多,很容易得到正确的答案。当对于 OCR(文字识别)数据集来说,如果在想找的文本上添加双引号,那么模型也是更容易找到答案。

Prompt Ensembling:使用多个提示模版,做多次推理,最后再把结果结合起来,一般都会取得更好的结果。在源码 CLIP/notebooks/Prompt_Engineering_for_ImageNet.ipynb 文件中,这里提供了 80 种提示模板,以便适用于不同的图片。

【CLIP】多模态预训练模型CLIP论文详解_第11张图片

4.1.3 zero-shot CLIP 性能分析

作者在 27 个数据集上衡量了 CLIP 做 zero-shot 迁移的效果,如下图 ,比较的双方分别是 做 zero-shot 的 CLIP 和 在 ResNet50 上做 linear probe(linear probe:把预训练好的模型中的参数冻结,只从里面去提取特征,然后只训练最后一层即 FC 分类头层)。这个 ResNet 是在 ImageNet 有监督训练好的模型,从中去抽特征,然后在下游任务中去添加新的分类头,在新的分类头上做 linear probe 的微调。

【CLIP】多模态预训练模型CLIP论文详解_第12张图片

图中绿色部分就是 CLIP 优于 ResNet50 的,蓝色部分就是劣于 ResNet50 的。zero-shot CLIP 在 16 个数据集上都取得不错的效果,这种普通的对物体进行分类的数据集来说 CLIP 的表现都比较好。但一些难的数据集,如 DTD(对纹理进行分类),CLEVRCounts(对图片中物体计数),对于 CLIP 就很难,而且很抽象,先前训练时也没有这种相关标签,所以 CLIP 在这些数据集上表现得不好。对于这种特别难的任务如果只做 zero-shot 不太合理,更适合去做 few-shot 的迁移,对于这种需要特定领域知识的任务(如肿瘤分类等)即是对于人类来说没有先验知识也是很难得

【CLIP】多模态预训练模型CLIP论文详解_第13张图片

作者对 zero-shot CLIP,few-shot CLIP 和之前 few-shot 的一些方法(预训练好冻结参数,然后做 linear probe,在下游任务数据集上进行训练)做了一些比较。这里 CLIP 的 few-shot 是将 Image Encoder 的参数冻结,然后做 linear probe。

上图横坐标是数据集中每一个类别里用了多少训练样本,0 的话就是 zero-shot 了,其他方法因为没有和自然语言的结合无法做 zero-shot,最低也得从 one-shot 开始。

纵坐标是平均准确度,是在 20 个数据集上取的平均(来源于 Figure 5 中的27 个数据集,其中有 7 个数据集的部分类别训练样本不足 16 个,无法满足横坐标要求,因此舍弃了)。

BiT(Big Transfer)主要为迁移学习量身定做,是 few-shot 迁移学习表现最好的工作之一。而 zero-shot CLIP 直接就和最好的 BiT 持平。如图紫色曲线,当每个类别仅仅用1、2、4个训练样本时还不如 zero-shot 的效果,这也证明了用文本来引导多模态学习是多么的强大。随着训练样本的增多, few-shot CLIP 的效果是最好的,不仅超越了之前的方法,也超越了 zero-shot CLIP。

4.2特征学习

这里作者讨论了**下游任务用全部数据,CLIP 的效果会如何。**特征学习一般都是先预训练一个模型,然后在下游任务上用全部的数据做微调。这里在下游任务上用全部数据就可以和之前的特征学习方法做公平对比了。

衡量模型的性能最常见的两种方式就是通过 linear probe 或 fine-tune 后衡量其在各种数据集上的性能。linear probe 就是把预训练好的模型参数冻结,然后在上面训练一个分类头;fine-tune 就是把整个网络参数都放开,直接去做 end-to-end 的学习。fine-tune 一般是更灵活的,而且在下游数据集比较大时,fine-tune往往比 linear probe 的效果要好很多。

本文作者选用了 linear probe,因为 CLIP 的工作就是用来研究这种跟数据集无关的预训练方式,如果下游数据集足够大,整个网络都放开再在数据集上做 fine-tune 的话,就无法分别预训练的模型到底好不好了(有可能预训练的模型并不好,但是在 fine-tune 的过程中经过不断的优化,导致最后的效果也很好)。而 linear probe 这种用线性分类头的方式,就不太灵活,整个网络大部分都是冻住的,只有最后一层 FC 层是可以训练的,可学习的空间比较小,如果预训练的模型不太好的话,即使在下游任务上训练很久,也很难优化到特别好的结果,所以更能反映出预训练模型的好坏。此外,作者选用 linear probe 的另一个原因就是不怎么需要调参,CLIP 调参的话太耗费资源了,如果做 fine-tune 就有太多可做的调参和设计方案了。

【CLIP】多模态预训练模型CLIP论文详解_第14张图片

如上图右图所示,是在先前提到的那 27 个数据集进行比较,CLIP(实心、空心红色五角星)比所有的其他模型都要好,不光是上文中讲过的 zero-shot 和 few-shot,现在用全部的数据去做训练时 CLIP 依然比其他模型强得多。

如上图左图所示,之前有工作提出了这 12 个数据集的集合,很多人都是在这些数据集上做的比较,CLIP-ViT 的效果是很好的,但是 CLIP-ResNet 就要比别的方法差了。但是这 12 个数据集的集合和 ImageNet 的关系很大,如果模型之前在 ImageNet 做过有监督的预训练,那么效果肯定是更好的,因此 CLIP-ResNet 并没有那么好也是可以理解的。

【CLIP】多模态预训练模型CLIP论文详解_第15张图片

随后作者又将 CLIP 与 之前在 ImageNet 上表现最好的模型 EfficientNet L2 NS(最大的 EfficientNet 并使用为标签的方式训练)进行对比。在 27 个数据集中,CLIP 在其中 21 个数据集都超过了 EfficientNet,而且很多数据集都是大比分超过,少部分数据集也仅仅是比 EfficientNet 稍低一点点。

5 数据重叠分析

为了分析是否是因为本文使用的数据集与其他的数据集之间有重叠而导致模型的性能比较好,作者在这部分做了一些去重的实验,最后的结论还是 CLIP 本身的泛化性能比较好。

6 Limitations

(1) CLIP 在很多数据集上平均来看都能和普通的 baseline 模型(即在 ImageNet 训练的 ResNet50)打成平手,但是在大多数数据集上,ResNet50 并不是 SOTA,与最好的模型比还是有所差距的,CLIP 很强,但又不是特别强。实验表明,如果加大数据集,也加大模型的话,CLIP 的性能还能继续提高,但如果想把各个数据集上的 SOTA 的差距弥补上的话,作者预估还需要在现在训练 CLIP 的计算量的基础上的 1000 倍,这个硬件条件很难满足。如果想要 CLIP 在各个数据集上都达到 SOTA 的效果,必须要有新的方法在计算和数据的效率上有进一步的提高。

(2) zero-shot CLIP 在某些数据集上表现也并不好,在一些细分类任务上,CLIP 的性能低于 ResNet50。同时 CLIP 也无法处理抽象的概念,也无法做一些更难的任务(如统计某个物体的个数)。作者认为还有很多很多任务,CLIP 的 zero-shot 表现接近于瞎猜。

(3) CLIP 虽然泛化能力强,在许多自然图像上还是很稳健的,但是**如果在做推理时,这个数据与训练的数据差别非常大,即 out-of-distribution,那么 CLIP 的泛化能力也很差。**比如,CLIP 在 MNIST 的手写数字上只达到88%的准确率,一个简单的逻辑回归的 baseline 都能超过 zero-shot CLIP。 语义检索和近重复最近邻检索都验证了在我们的预训练数据集中几乎没有与MNIST数字相似的图像。 这表明CLIP在解决深度学习模型的脆弱泛化这一潜在问题上做得很少。 相反,CLIP 试图回避这个问题,并希望通过在如此庞大和多样的数据集上进行训练,使所有数据都能有效地分布在分布中。

(4) 虽然 CLIP 可以做 zero-shot 的分类任务,但它还是在你给定的这些类别中去做选择。这是一个很大的限制,与一个真正灵活的方法,如 image captioning,直接生成图像的标题,这样的话一切都是模型在处理。 不幸的是,作者发现 image captioning 的 baseline 的计算效率比 CLIP 低得多。一个值得尝试的简单想法是将对比目标函数和生成目标函数联合训练,希望将 CLIP 的高效性和 caption 模型的灵活性结合起来。

(5) CLIP 对数据的利用还不是很高效,如果能够减少数据用量是极好的。将CLIP与自监督(Data-Efficient Image Recognition with Contrastive Predictive Coding;Big Self-Supervised Models are Strong Semi-Supervised Learners)和自训练(Pseudo-Label : The Simple and Efficient Semi-Supervised Learning Method for Deep Neural Network;Self-training with Noisy Student improves ImageNet classification)方法相结合是一个有希望的方向,因为它们证明了比标准监督学习更能提高数据效率。

(6) 在研发 CLIP 的过程中为了做公平的比较,并得到一些回馈,往往是在整个测试的数据集上做测试,尝试了很多变体,调整了很多超参,才定下了这套网络结构和超参数。而在研发中,每次都是用 ImageNet 做指导,这已经无形之中带入了偏见,且不是真正的 zero-shot 的情况,此外也是不断用那 27 个数据集做测试。创建一个新的任务基准,明确用于评估广泛的 zero-shot 迁移能力,而不是重复使用现有的有监督的数据集,将有助于解决这些问题。

(7) 因为数据集都是从网上爬的,这些图片-文本对儿基本是没有经过清洗的,所以最后训练出的 CLIP 就很可能带有社会上的偏见,比如性别、肤色、宗教等等。

(8) 虽然我们一直强调,通过自然语言引导图像分类器是一种灵活和通用的接口,但它有自己的局限性。 许多复杂的任务和视觉概念可能很难仅仅通过文本来指导,即使用语言也无法描述。不可否认,实际的训练示例是有用的,但 CLIP 并没有直接优化 few-shot 的性能。 在作者的工作中,我们回到在CLIP特征上拟合线性分类器。 当从 zero-shot 转换到设置 few-shot 时,当 one-shot、two-shot、four-shot 时反而不如 zero-shot,不提供训练样本时反而比提供少量训练样本时查了,这与人类的表现明显不同,人类的表现显示了从 zero-shot 到 one-shot 大幅增加。今后需要开展工作,让 CLIP 既在 zero-shot 表现很好,也能在 few-shot 表现很好。

7 结论

作者的研究动机就是在 NLP 领域利用大规模数据去预训练模型,而且用这种跟下游任务无关的训练方式,NLP 那边取得了非常革命性的成功,比如 GPT-3。作者希望把 NLP 中的这种成功应用到其他领域,如视觉领域。作者发现在视觉中用了这一套思路之后确实效果也不错,并讨论了这一研究路线的社会影响力。在预训练时 CLIP 使用了对比学习,利用文本的提示去做 zero-shot 迁移学习。在大规模数据集和大模型的双向加持下,CLIP 的性能可以与特定任务的有监督训练出来的模型竞争,同时也有很大的改进空间。

8 感受

利用自然语言监督的视觉信号,解决固定标签集训练的局限性

最大的贡献:打破了固定种类标签的范式(无论在收集数据集的时候,还是在训练模型的时候,不需要像ImageNet那样做1000类,直接搜集图像文本的配对,用无监督的方式去预测相似性或者生成)

你可能感兴趣的:(多模态,计算机视觉,深度学习,人工智能,自然语言处理,图像处理,迁移学习)