Learning Transferable Visual Models From Natural Language Supervision(CLIP)
Learning Transferable Visual Models From Natural Language Supervision(CLIP)
- 文章发布代码和预训练权重
🔗https://github.com/OpenAI/CLIP.
-
文章的理解参考了这篇几篇笔记文章
🔗神器CLIP:连接文本和图像,打造可迁移的视觉模型 - 知乎 (zhihu.com)
🔗CLIP论文笔记–《Learning Transferable Visual Models From Natural Language Supervision》_栗子酱15551的博客-CSDN博客 -
CLIP代码详解
🔗【CLIP系列Paper解读】CLIP: Learning Transferable Visual Models From Natural Language Supervision
⭕摘要(译)
最先进的计算机视觉系统被训练用来预测一组固定的预定目标类别。这种受限的监督形式限制了它们的通用性和可用性,因为需要额外的标记数据来指定任何其他视觉概念。直接从关于图像的原始文本中学习是一种有前途的替代方法,它利用了更广泛的监督来源。我们证明,在从互联网上收集的4亿(图像、文字)对数据集上,预测哪个标题与哪幅图像对应的简单预训练任务是一种高效且可扩展的从头学习SOTA(「state-of-the-art」)图像表示的方法。 预训练后,使用自然语言引用学习到的视觉概念(或描述新的),实现模型向下游任务的零样本迁移。
我们通过在30多个不同的现有计算机视觉数据集上进行测试,研究了该方法的性能,这些数据集涵盖了诸如OCR、视频中的行为识别、地理定位和许多类型的细粒度对象分类等任务。该模型非平凡地迁移到大多数任务中,并且往往与完全监督的基线竞争,而不需要任何数据集特定的训练。例如,我们在ImageNet零样本上匹配原始ResNet - 50的准确率,而不需要使用它所训练的128万个训练样本中的任何一个。我们在https://github.com/OpenAI/CLIP.上发布了我们的代码和预训练的模型权重。
⭕梳理
➡️论文试图解决什么问题?
计算机视觉领域,常见的迁移学习方式是在一个较大规模的数据集上进行预训练,然后在下游任务上用预训练的模型进行微调。预训练是有监督学习,需要大量数据标注,成本较高。对有监督学习在预训练数据集上采用有限类别的分类器,在新的数据集上需要定义新的数据集重新训练,有监督的方法模型迁移到下游任务时,依旧需要进行有监督微调,无法实现zero-shot。
与计算机视觉领域不同,自然语言能够通过它的概括性来表达和监督更广泛的一组视觉概念。NLP基于自回归或语言掩码的预训练方式相对成熟,预训练模型更容易zero-shot迁移到下游任务。
论文试图用互联网上的大量文本来作为监督信号训练视觉模型,前面这方面工作不算多(16年-Learning Visual Features from Large Weakly Supervised Data,17年-Learning Visual Features from Large Weakly Supervised Data),因为这些方法难以取得较高的性能。另一个方向是基于文本弱监督提升性能,如Google在JFT-300M数据集上通过自动化手段将web text划分为18291个类别,虽然存在一定的个噪声,但仍旧获得了不错的结果。
➡️这是否是一个新的问题?
不是。对于zero-shot任务,2017年的Visual N-Grams在ImageNet上进行了zero-shot测试,但是准确率11.5%极低。对于对比学习的训练方法,前期也已经有ConVIRT方法。 个人感觉CLIP的优秀不在于对某种方法的完全创新,而是构造了一个大规模的数据集WIT,然后在这之上进行训练,这包含了非常大的计算量,最终也得到了非常不错的效果。

➡️这篇论文到底有什么贡献?
不同于CV迁移学习的预训练然后微调,CLIP可以直接实现zero-shot的图像分类,不需要训练任何数据 ,就可以在下游任务上实现分类。
➡️这篇论文存在什么局限性?
- CLIP模型的训练需要较大规模的数据集及较大计算量。
- CLIP在自然分布漂移表现鲁棒,但无法解决域外泛化的问题,测试域外数据集表现较差,在细粒度分类任务等中表现较差。
- CLIP zero-shot性能与有监督ResNet 50相当,但未达到最优,作者预估达到最优CLIP要增加1000x的计算量…
⭕方法
CLIP全称 Contrastive Language Image Pre-training ,是一种基于对比文本图像的预训练方法 。CLIP学习的是一张图像和它对应的文字描述,期望能够学习图像-文本对的匹配关系。
CLIP包括一个Text encoder(text transformer)和Image encoder(CNN / vision transformer),分别用来提取文本特征和图像特征。对提取出的文本特征和图像特征进行对比学习,如图所示计算文本特征和图像特征的余弦相似度矩阵 ,在矩阵中共有N*N种配对方式,其中对角线上的文本-图像对是真正匹配的,CLIP模型的训练目标就是最大化对角线上的N个正样本的余弦相似度,同时最小化其他错误匹配的余弦相似度。

