CLIP(Contrastive Language-Image Pre-training)是由OpenAI开发的一个深度学习模型,用于处理图像和文本之间的语义关系。CLIP通过对图像和文本进行联合训练,学习到了一个通用的表示空间,使得相似的图像和文本在这个空间中距离较近,而不相似的则距离较远。
监督学习的局限性
由图像分类模型生成的现成特征已被用于图像检索等其他任务中。
但是,这些特征的通用性不强,
因为分类模型是为识别一组固定的类别而训练的。
要在这组类别中添加任何新类别,
都需要为这一新类别收集额外的标注图像,
然后重新训练模型。
这是一个耗时且昂贵的过程。
能否利用自监督学习技术来解决这一问题?
能否利用图像说明来生成更好的图像表征并避免标注成本? 也就是说,能否使用自然语言作为监督来学习视觉感知?
主要贡献
作者提出了一项预训练任务(CLIP = Contrastive Language Pre-training),
- 即预测哪张图片配哪句标题,以便从头开始学习SOTA图像表征。
为此,他们创建了一个从互联网上收集的包含4亿个(图片、文本)配对的数据集:
- 这种预先训练好的模型可以不费吹灰之力地应用到大多数任务中
- 而且不需要任何特定数据集的训练,就能与完全有监督的基线模型相媲美。
背景
CLIP从监督图像描述(supervised image captioning):
- 每张图片(image)都有相应的标题(caption),
- 用来训练一个模型,
- 预测相应图片标题中的准确词语。
这是一项艰巨的任务,因为一幅图像可以有多种不同的描述方式,但仍能表达相同的含义。
Contrastive Pre-training(对比预训练)
对比预训练:
- 考虑一批N个图像(images)及其 相应的N个标题(captions)。
- 有了这些,我们可以再批次中创建NxN可能的(图像、文本)配对。
- 现在,任务是预测批次中的N个真实对
为此,CLIP
通过联合训练:
- 图像编码器和文本编码器
- 来学习多模态嵌入空间。
- 图像编码器产生特征向量
I
; - 类似地,文本编码器产生一个特征向量
T
;
- 对于N个实数对,我们希望最大化
I
和T
之间的余弦相似度 - 对于$N^2-N$不正确的配对,我们希望最小化
I
和T
之间的余弦相似度
对比预训练
|----------| |---------------| |----------|
| Image | ---> | Image Encoder | ---> | I Vector | ---------------|
|----------| |---------------| |----------| V
|---------------|
| |
| |
| |
|----------| |---------------| |----------| | |
| Text | ---> | Text Encoder | ---> | T Vector |------> | |
|----------| |---------------| |----------| |---------------|
零样本预测
考虑图像分类任务, 预测时,对于单张图像,图像编码器将生成一个特征向量$I_1$ 为了识别图像类别, 文本编码器会嵌入目标数据集的类别名称, 生成N个特征向量$T_1,T_2,......$,以此类推。 N表示目标数据集中的类别数
Create dataset classifier from label text
|-------|
| plane |
| car | |-----------------------| |--------------|
| dog | -----> | A photo of a {object} | ----------------> | Text Encoder |
| bird | |-----------------------| |--------------|
| cat | |
|-------| |
|
Use for zero-shot prediction V
|-------| |---------------| |-----| |-----|-----|-----|-----|-----|
| Image | -----> | Image Encoder | -----> | I_1 | | T_1 | T_2 | T_3 | ... | T_N |
|-------| |---------------| |-----| |-----|-----|-----|-----|-----|
| |
| .* |
|-----------------------------------|
|
V
|--------|--------|--------|-----|--------|
|I_1.*T_1|I_1.*T_2|I_1.*T_3| ... |I_1.*T_N|
|--------|--------|--------|-----|--------|
|
V
|--------------------|
| A photo of a `dog` |
|--------------------|
模型细节
对于图像编码器,作者评估了两种不同的架构:
- ResNet-50
- ViT
ResNet-50
他们使用了改进的ResNet-D架构
,
并进行了抗锯齿矩阵-2模糊池化(anti-aliased rect-2 blur pooling
)处理。
他们还用Transformer-style attention pooling mechanism
替换了global average pooling layer
ViT(Vision Transformer)
作者在Transformer之前
组合patch
和position embedding
进行了额外的归一化处理(
use an additional layer normalization to the combined patch and position embedding
),
并使用了略有不同的初始化方案。
对于文本编码器
使用本文中描述的具有:
- 6300万个参数(12层 512-wide)
- 8个注意力头的
Transformer
训练
作者训练的模型包括:
-
5个ResNet
- ResNet-50
- ResNet-101
- 3个EfficientNet风格的ResNet模型
-
3个ViT
- ViT-B/32
- ViT-B/16
- ViT-L/14
-
The models are trained:
- 32 epochs
- using Adam optimizer with decoupled weight decay regularization
- decay the learning rate using a cosine schedule
- used a very large minibatch size of 32,768
提示工程的效果(Effect of Prompt Engineering)
图像分类数据集标注了与类名相对应的label IDs
由于CLIP模式在文本为一个完整句子的情况下进行训练的,
因此作者发现使用提示模版(prompt template)A photo of a {label}
,
是与图像相关联的文本的良好默认设置。
我们可以看到在36各分类数据集中,使用提示工程的分类准确率提高了5个百分点。
Zero-shot CLIP vs. Linear Probe
在27个数据集中的16个数据集上:
- zero-shot CLIP分类器的表现优于基于ResNet-50特征的监督线性分类器。
- 不过,在大多数数据集上,CLIP的性能仍低于最新水平
Limitations(局限性)
- CLIP以下任务上性能不佳
- counting object in an image
- finding the distance to the nearest object object in an image
- 在MNIST等分布外数据集上的表现非常差
- 在数字OCR上性能很好
- 但在识别MNIST手写数字方面却不好(准确率88%)
- 使用CLIP进行few-shot learning会导致性能不佳
- from zero-shot to few-shot learning时,性能会出现反直觉的下降
- 由于CLIP是根据互联网上查询的文本图像对进行训练的
- 因此它将会学习许多社会偏见