1. CLIP简介
CLIP全称Constrastive Language-Image Pre-training,是OPAI推出的采用对比学习的文本-图像预训练模型。CLIP惊艳之处在于架构非常简洁且效果好到难以置信,在zero-shot文本-图像检索,zero-shot图像分类,文本→图像生成任务guidance,open-domain 检测分割等任务上均有非常惊艳的表现,本文将对CLIP做一些初步的介绍。
2. CLIP模型简介
CLIP的基本算法原理如下,为了对image和text建立联系,首先分别对image和text进行特征提取,image特征提取的backbone可以是resnet系列模型也可以是VIT系列模型,text特征提取目前一般采用bert模型,特征提取之后,由于做了normalize,直接相乘来计算余弦距离,同一pair对的结果趋近于1,不同pair对的结果趋近于0,因为就可以采用对比损失loss(info-nce-loss),熟悉这个loss的同学应该都清楚,这种计算loss方式效果与batch size有很大关系,一般需要比较大的batch size才能有效果。CLIP的模型如下图所示:
CLIP 能够成功,并且很难自己复现的一个重要原因就是CLIP用了大量的训练数据以及训练资源,真的可以说是大力出奇迹。CLIP用了4亿的图像文本对进行训练。伪代码如下:
- 编码 :通过图像&文本编码器,得分图像和文本特征。
- 投影:首先通过投影矩阵将图像及文本特征映射到相同的维度大小,在进行L2 normalization (使得之后的点积操作直接等效于cosine similarity)
- 相似度计算:点积运算计算文本-图像的cosine similarity,得到 n x n 矩阵的logits(模型预测),越接近1则说明模型预测该文本-图像对是配对的,否则不配对。
- 计算loss:已知 logits 矩阵对角线的文本和图像是配对的,非对角线元素不配对,因此构造训练标签 np.arange(n),然后分别在图像维度(axis=0) 和文本维度(axis=1)计算loss。以图像维度为例简单说明一下这里的逻辑,因为在计算相似度的时候,图像特征矩阵@文本特征矩阵得到的 n x n 矩阵,第一个n 代表的图像,因此我们在axis=0 计算图像维度的loss。
3. CLIP模型优缺点总结
优点
- zero-shot做得好,经过在400million大的未清洗的数据集上训练,在不同的数据集上表现还可以,可以自定义任务,而且效率很高。
- 高效,虽然GPT3做zero-shot也很好,但是CLIP吃的资源少,计算量少,训练效率高。最好的一版CLIP只在256个GPU上训练两周就好了,跟目前图像领域的其他大模型都差不多。
- 灵活和通用:因为他们直接从自然语言中学习广泛的视觉概念,CLIP明显比现有的ImageNet模型更灵活和通用。我们发现他们能够轻松地完成许多不同的任务。
缺点
- 虽然CLIP通常在识别普通物体方面表现良好,但在更抽象或更系统的任务上却表现不佳。比如计算图像中物体的数量,以及在更复杂的任务上,比如预测照片中最近的汽车距离有多近。在这两个数据集上,零射剪辑只比随机猜测好一点点。与特定任务模型相比,Zero-shot CLIP在非常细粒度的分类上也很困难,比如区分汽车模型、飞机变体或花卉种类之间的区别。
- 对于未包含在其预训练数据集中的图像,CLIP的泛化效果也很差。例如,尽管CLIP学习了一个有效的OCR系统,但当从MNIST数据集评估手写数字时,zero-shot CLIP仅达到88%的准确率,远低于数据集上99.75%的人的准确率。(其实还行,毕竟不是专门在MNIST上跑的)
4. CLIP模型开源方案
OPENAI方案:
github代码地址
论文介绍
中文CLIP方案:
中文clip
CLIP图片搜索演示Demo
CLIP视频搜索演示Demo
参考资料:CLIP介绍:连接图像与自然语言