➡️损失函数
文章提供了上述部分伪代码,损失函数是一个对称的交叉熵损失,在余弦相似度矩阵上然后优化一个对称的交叉熵损失 ,训练强化模型正确匹配文本-图像对/图像-文本对的能力。
由于余弦相似度的范围为[-1,1],而交叉熵损失logits在值域上是没有上下限的(),所以需要对计算出的余弦相似度进行缩放(参照伪码中的),通过温度参数τ进行缩放,并通过softmax归一化为概率分布。这样可以更好的区分概率值。
1 | # image_encoder - ResNet or Vision Transformer |
➡️预训练方法
训练数据量和模型计算量都较大,所以训练效率非常重要。OpenAI最初类似于VirTex,联合训练了一个图像CNN和Text transformer,从头开始预测图像的标签caption。然而如图所示,把在ImageNet上的Zero-shot表现作为评估指标,这种训练方式的效率相比与直接预测bag of words低三倍。
这两种方法的共性就是,都试图预测每张图片所对应文本的确切单词,然而与一张图像共现的描述,评论和相关文本是非常多样的,所以这个任务相对而言也十分困难。
而如果采用对比学习的方法,预测整个文本与哪个图像配对,而非确切单词,参考[ConVIRT]([2010.00747] Contrastive Learning of Medical Visual Representations from Paired Images and Text (arxiv.org)),可以进一步提升训练效率至原先四倍。

➡️数据集与训练参数
视觉表征(visual representations)学习已有路线:
- 构建image和text的联系,比如利用已有的(image,text)pair数据集,从text中学习image的表征;
- 获取更多的数据(不要求高质量,也不要求full labeled)然后做弱监督预训练,就像谷歌使用的JFT-300M数据集进行预训练一样(在JFT数据集中,类别标签是有噪声的)。具体来说,JFT中一共有18291个类别,这能教模型的概念比ImageNet的1000类要多得多,但尽管已经有上万类了,其最后的分类器其实还是静态的、有限的,因为你最后还是得固定到18291个类别上进行分类,那么这样的类别限制还是限制了模型的zero-shot能力。
这两条路线其实都展现了相当的潜力,前者证明paired text-image可以用来训练视觉表征,后者证明扩充数据能极大提升性能,即使数据有noise。于是high-level上,作者考虑从网上爬取大量的(text,image)pair以扩充数据,同时这样的pairs是可以用来训练视觉表征的。
OpenAI构建了一个从互联网上各种公开来源收集的4亿(图像、文字)对的新数据集,称为WIT(WebImageText)。
对于图像编码器,OpenAI采用了两种不同架构,一种是 ResNet-50,另一种是 Vision Transformer (ViT) 。对于文本编码器,论文使用了一个63M参数的text transformer。

论文训练了一系列ResNet和3个Vision Transformer,每个模型训练32个eporch,使用解耦权重衰减正则化的AdamW优化器,训练过程中采用了较大的batch size(32768)。对于ViT - L / 14,论文还以更高的336像素分辨率预训练了一个额外的eporch,这个模型效果是最好的。
1 | ['RN50', |
➡️Zero-Shot CLIP性能对比
参照figure1 Zero-shot首先根据数据集中的label text创建分类器,通过image encoder 和 text encoder 计算图像特征和各个类别的文本分类label特征,计算余弦相似度并进行缩放,最后通过softmax归一化得到概率。
💽💽💽
论文比较了zero-shot CLIP和ResNet 50 linear Probe(在ImageNet上预训练,线性分类层进行微调)在测试的27个数据集中,CLIP在16个中表现得更好。
- 在一些细粒度,复杂或者抽象的数据集上,CLIP相对表现较差(卫星图像分类( EuroSAT和RESISC45)、淋巴结肿瘤检测( PatchCamelyon )、合成场景中的物体计数( CLEVRCounts )),与全监督的ResNet 50 差距较大。
- 在测量视频中动作识别的两个数据集上,Zero-shot CLIP显著优于ResNet 50。推测这是因为目前描述中存在很多动词,以及以动作为中心的句子导致的。
- 在STL10上,CLIP总体达到了99.3 %最优,超过其他有监督方法,推测是STL10每一类样本都较少,难以进行有监督迁移学习。
此外,如果测试数据集与训练数据集的分布差距较大,CLIP的表现也会较差(对CLIP来讲属于域外数据,eg. MNIST),CLIP依然没有解决域外泛化的问题。

💽💽💽
在少样本预测中,CLIP Zero-shot的表现持平4-shot,优于1-shot和2-shot。
- 4-shot后增加样本得分更高,这也说明对于一些比较难的数据集,还是有必要有一些训练样本的。
- 而1-shot和2-shot效果反而差于zero-shot,可能是因为单样本往往包含多种不同的视觉概念,单一样本不一定能够提取出图像的核心语义,过少的样本反而干扰了CLIP的理解能力。

💽💽💽
与标准ImageNet模型相比,零样本CLIP模型对分布偏移具有更强的鲁棒性。
图中(左)一个理想的鲁棒模型(虚线)在ImageNet分布和其他自然图像分布上表现的同样好。零样本CLIP模型将一般ImageNet训练的效果与理想效果的"稳健性差距"缩小了高达75 %。
图中(右)可视化了香蕉的分布偏移,在7个自然分布偏移数据集中的5个数据集中共享一个类。将最佳零样本CLIP模型ViT - L / 14 @ 336px与在ImageNet验证集上具有相同性能的模型ResNet - 101进行性能比较,CLIP的特征表达更加细致,更容易进行迁移学习,能够理解到更加丰富的信息,所以可以识别出素描的香蕉,而不是仅仅把香蕉和其他物品区分开。

💽💽💽
测试CLIP源码中notebook截图:
plot图像及其文本描述。

加载模型计算得到的其余弦相似度。

在cifar100 数据集上进行zero-shot测试。
