CLIP OpenAI ICML2021
摘要
CLIP的方法非常的简单,但是效果非常好。
比如,clip的迁移学习能力是非常强的,它预训好的模型,能够在任意一个视觉分类的数据集上取得不错的效果。而且最重要的是CLIP是zero shot的,也就是说它完全没有在这些数据集上去做训练,就能得到不错的效果。
Clip在不使用ImageNet的训练集的情况下,也就是不使用128万张图片中任意一张训练的情况下,直接zero short做推理,就能获得和之前有监督训练好的res50相同的效果。
预训练
首先我们看一下CLIP的模型总览图。
CLIP利用了自然语言处理得到一个监督信号,去训练一个迁移效果很好的视觉模型,
首先,模型的输入是图片和文字的配对。图片通过一个图片的编码器,从而得到特征,这里的编码器可以是resnet,也可以是vision transformer。而对于文本,则通过一个文本编码器,得到文本特征。
我们假设每个training batch里都有n个图片文本对,那么就可以得到n个图片的特征,还有n个文本的特征,然后clip就在这些特征上去做对比学习。
对比学习需要正样本和负样本的定义,在这里配对的一个图片和文本就是一个正样本,因为它描述的是一个东西。所以特征矩阵里沿着这个对角线方向上的都是正样本,剩下的都是负样本。有了正负样本,我们就可以使用对比学习进行训练了。但是对于这种无监督的预训练方式,它是需要大量的数据的,因此,OpenAI专门收取了一个数据集,包含4亿个图片文本对,这也是CLIP为什么强大的原因之一。
推理
CLIP如何做zero shot的推理呢?因为clip经过用训练之后,它只能得到一些视觉上和文本上的特征,并没有在任何分类的任务上去做训练或者微调,所以说它是没有分类头的。这里作者提出了利用自然语言的一种方法,也就是prompt template。
什么是ptompt template?
如右图所示,假设在imageNet数据集上,CLIP就会先把imageNet里面的1000个类,比如飞机、汽车、狗,变成一个句子,也就是把单词填充到图中object的位置。相对应的,”plane“就变成了”A photo of a plane“。imageNet有1000个类,那么这就会生成1000个句子,然后这1000个句子通过之前预训练好的文本编码器,就会得到1000个文本特征。
为什么需要prompt template?
直接使用单词去抽取文本的特征也是可以的,但是由于在模型预训练的时候,图片每次看到的基本都是一个句子,如果在推理的时候,突然把文本变成了一个单词,那么就和训练时看到的文本不一样了,效果就会稍有下降。
那么在推理的时候,当我们得到一张图片,把图片扔进图片编码器得到图片特征,然后拿图片的特征去和所有的文本特征去做一个cosine similarity,然后再用一个softmax得到概率分布。最后这个图像的特征跟哪个文本特征最相似,我们就把这个文本特征所对应的那个句子挑出来,从而完成了分类的任务。
并且,因为CLIP zero shot的推理能力,我们输入的图片也可以不用是imageNet里的图片,类别也可以换成其他的单词,比如,输入一张三轮车的照片,然后在类别中也加上三轮车,那么很有可能这张图片就能正确的被分类成三轮车。但如果像之前那种严格按照1000类去训练的分类头来说,模型永远都不会判断出这张图片是三轮车,最多也就是把它判断成是车或者是自行车这种。
CLIP的特点
不论是在训练的时候,还是在推理的时候,CLIP都不需要有一个提前定好一个标签列表了,任意给一张照片,都可以通过给模型去喂这种不同的文本句子,从而知道这张图片里到底有没有我们感兴趣的物体。
结果
CLIP不光是能识别新的物体,由于它把视觉的语义和文字的语义联系到了一起,所以学到特征的语义性非常强,迁移的效果也就非常的好。剩下的几行比较了迁移学习能力,我们可以看到CLIP的效果比严格按照1000类分类头的resnet要好很多。可能时因为和NLP的结合,CLIP学到的视觉特征已经和用语言描述物体之间产生了强烈的联系,所以能够准确的完成迁移学习的任务,即使domain变化非常剧烈(如上图)。
基于CLIP的应用
StyleCLIP: 通过文字去引导图片变化。(CLIP + StyleGAN)
[2103.17249] StyleCLIP: Text-Driven Manipulation of StyleGAN Imagery (arxiv.org)
目标检测
传统的目标检测的方法去做预测的话,可能只能告诉你这些都是玩具,也就是这里的蓝色基础类,但是当利用了这种自然语言之后,就摆脱了基础类的这个限制,训练出来的模型就可以检测出这些新的类,也就是红色的这些类。