• 作者:老汪软件技巧
  • 发表时间:2024-10-06 11:01
  • 浏览量:

CLIP原理详解篇写在前面

Hello,大家好,我是小苏

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

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

CLIP原理

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

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

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

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

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

上表中I_i和T_i表示的是一对文本图像对,即对角线上的元素Ii⋅TiI_i \cdot T_iIi​⋅Ti​是文本图像对,那么我们训练的目标就是希望这些对角线上的文本图像对尽可能的大,即越相似;而希望非对角线上的元素,如I1⋅T2、I3⋅T2、I3⋅TNI_1 \cdot T_2、I_3 \cdot T_2、I_3 \cdot T_NI1​⋅T2​、I3​⋅T2​、I3​⋅TN​等等尽可能的小,即越不相似。

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

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

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

最后,计算I1I_1I1​与T1,T2,T3,⋯ ,TN{T_1,T_2,T_3, \cdots ,T_N}T1​,T2​,T3​,⋯,TN​的相似度,相似度最大(I1⋅T3)(I_1 \cdot T_3)(I1​⋅T3​)对应的标签,即A photo of a dog,dog则是图片对应的类别。

CLIP亮点

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

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

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

CLIP局限性

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

域外泛化问题

数据效率问题未解决

小结

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

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