CLIP论文阅读【Learning Transferable Visual Models From Natural Language Supervision】


paper: http://proceedings.mlr.press/v139/radford21a/radford21a.pdf
code: https://github.com/OpenAI/CLIP
author: OpenAI


1. 前置知识

TODO:

  1. NLP中的prompt
  2. 对比学习及几个著名的工作

2. 动机(Motivation)

目前的计算机视觉模型都是在提前定义好类别的标签集合(数据集)中进行训练的,但是这些监督信号是有限制性的,就导致了限制了模型的泛化性和通用性,尤其是当模型面对新的类别的时候。因此作者提出了一种想法,通过语言信号来监督视觉模型,因为这样的数据是非常容易获取的。作者在互联网上爬了一个有4个亿的图像文本对数据集,来使用多模态的对比学习来训练模型,使用自然语言来引导视觉模型做物体的分类。实验结果证明,CLIP模型学到的特征是具有非常好的泛化性的,迁移效果非常好,能够在不使用任务一张ImageNet128万张训练集的情况下,能跟之前一个完全监督的ResNet的训练的模型打成平手

3. 引言 (Introduction)

直接从原始的文本数据中预训练一个模型,在过去几年的NLP领域中取得了革命性的成功,比如BERT、GPT、T5等。不论是使用自回归的方式,还是使用掩码语言建模的方式,它们的目标函数都是与下游任务无关的,他们的目的只是为了得到一个具有良好泛化性的特征(这也就是预训练模型任务的目的)。随着模型的变大、数据量的变多,预训练模型的能力也会稳健的提升。这样的方式是与任务无关的,预训练模型并不是在做一个具体的任务比如说是分类,模型的架构是与下游任务无关的,因此这样的模型用在下游的任务上是不需要再去改动去设计一个具体于任务或数据集的输出头了。其中NLP领域最耳熟能详的莫过于GPT-3模型,在大多数任务中,不需要数据或只需一点点数据进行微调,就可以和之前该任务中精心设计过的网络取得相等的结果。

在NLP领域的利用自监督信号训练的预训练模型中,大规模的没有标注的数据,反而是比高质量经过手工标注的数据好使的。但是在视觉领域中大家的做法还是在想ImageNet这样的高质量手工标注的数据集中预训练,这样就会使视觉模型具有很多的限制。那NLP的这套框架是否可以用到视觉领域中呢?在17年的时候其实就有一篇文章与CLIP的思路非常相似【1】,但是那时没有Transformer,没有对比学习、完形填空(掩码语言建模)以及大规模的数据集,它的结果并不是很好。此后也有一些工作使用自回归、掩码语言建模的方式做了一些工作,但是由于模型和数据都没有CLIP这么好,所以结果不亮眼。虽然目前虽然已经有人使用Transformer+自监督来对图像文本对进行尝试,但效果却不好,归根结底是由于数据规模的有限,甚至导致zero-shot的性能不如传统的机器学习,因此这方向探索的热情也就没那么高了。因此有些工作尝试从另一个方向来开展,就是使用更弱的一些监督信号来进行视觉模型的学习,比如有些工作尝试在Instgram上爬取带有hashtag的图像,hashtag其实就相当于文本信号(充当弱监督),这样就可以做一个很大的数据集。以及有人在JFT-300M这样的大数据集上进行训练,该数据集上的文本标注很粗糙,也算相当于一种弱监督。

其实之前这一系列工作的作者都知道使用有限的经过精心设计的标注数据是有很大的局限性的,也都想用这种无尽的原始文本数据。但是因为后一种方法现在效果很低,所以没办法,他们就走了这种实用主义的中间地带,用文本带来的弱监督信号去帮助有监督模型取得更好的效果。但是虽然后者虽然取得了很好的效果,思路也与CLIP很相似,但是这些工作也还是有局限的,他们这些数据也是经过精心设计的,类别也是从1000到18392个这样的有限类别,并不能真正做到随心所欲zero-shot,并且他们的工作最后都是使用Softmax做一个分类头,所以他们的工作都是固定的,从指定好的类别中选出一个。

其实不论是上面说的在大规模数据集中使用文本弱监督信号的方法,还是在有限数据集下借助文本监督信号来进行监督视觉模型学习表征的方法,区别并不是很大,关键其实就在规模上(模型+数据集)。上面的这些弱监督学习方法是在亿级规模的数据集上进行训练,训练了加速器年。最近的这些方法(VirTex,ICMLM, ConVIRT,思路其实与CLIP很相似)在有限数据集上进行图文对学习的方法,只是在几十万张图片上训练了几天,自然无法跟之前的那些方法相比。其实之前这些方法不行,并不是方法不行,而是因为规模不行,只要规模上去了,效果自然会非常好。因此CLIP这篇工作要做的就是,把规模做大作者首先做的是收集了一个4亿个图像文本对(与JFT-300M一个量级)数据集,然后在模型上使用了不同尺寸的基于ResNet、Transformer等的大模型,方法上其实就是ConVIRT方法的简化版。最好作者发现,模型的迁移效果与模型的量级成正相关。为了验证CLIP模型学习的有效性,而是先做了以下linear-probe测试,发现CLIP要比之前在ImageNet训练上的模型效果好且高效。并且在zero-shot上的效果,要比这个在ImageNet训练上的模型更加稳健。

4. 方法 (Method)

核心: 利用自然语言的监督信号,训练视觉模型。

作者说,这个想法其实并不是很新。。。只是之前的工作用语太混淆,有说无监督、自监督、弱监督等等,很不规范,并且规模也没有做大。其实之前的这些工作并没有很大的区别,都是想用文本的信号监督视觉模型的训练而已。所以在这篇文章中作者相当于总结规范一下用语,然后顺将规模做大

