论文题目Learning Transferable Visual Models From Natural Language Supervision
译为 从自然语言监督中学习可转移的视觉模型
【资料图】
CLIP = Constractive Language Image Pretraining
摘要
最先进的计算机视觉系统被训练来预测一组固定的预定对象类别。这种受限制的监督形式限制了它们的通用性和可用性,因为需要额外的标记数据来指定任何其他视觉概念。直接从原始文本中学习图像是一种很有前途的选择,因为它利用了更广泛的监督来源。
关键点1:怎么理解额外的标记数据导致了受限制的监督形式,从而限制了通用性和可用性?
比如做ImageNet分类,它本身自己就是1000个类,如果你扔进ImageNet训练之后,去做预测,最后固定的全连接softmax分类头只能预测出这个图片是这1000个类的概率,如果你想让他去识别第1001个类,这是做不到的。这就限制了监督训练的通用性和可用性,难道你想要弄一个新的类别,就要重新标注一下,重新去训练一个新的模型吗?
关键点2:怎么理解从原始文本中学习图像就能有更广泛的监督来源?
关键点在于图像文本对,自然世界中有很多文本,这些文本都用来描述一些物体,比如你去旅游发一个朋友圈配图配文,这样子就形成了图像文本对。因此我们去做图像任务的时候,可以利用这个文本去辅助监督,这个文本特征就是监督来源。监督的来源是一段文本,而不是一个标注的label,这样就更加广泛,不仅仅限于1000个类别了。
我们证明了预测哪个文本与哪个图像相匹配的简单pretrain任务是一种有效且可扩展的方法,可以在从互联网收集的4亿对(图像,文本)数据集上从头开始学习SOTA图像表示。在pretrain之后,使用自然语言来参考学习到的视觉概念(或描述新的概念),从而实现模型向下游任务的zero-shot转移。我们通过对30多个不同的现有计算机视觉数据集进行benchmark测试来研究这种方法的性能,这些数据集涵盖了OCR、视频中的动作识别、地理定位和许多类型的细粒度对象分类等任务。
关键点1:爬了一个4亿对的图像文本对去做预训练?
自监督模式的训练,想要取得好效果,必须是大力出奇迹,所以有money is all you need的说法。
关键点2:怎么理解模型向下游任务的zero-shot转移
zero-shot:预训练之后,不做finetune或linear probe,谓之零样本,直接做预测
few-shot:与训练之后,使用少量样本做finetune,一般会冻结backbone(这种叫linear probe),只训练最后的全连接softmax分类头,谓之少样本,最后做预测
所以CLIP在做完使用图像文本对在4亿数据集上的预训练后,可以直接用在下游任务上,不需要做任何使用样本的finetune或者linear probe,就能取得很好的效果,所以说迁移性好。
该模型不平凡地转移到大多数任务,并且通常与完全监督的baseline竞争,而不需要任何数据集特定的训练。例如,我们在ImageNet zero-shot上匹配原始ResNet-50的精度,而不需要使用它所训练的128万个训练样本中的任何一个。
这个结果在当时看来是非常炸裂的。
引言
NLP领域的自监督范式:开山鼻祖BERT,使用掩码训练(完形填空)的方式完成对于backbone的自监督的训练。这种训练方式是文本进,文本出,可以训练出很好的backbone,backbone能够自动帮你抽取文本特征,与下游任务是无关的。所以当时OpenAI自己最牛的模型是GPT3,能帮你做各种任务,比如写邮件、写小说和写新闻等等。
(还有一种是与BERT不同的自回归的训练方式)
这说明:NLP这套框架证实自监督不使用人工标注的数据比使用更好
CV领域:仍然会用ImageNet预训练(监督范式)一下。
在CLIP之前,有三个同一领域的希望使用文本信号去训练视觉模型的工作:
VirTex(自回归预训练)、ICMLM(完形填空)、ConVirt(与CLIP很类似)
但他们的规模、数据集、算力都没有CLIP大,所以还是大力出奇迹
CLIP = 大数据集(4亿)+ 大模型+ 大算力+ 图像文本对的对比学习
图像文本对的工作模型采用的是ConVirt的简化版本,但就是效果好到怀疑人生。
方法
核心:用文本当作训练的信号来训练视觉模型,不需要人工标注(下载图像文本对),简单
单模态:MoCo SimCLR MAE等还是学习视觉特征,没有文本引导,下游任务还是finetune
多模态的对比学习:文本+视觉极具潜力
关键点1:清洗了一个巨大的干净的数据集 WIT(四亿图像文本对)
关键点2:提高训练效率,不能直接做预测(训练一个图像encoder如ResNet,一个文本encoder如Transformer,然后利用图像encoder去预测文本标签),原因是一张图片可以有很多描述。所以去做了一个对比学习的任务,只需要去判断这个图像和文本是不是配对的就行。
模型核心点就是,把文本特征和图像特征的cosine similarity当作是否配对的结果
一些训练细节:
1 数据集太大了,模型太大了,不会overfit,所以压根不做数据增强的tricks
2 用的线性投射层,而不是非线性,懒得用了,效果差不多,但在一般视觉用非线性多且好
3 对比学习的temperature参数,本来是很重要的,但这里直接调成learnable weight被优化了
模型的选择上,文本模型用Transformer,视觉模型可以用ViT或者ResNet,这里节用了很多训练的tricks。
训练上:常规的模型选择和计算量调优,Adam,Batch32768,混精度
“工程细节大于模型创新”
实验
zero-shot的原因:原来的自监督对比学习都是为了去学习一种泛化能力较好的特征,来应用到下游任务去做微调。但下游任务会有很多问题,比如下游任务的数据不好收集或者是特征迁移的问题,所以想要训练一个直接zero-shot的模型,直接用,别做微调了。
推理过程:用prompt engineer,把原来的图片的标签变成一个句子,然后这个句子经过text encoder得到一系列特征(与类别数相同),对应的图片经过image encoder得到一系列特征,最后两个特征进行余弦相似度计算,然后softmax,最高的那个就是最后的结果。
上面的prompt template是a photo of a {}
Prompt engineering:避免歧义和与NLP那边保持一致,避免distribution gap(分布误差)
Prompt ensembling:多用提示的模板prompt template,然后综合一下选最高的
这个就是咒语
结果大部分都好,特别是普通物体数据集
一些难的任务就不太好,需要去做few-shot,因为本身人自己没有专业知识也很难做好
局限
1. 还是没有SOTA(跟领域最好的,包括有监督)
2. 某些数据集不好,有bias
3. MNIST很差,因为4亿里没有
4. 虽然 CLIP 可以做 zero-shot 的分类任务,但它还是在你给定的这些类别中去做选择
5. 4亿还是太夸张了,自监督和伪标签
6. 调参和tricks还是用了很多
7. 通过自然语言引导图像分类器是一种灵活和通用的接口,但它有自己的局限性。 许多复杂的任务和视觉概念可能很难仅仅通过文本来指导,即使用语言也无法描述。
8. 实验还是在监督的数据集做,对于zero-shot来说还是不好
9. 政治、性别、宗教
10. 当从zero-shot 转换到设置few-shot 时,当one-shot、two-shot、four-shot 时反而不如zero-shot,不提供训练样本时反而比提供少量训练样本时差了,这与人类的表现明显不同,人类的表现显示了从zero-shot 到one-shot 大幅增加。今后需要开展工作,让CLIP 既在zero-shot 表现很好,也能在few-shot 表现很好。
标签: