CLIP: Learning Transferable Visual Models From Natural Language Supervision
CLIP: Learning Transferable Visual Models From Natural Language Supervision
论文链接: https://arxiv.org/pdf/2103.00020.pdf
代码链接:https://github.com/openai/CLIP
blog链接 : https://openai.com/research/clip
CLIP的英文全称是Contrastive Language-Image Pre-training,即一种基于对比文本-图像对的预训练方法或者模型。CLIP是一种基于对比学习的多模态模型,与CV中的一些对比学习方法如moco和simclr不同的是,CLIP的训练数据是文本-图像对:一张图像和它对应的文本描述,这里希望通过对比学习,模型能够学习到文本-图像对的匹配关系。如下图所示,CLIP包括两个模型:Text Encoder和Image Encoder,其中Text Encoder用来提取文本的特征,可以采用NLP中常用的text transformer模型;而Image Encoder用来提取图像的特征,可以采用常用CNN模型或者vision transformer。
Abstract
最先进的计算机视觉系统经过训练可以预测一组固定的预定对象类别。这种受限的监督形式限制了它们的通用性和可用性,因为需要额外的标记数据来指定任何其他视觉概念。直接从原始文本中学习图像是一种很有前途的替代方案,它利用了更广泛的监督来源。我们证明,预测哪个标题与哪个图像对应的简单预训练任务是一种有效且可扩展的方法,可以在从互联网收集的 4 亿(图像、文本)对的数据集上从头开始学习 SOTA 图像表示。预训练后,使用自然语言来引用学习的视觉概念(或描述新的视觉概念),从而实现模型零样本传输到下游任务。我们通过对 30 多个不同的现有计算机视觉数据集进行基准测试来研究这种方法的性能,涵盖 OCR、视频中的动作识别、地理定位和许多类型的细粒度对象分类等任务。该模型可以轻松地迁移到大多数任务,并且通常可以与完全监督的基线竞争,而无需任何数据集特定的训练。例如,我们在 ImageNet 零样本上匹配原始 ResNet-50 的准确性,而无需使用其所训练的 128 万个训练样本中的任何一个。我们在 https://github.com/OpenAI/CLIP 发布了我们的代码和预训练模型权重 。
1.Introduction and Motivating Work
略
2.Approach
2.1 Natural Language Supervision
与其他训练方法相比,自然语言学习有几个潜在的优势。
1、与常规图像分类标定相比,自然语言更容易扩展,因为其不像图像分类中标签为N个中1个最合适标签;可从大量互联网文本中学习;
2、与无监督、半监督方法相比,自然语言监督不只是学习表征,并且将表征与语言联系起来,从而实现zero-shot迁移;
2.2. Creating a Sufficiently Large Dataset
构建一个新数据集,包括4亿图像文本对,共50万个文本序列,每个文本序列对应多达2万个文本图像对 这些数据集是从互联网上的各种公开来源收集的
互联网4亿图文对,尽可能涵盖更多的视觉概念,使用50万个搜索词,为了类间平衡,规定每个搜索词对应的图像数量不超过2万个图文对。数据集的词语数量与训练GPT-2使用的数据集WebText体量相近。
2.3. Selecting an Efficient Pre-Training Method
训练效率是自然语言监督成功的关键;
现有预训练方法相似,都是预测text中准确单词,但是这种方案比较难,因为同一张图有各种各样描述。
虽然图像的生成模型可以学习高质量的图像表示,但它们需要比具有相同性能的对比模型多一个数量级的计算量。
使用的是对比学习的方法,做图文匹配的任务,计算相似度。给定batch=N的image-text pairs,CLIP预测NxN的概率(利用线性变换得到multi-modal embedding space的向量,点乘计算得到相似度),对角线即为正样本,其它都是负样本。
由于预训练数据集量大,因此过拟合问题不严重,而且训练过程图像编码器及文本编码器不需要预训练模型;
使用对称交叉熵(symmetric cross entropy loss,该Loss主要针对noisy label的问题,防止网络拟合到错误的label上?)来进行优化。
数据增强:
图像随机裁剪是训练过程使用的唯一一种数据增强;
![img](https://img2023.cnblogs.com/blog/2009774/202307/2009774-20230703191138433-1043647123.png)
实现细节:
- 由于数据集很大,因此不用担心过拟合问题;
- 没有加载预训练权重,完全从零开始训练;
- 没有使用非线性激活函数,而是直接使用一个线性映射;
- 没有使用文本数据增强(这里主要指从文本中选取一个句子),因为数据集中的文本只有一个句子;
- 图像数据增强方面只使用了随机裁剪;
2.4. Choosing and Scaling a Model
CLIP训练过程如下,伪代码如图3,结构如图2;
1、给定一个batch,N个图像文本对;
2、CLIP预测N ∗ N 个可能对;CLIP学习多模态嵌入空间,通过联合训练图像编码器和文本编码器,最大化N个真实样本对,最小化N ∗ 2 − N N*2-NN∗2−N个不相关样本对
![img](https://img2023.cnblogs.com/blog/2009774/202307/2009774-20230729105518224-445511868.png)
图像编码器:
ResNet50作为基线;
ResNet-D作为改进,替换全局池化为attention池化;
VIT,将patch和position embedding 结合后增加LN层;
文本编码器:
Transfoemer,结构依据 Radford《Language models are unsupervised multitask learners. 2019.》更改
其他
略
如何用CLIP实现zero-shot分类
- 根据任务的分类标签构建每个类别的描述文本:
A photo of {label}
,然后将这些文本送入Text Encoder得到对应的文本特征,如果类别数目为N,那么将得到N个文本特征; - 将要预测的图像送入Image Encoder得到图像特征,然后与N个文本特征计算缩放的余弦相似度(和训练过程一致),然后选择相似度最大的文本对应的类别作为图像分类预测结果,进一步地,可以将这些相似度看成logits,送入softmax后可以到每个类别的预测概率。
利用CLIP的多模态特性为具体的任务构建了动态的分类器,其中Text Encoder提取的文本特征可以看成分类器的weights,而Image Encoder提取的图像特征是分类器的输入 具体可以参考 https://zhuanlan.zhihu.com/p/493489688
个人理解
构建一个很大的数据集
CLIP的价值在于,它可以应用在目标检测任务上,实现zero-shot检测!
CLIP模型拥有强大的特征抽取能力,强大到它可以将图像和任意的文本联系起来,你只需要简单地提供包含新类别的文本描述就可以使用该模型来识别新类别
CLIP是一种基于对比学习的多模态模型,希望通过对比学习,模型能够学习到文本-图像对的匹配关系
相似度直接计算文本特征和图像特征的余弦相似性(cosine similarity)
CLIP包括两个模型:Text Encoder和Image Encoder,其中Text Encoder用来提取文本的特征,可以采用NLP中常用的text transformer模型
参考资料
https://www.cnblogs.com/lxmj/p/15945772.html
https://blog.csdn.net/qq_56591814/article/details/127421979