CLIP模型

发布时间 2023-10-11 11:43:05作者: Hu·Lei

CLIP模型(Contrastive Language-Image Pre-training)

Title: Learning transferable visual models from natural language supervision

发表单位:OpenAI, San Francisco

发表于:ICML 2021

关键词:clip、多模态

论文地址radford21a.pdf (mlr.press)

代码:https://github.com/OpenAI/CLIP

OpenAI官方博客CLIP: Connecting text and images (openai.com)

一句话总结:利用 text 信息监督视觉任务自训练,本质就是将图片分类任务化成了图文匹配任务,效果可与完全监督方法相当 。

模型的核心是从自然语言与图像配对的监督中学习感知。

image

模型总结

这篇文章采用了多模态的对比学习方法,即让模型学习区分正样本(正确匹配的文本-图像对)和负样本(不匹配的文本-图像对)。而对比学习需要大量的数据,因此 OpenAI 搜集了四亿对高质量的「文本-图片」对。

对于一个包含 N 个文本-图片对的训练batch,图片和文本分别输入到图片编码器和文本编码器之中(文本编码器可以是 Text Transformer,图片编码器可以是 ViT 或 ResNet ),再将提取到的文本特征和图像特征线性映射到同一空间中,之后将 N 个文本与 N 个图片进行匹配,计算文本特征和图像特征的余弦相似度,获得 \(N\times N\) 余弦相似度矩阵,如上图所示。由于对比学习需要确定正、负样本,而此时就可以将正确配对的 N 个样本看作正样本(矩阵中的对角线元素),其余 \(N^2-N\) 个样本可以看作负样本。CLIP的优化目标为最大化正样本的相似度、同时最小化负样本的相似度。对应的伪代码实现如下:

# image_encoder - ResNet or Vision Transformer
# text_encoder - CBOW or Text Transformer
# I[n, h, w, c] - minibatch of aligned images 一个batch图像的维度
# T[n, l] - minibatch of aligned texts		一个batch文本的维度
# W_i[d_i, d_e] - learned proj of image to embed	
# W_t[d_t, d_e] - learned proj of text to embed
# t - learned temperature parameter

# 分别提取图像特征和文本特征
I_f = image_encoder(I) #[n, d_i]
T_f = text_encoder(T) #[n, d_t]

# 对两个特征进行线性投射,得到相同维度的特征,并进行l2归一化
I_e = l2_normalize(np.dot(I_f, W_i), axis=1)
T_e = l2_normalize(np.dot(T_f, W_t), axis=1)

# 计算缩放的余弦相似度:[n, n]
logits = np.dot(I_e, T_e.T) * np.exp(t)

# 对称的对比学习损失:等价于N个类别的cross_entropy_loss
labels = np.arange(n) # 对角线元素的labels
loss_i = cross_entropy_loss(logits, labels, axis=0)
loss_t = cross_entropy_loss(logits, labels, axis=1)
loss = (loss_i + loss_t)/2

在上述这个预训练过程当中,并没有设置分类头,得到的只是两个编码器的文本表示,但这个过程却很好地利用了自然语言的语义特征,使得这个模型不需要微调就能在下游任务中表现地很棒,它的迁移能力和在小样本上的表现相比于其它经过预训练并在 ImageNet 数据集上微调的模型同样或更加出色。

进行zero-shot分类

另外,它在下游任务上的适用性很强。其它模型通常需要在特定领域或标签的数据上进行微调,才能具备识别这类图片的功能。而 CLIP 模型,由于其出色的语义表征能力,它只需要提供与图片上的物体相对应的文本描述,就可以进行零样本迁移,直接识别这类图片。具体来说,在进行下游任务时,比如我们想要识别 ImageNet 上的1000类物体,我们只需要向文本编码器中输入包含这1000类物体的 1000 个描述文本: A photo of a {object} ,经过文本编码器后它就能具备和图片大致对应的语义,之后再向图片编码器中输入我们想要识别的图片,经过编码后模型就会计算这张图片与之前输入的1000个文本向量的余弦相似度,进而选择出相似度最大的文本对应的类别作为图像分类的预测结果,输出图片的文本标签。同时,也可以将这些相似度看成 logits ,送入 softmax 后得到每个类别的预测概率。

为什么选择对比学习的方法?

训练效率高。用图片来预测文本的难度较大,因为一张图片的描述语言可以有很多,关注的点不同,描述性语言就不同。而如果把它看作一个图文配对的任务,就相对来说简单地多了。作者一开始尝试了联合训练一个 CNN 和文本 transformer 来预测图像的文本,但发现这种方法的训练效率不高,还不如直接预测 bag of words,而使用基于对比学习的方法可以使训练效率提高4倍,因此作者最终选择了对比学习的方法来训练 CLIP。

CLIP 属于大力出奇迹的模型,大数据+大模型,且迁移学习的效果与模型大小成正相关。CLIP的训练数据集 WebImageText 的文本量接近训练 GPT-2 的 WebText 数据集。

参考资料

CLIP 论文逐段精读【论文精读】_哔哩哔哩_bilibili

神器CLIP:连接文本和图像,打造可迁移的视觉模型 - 知乎 (zhihu.com)

【多模态】CLIP模型 - 知乎 (zhihu.com)

【CLIP系列Paper解读】CLIP: Learning Transferable Visual Models From Natural Language Supervision - 知乎 (zhihu.com)