深度解析CLIP:对比语言-图像预训练模型
深度解析CLIP:对比语言-图像预训练模型
CLIP(对比语言-图像预训练)模型是由OpenAI开发的多模态模型,通过对比学习方法将图像和文本映射到一个共享的潜在空间中,能够在无需特定训练的情况下进行跨模态检索、生成和理解。
CLIP模型结构
CLIP的核心思想是通过训练两个编码器(图像和文本编码器)使得相对应的图像和文本在同一潜在空间中尽可能接近,而不相关的图像和文本尽可能远离。具体来说:
图像编码器(Image Encoder):通常使用卷积神经网络(CNN)或视觉Transformer(ViT)作为基础网络架构,负责提取图像的特征表示。
文本编码器(Text Encoder):使用Transformer架构,负责将文本(如描述图像的自然语言)转换为相应的潜在表示。
CLIP最重要的能力是实现零样本分类。在传统分类模型中,新增类别需要重新训练和标注,而CLIP通过预训练模型可以直接实现零样本分类。具体步骤包括:
- 加载预训练的CLIP模型的图像和文本特征编码器
- 准备要分类的图像和自然语言描述的类别标签
- 使用CLIP模型的图像和文本特征编码器将图像和标签文本编码为向量
- 计算图像向量与所有标签文本嵌入之间的余弦相似度,选择相似度最高的标签作为结果
训练过程
CLIP使用对比损失作为训练目标,具体步骤如下:
- 对于每一对图像和文本,计算图像编码器和文本编码器输出的向量之间的余弦相似度
- 通过最大化正确图像和文本对之间的相似性来优化模型
- 确保相似的图像-文本对在潜在空间中接近,而不相关的图像-文本对则被拉远
假设一个批次中有64个文本图像对,此时我们会同时获得64个图片和64个文本,首先我们从64个文本图像对中取出一个文本图像对,成对的文本图像对是天然的正样本,它们是配对的。而对于这个样本的文本来讲,其它63个图像都为负样本,它们是不配对的;而对于这个样本的图像来讲,其它63个文本都为负样本,它们是不配对的。在这个批次中,64个文本图像对,可以获得的图像embedding和文本embedding为:
visual_embedding [64, embedding_size]
text_embedding [64, embedding_size]
我们使用visual_embedding 叉乘 text_embedding,得到一个[64, 64]的矩阵,那么对角线上的值便是成对特征内积得到的,如果visual_embedding和对应的text_embedding越相似,那么它的值便越大。我们选取[64, 64]矩阵中的第一行,代表第1个图片与64个文本的相似程度,其中第1个文本是正样本,我们将这一行的标签设置为1,那么我们就可以使用交叉熵进行训练,尽量把第1个图片和第一个文本的内积变得更大,那么它们就越相似。每一行都做同样的工作,那么[64, 64]的矩阵,它的标签就是[1,2,3,4,5,6……,64],在计算机中,标签从0开始,所以实际标签为[0,1,2,3,4,5……,63]。这样的一种学习方式也是一种无监督学习方法——对比学习,通过构造正负样本对来学习数据的有效表示。正样本对是图像和它的文本描述,而负样本对是任意不相关的图像和文本。模型通过计算图像和文本的相似性来训练,学习如何将视觉和语言信息映射到一个共同的潜在空间中。
在CLIP模型训练,batchsize设置为32768,由于CLIP的数据量足够大,图片编码器和文本编码器都没有进行预训练,图片唯一做的数据增强就是随即裁剪。
模型推理过程
CLIP在图像分类中并不依赖固定的标签集,而是可以接受任意文字描述作为标签,从而实现开放标签分类。模型可以根据输入的文本描述对图像进行分类,这在现实应用中更具灵活性,也更符合人类的推理习惯。在推理时,首先输入一句话进行文本encoder编码,然后把文本embedding之后进行图片映射。
给定一张图片,如何利用预训练好的网络去做分类呢?给网络一堆分类标签,比如cat, dog, bird,利用文本编码器得到向量表示。然后分别计算这些标签与图片的余弦相似度;最终相似度最高的标签即是预测的分类结果。但相比于单纯地给定分类标签,给定一个句子的分类效果更好,这也就是prompt engineering,如一种句子模板
A photo of a ...
,后面填入分类标签。这种句子模板叫做提示prompt。预训练时模型看到的大多是句子,如果在推理时突然变成单词,效果肯定会下降。
在推理过程中,从前的分类网络类别数量是固定的,最后一层是跟着 softmax 的全连接层进行不同类别的概率预测;如果要更改类别数量,就要更换最后一层,并且预测的内容是固定的,不能超过训练集的类别范围。但对于 CLIP 来说,提供给网络的分类标签不仅数量不固定,内容也是自由的。如果提供两个标签,那就是一个二分类;如果提供1000个标签,那就是1000分类问题。标签内容可以是常规的分类标签,也可以是一些冷门的分类标签,摆脱了事先定好的分类标签。
CLIP 在 16 个数据集上优于 ResNet50,但在卫星图像分类、淋巴转移检测和合成场景计数等复杂任务中表现较差。这表明 CLIP 预训练的特征编码器并不能在所有任务中都表现出色,特别是在与训练数据分布差异较大的领域仍有明显不足。
总结
CLIP 是一个非常强大的多模态学习模型,通过对比学习方法将图像和文本映射到一个共享的潜在空间中,能够在无需特定训练的情况下进行跨模态检索、生成和理解。其跨领域的能力使得它在许多视觉和语言任务中都能表现出色,具有广泛的应用前景。