CLIP原理详解篇

657 阅读7分钟

本文为稀土掘金技术社区首发签约文章,30天内禁止转载,30天后未获授权禁止转载,侵权必究!

🍊作者简介:秃头小苏,致力于用最通俗的语言描述问题

🍊专栏推荐:深度学习网络原理与实战

🍊近期目标:写好专栏的每一篇文章

🍊支持小苏:点赞👍🏼、收藏⭐、留言📩

CLIP原理详解篇

写在前面

Hello,大家好,我是小苏👦👦👦

在之前的博客中,我为大家介绍了很多计算机视觉方向的知识,最近的几期中,也为大家介绍了NLP(自然语言处理)相关的内容。那么这篇我将为大家介绍一篇被称为CLIP的论文,它将NLP和视觉相结合,实现了多模态的任务。 那么学习这篇之前呢,希望大家对一些基础的知识有一定的了解,也可以先阅读一下下述博客巩固一下知识点:

好滴,话不多说,就让我们一起走进CLIP的世界,探索它的奥秘叭~~~🌱🌱🌱

CLIP原理

首先来为大家说说什么是CLIP,论文上是这么解释的,如下图所示:

image-20241005143723588

CLIP的全称为Contrastive Languge-Image Pre-training,即对比语言图像预训练,也是一种预训练模型。CLIP的主要思想是通过对比学习,同时学习文本和图像的表示,并在高维空间中让相似的文本-图像对尽可能的靠近,而让不相似的尽可能的远离。这样表述大家可能听着也是摸棱两可,后面结合论文中的图来给大家介绍,大家就会一目了然了。

先来给大家解释一下文本-图像对是什么,CLIP的团队OpenAI在网络上收集了大量的文本图像对作为数据集,它是指文本是对图像的解释,如下图所示:

image-20241005151028173

上图中黄框中的文字和图像就可以称为文本图像对,即文本描述和图片表示的信息一致。知道了图像文本对,我们就可以来详细介绍介绍CLIP的工作原理了,如下图所示:

image-20241005151637107

首先我们假设有N个图像文本对,即有N个文本描述和N个对应的图片,然后有两个独立的编码器,分别处理文本和图像,即Text Encoder 和 Image Encoder。文本编码器将输入的文本编码成文本向量,我们输入N个文本描述,则会生成N个文本的向量表示,即T1,T2,T3,,TN{T_1,T_2,T_3, \cdots ,T_N};图像编码器将输入的图像编码成图像向量,我们输入N张图像,则会生成N个图像的向量表示,即I1,I2,I3,,IN{I_1,I_2,I_3, \cdots ,I_N}。得到N个文本向量和N个图像向量后,我们计算它们之间的余弦相似度IiTjI_i \cdot T_j,形成下表:

上表中I_i和T_i表示的是一对文本图像对,即对角线上的元素IiTiI_i \cdot T_i是文本图像对,那么我们训练的目标就是希望这些对角线上的文本图像对尽可能的大,即越相似;而希望非对角线上的元素,如I1T2I3T2I3TNI_1 \cdot T_2、I_3 \cdot T_2、I_3 \cdot T_N等等尽可能的小,即越不相似。

按照上面的训练目标训练完成后,就得到了权重参数固定的文本编码器即Text Encoder和图像编码器 Image Encoder。这两个编码器将用于预测阶段,预测过程如下图所示:

image-20241005162931493

首先,如上图(2)所示,我们会创建一个标签的全集,如plane,car,dog,,bird{plane, car, dog, \cdots , bird},然后会将这些标签套入到一个prompt模板中,如A photo of a {object},这样做可以提供更加丰富的上下文信息,帮助模型更好地理解类别,也增强了不同类别之间的区分度。得到套入模板的一个个标签文本后,将它们送入文本编码器中得到文本标签的特征向量,即T1,T2,T3,,TN{T_1,T_2,T_3, \cdots ,T_N}

然后,如图(3)所示,我们选取一张图片,送入图像编码器中,得到该张图片的特征向量I_1。

最后,计算I1I_1T1,T2,T3,,TN{T_1,T_2,T_3, \cdots ,T_N}的相似度,相似度最大I1T3(I_1 \cdot T_3)对应的标签,即A photo of a dogdog则是图片对应的类别。


CLIP亮点

上文其实已经把CLIP的主要原理给大家介绍完了,其实整体的思想还是比较好理解的,下面我来总结一下我认为CLIP的一些亮点(个人看法,不全勿喷)。🥗🥗🥗

  • 首先最重要的一点我觉得还是CLIP搭建了NLP和CV之前的桥梁,实现了多模态,即同时处理图像和文本信息。传统的图像分类模型,如Resnet、VIT等,只能处理图像数据,而自然语言模型,如Bert、GPT等只能处理文本数据,CLIP通过对比学习,将两者融合,并且取得很不错的效果,为后面多模态任务提供了指导意义。
  • 其次CLIP在预测时实现了zero-shot,即传统的图像分类模型只能针对特定的类别进行预测,即模型的输出必须是在预定义的类别集中选择一个。而 CLIP 可以进行开放类别预测,即可以预测模型在训练时未见过的类别。
  • CLIP的数据集无需标注,而是利用网络上的图像和对应文本进行对比学习。与传统的图像分类模型相比,少了耗时标注工作,大幅降低了标注成本。
  • CLIP 不仅仅局限于单一任务,而是可以同时处理图像分类、图像-文本匹配、图像检索等多种任务。这使得 CLIP 成为一个非常灵活的多模态模型,应用场景更加广泛。

除了上述亮点,我们也来看看CLIP的性能,如下图所示:

image-20241005172943373

CLIP和基于ImageNet上有监督训练的ResNet101在ImageNet验证集都能达到76.2%,而在其他几个数据集上的性能都更好,这也体现了CLIP在分布漂移的数据集上鲁棒性更好。

CLIP局限性

CLIP 尽管展现了强大的多模态学习能力,但是在以下几个方面仍存在局限性:

  • 细粒度分类和抽象任务表现不佳

    • CLIP 的 zero-shot 学习虽然在许多任务上表现出色,但在细粒度分类(如区分不同种类的汽车)或高度抽象的任务上,它的表现较差。这是因为 CLIP 更擅长处理广义的类别,而在处理需要精细语义区分的任务时,它的能力不足。
  • 域外泛化问题

    • 尽管 CLIP 在应对自然分布漂移(如数据集中的小幅变化)时表现得较为鲁棒,但当测试数据集的分布与训练数据集差异较大时,CLIP 的泛化能力会显著下降。这表明 CLIP 依然存在域外泛化的问题,即它在完全不同的环境或领域上表现不佳。
  • 数据效率问题未解决

    • CLIP 并未从根本上解决深度学习模型对海量数据依赖的问题。训练 CLIP 需要大量的图像-文本配对数据,这使得数据效率依然是一个瓶颈。模型的性能很大程度上依赖于其预训练数据的规模和质量。

小结

CLIP的原理篇就为大家介绍到这里啦,相信大家看完应该会对CLIP有了一定的认识,下一篇将配合代码来进一步帮助大家巩固知识,拜拜,我们下期见~~~🌼🌼🌼

如若文章对你有所帮助,那就🛴🛴🛴

         一键三连 (1).gif