本文参考:AIGC神器CLIP:技术详解及应用示例_Baihai IDP的博客-CSDN博客
一、CLIP概述
CLIP:Constastive Language-Image Pretraining。它是一个开源的、多模式的、zero-shot的模型。如果提供一张图像和一段文本描述,该模型可以预测与该图像最相关的文本描述,或者可以预测与该文本最相关的图像。
开源的:该模型是由OpenAI构建并开源的。
多模式的:CLIP同时结合了自然语言处理和计算机视觉等多个领域的技术。
zero-shot:zero-shot学习是一种对未见过的标签进行归纳的方法,并且我们不需要专门训练如何对它们进行分类。
Constastive Language:这种技术使得CLIP能理解相似的表征彼此应该靠近,而不相似的应该相距甚远。
二、对比式无监督预训练(Contrastive Pre-training)
假设我们有N个图像与它们各自的描述集合,例如:<image1, text1>, <image2, text2>, <imageN, textN>。
对比式无监督预训练的目的是同时训练图像编码器和文本编码器,产生图像嵌入[I1, I2 ... IN]和文本嵌入[T1, T2 ... TN],其方式为:正确的<image-text>嵌入对<I1,T1>, <I2,T2>(其中i=j)的余弦相似度是最大的。以对比的方式,不相似的对<I1,T2>, <I1,T3>...<Ii,Tj>(其中i≠j)的余弦相似性最小。
步骤说明:
1、该模型首先接收N个<image-text>对
2、文本编码器是一个标准的Transformer模型,图像编码器可以是ResNet模型。
3、对于batch中的每个图像,图像编码器都会计算一个图像向量。比如第一幅图像对应I1向量,第二幅对应于I2向量,以此类推。每个向量的大小为dim(dim是潜在维度的大小)。因此,这一步的输出是N*dim矩阵。
4、同样地,文本描述被压缩成文本嵌入[T1,T2,...,TN],产生一个N*dim矩阵。
5、最后将这些矩阵相乘,计算每张图片和文本描述之间的成对余弦相似度,这将产生一个N*N矩阵,如上图所示。
6、我们的目标是使对角线上的余弦相似度最大化,这些是正确的<image-text>对。以对比的方式,非对角线元素的相似度应该最小化。该模型使用对称的交叉熵损失函数作为其优化目标。这种类型的损失函数既能优化图像到文本的方向,也能优化文本到图像的方向。
三、Zero-Shot分类
3.1 baseline
baseline就是普通的分类方式,如下图所示。
首先,下载一个高性能的预训练过的CNN,比如ResNet,用它进行特征提取得到图像特征。
然后,将这些特征作为一个标准分类器(如Logistic Regression)的输入。分类器以有监督的方式进行训练,其中图像标签是目标变量。
3.2 CLIP的Zero-Shot分类
首先,提供一组文本描述,这些文本描述被编码为文本嵌入
然后,对图像做同样的事情,图像被编码成图像嵌入
最后,CLIP计算图像嵌入和文本嵌入之间的成对余弦相似度。具有最高相似度的文本提示被选择为预测结果。