随着Transformer和自监督的方式在NLP领域中引起的革命, 现在NLP模型都是趋向于deep contextual representation learning,比如说BERT用的掩码语言建模等,并且在自监督的范式之下,NLP终于可以利用无尽的文本信号了,因此NLP那边现在训练的模型是又大又好,而且简单还泛化性能好。

利用自然语言的监督信号,训练视觉模型的好处:1)无需进行复杂的标注了,规模很容易可以做上来。并且监督信号是文本,而不是1-of-N这样的标签,监督信号的自由度变大了很多2)将文本-图片绑定到一块之后,学到的特征不再只是一个视觉特征,而是一个多模态的特征,这样联合在一起之后,就很容易去做zero-shot的迁移学习了。 如果只是做单模态的自监督学习的话,无论是单模态的对比学习,比如MOCO,还是单模态的掩码学习,比如MAE,都只能学到单模态的视觉特征,而无法和自然语言联系在一起,就还是很难做zero-shot这样的迁移。

但是要做这样的一个利用自然语言的监督信号,训练视觉模型的任务,是需要一个很大规模,且标注质量高的数据集。因此作者制作了一个包含4亿个图像文本对的数据集,叫WebImageText数据集。这个数据集要孕育了OpenAI的另一个工作,从文字说明生成图像,名叫DALL-E【2】。

作者解释,对于多模态预训练这样的任务,训练效率是决定训练效果的关键。因此CLIP选择了基于对比学习而非基于GPT。如果要从一个图片逐字逐句的预测一段文本的话,这样计算量太大,训练效率太低。但是如果把这个预测任务变成一个对比任务,就是只是输入一张图片,来预测是否与这个文本是否配对,那这样训练难度就会简单很多。前者是在原始信号空间做预测,后者是在表示空间做对比。将预测性的目标函数换成对比性的目标函数后,训练效率一下就提升了4倍。

在这里插入图片描述
方法示意图和方法伪代码如下:

对于图像和文本数据,首先经过各自的encoder之后得到了embedding,得到各自的特征之后一般会有一个归一化的操作,此外这里还有一个投射层,投射层的意义是用来学习从单模态变为多模态(可以看作空间映射的作用),也就是通过将原先单模态特征与其进行点乘,合并为多模态的特征,在经过归一化后,就得到了用于对比的两种多模态特征。有了对比的特征之后,接下来要做的就是要算一下它们的cosine similarities,也就是得到的这个logits。有了logits之后,就需要将它与ground truth做一个交叉熵目标函数,就计算得到了loss。因为CLIP的ground truth都在对角线上(匹配的是正样本,不匹配的是负样本),所以就用了np.arrange(n)这种形式创建ground truth,这一点与MOCO对比学习中计算loss的方式不一样,MOCO的ground truth都在第一位,所以ground truth都是0。在算loss的时候,是算两个loss,一个image的,一个是text的,然后两个加起来求平均,这个操作在对比学习中是非常常见的,从最开始的SimCLR,到BYOL,一直到最近的MOCO v3,DINO这些工作,全都是用的这种对称式的目标函数
在这里插入图片描述
在这里插入图片描述
一些训练的细节:
1)由于数据量大,过拟合风险非常小,因此文本编码器和图像编码器没有进行预训练
2)投射层方面,选择使用了线性投射层,而没有使用非线性投射层。 SimCLR、MOCO等一系列的论文中证实用非线性投射层比用线性投射层,可以带来将近10个点的提升。但是作者发现,在多模态的这样预训练任务中,使用非线性投射层或线性投射层没什么大关系,作者怀疑非线性投射层应该只是适配纯图片的单模态学习的。
3)数据增强方面,由于数据量太大了,并没有做什么数据增强,之使用了一个随机剪裁。
4)因为数据太大,调参不好调。在对比学习中,temperature这个参数非常重要,稍微调一调就会有很大的提升,但是作者实在不想调,就把它设置成了一个可以学习的标量,直接在训练的过程中就被优化了。
5)模型方面,视觉用ResNet或Transformer,文本这边用transformer。

总的来说,CLIP这篇工作就是大力出奇迹,继承了之前工作的一些想法,弥补了他们在数据规模和模型规模上的不足,并巧妙了采用了对比学习的方式来训练,最后效果也确实是出奇的好。

5. 一些有意思的Clip相关工作

  1. StyleCLIP: Text-Driven Manipulation of StyleGAN Imagery (ICCV 2021 Oral)
    项目地址:https://github.com/orpatashnik/StyleCLIP
    内容:通过改变不同的文字属于,得到具有不同属性的图片。
  2. CLIPDraw: Exploring Text-to-Drawing Synthesis through Language-Image Encoders
    内容:使用CLIP做物体检测,并且可以检测出更细粒度的物体属性,比如某种颜色的玩具。
  3. clifs(使用CLIP做视频检索)
    项目地址:https://github.com/johanmodin/clifs
    内容:对一段交通监控视频,把需要检索的文本(比如“a bicyclist with a blue shirt”)转换成文本的特征,然后将监控视频中的每一帧做成视觉的特征,然后一帧一帧的做对比,成功检索出了“穿蓝色短袖骑自行车的人”那一帧。(CLIP论文中对在监控视频中的应用也进行了讨论)

参考文献

【1】Li, A., Jabri, A., Joulin, A., and van der Maaten, L. Learning visual n-grams from web data. In Proceedings of the IEEE International Conference on Computer Vision, pp. 4183–4192, 2017
【2】Ramesh A, Pavlov M, Goh G, et al. Zero-shot text-to-image generation[C]//International Conference on Machine Learning. PMLR, 2021: 8821-8831.

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值