问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

CLIP:多模态预训练模型详解

创作时间:
作者:
@小白创作中心

CLIP:多模态预训练模型详解

引用
CSDN
1.
https://blog.csdn.net/weixin_44162361/article/details/142820984

CLIP(对比语言-图像预训练)是OpenAI在2021年提出的一种多模态预训练模型,通过对比学习的方式学习图像和文本之间的对齐关系。本文将从动机、模型训练、网络结构、实现细节到总结,对CLIP进行全面的阐述。

CLIP: 对比语言-图像预训练

CLIP是由OpenAI在2021年在《Learning Transferable Visual Models From Natural Language Supervision》中提出的一种多模态预训练模型,使用4亿(400M)个图像和文本对数据进行训练,通过对比学习的方式学习图像和文本之间的对齐关系。

Motivation

简单来说,新增类别还得重新训练标注太麻烦了,能不能一劳永逸?这就是CLIP要解决的问题,预训练模型直接zero-shot。

CLIP模型训练——对比学习

  • 输入:图像及其配对的文本描述
  • 输出:计算图像和文本描述之间的相似度

对比学习是CLIP模型的核心,它通过比较正样本(匹配的图像-文本对,即图中对角线上N个匹配的图像-文本对)和负样本(不匹配的对,即N^2-N个没有匹配的图像-文本对)来训练模型。这种学习策略使得模型能够学习到图像和文本之间的复杂关系,而不仅仅是简单的特征对应。

CLIP的对比学习框架提高了模型对视觉和语言数据的泛化能力。

CLIP的网络结构

采用双流结构,使用Image Encoder和Text Encoder分别处理图像和文本。

Image Encoder

图像编码器有两种架构,一种是使用ResNet50作为基础,并使用ResNetD的改进和抗锯齿rect-2模糊池对原始版本进行了一些修改。此外,还将全局平均池化层替换为注意力池化机制。注意力池化机制是由一个单层的“Transformer”多头QKV注意力实现的,其中Q是基于图像的全局平均池化表示。

第二种是引入Vision Transformer(ViT)进行实验,仅在transformer之前对 combined patch 和 position embeddings添加了额外的层归一化,并使用略有不同的初始化方案。

【注意】CLIP的Image Encoder学到的不是图像和哪个类别是相关的,而是图像本身的实际信息相关的,即编码出的特征是有实际含义的。

Text Encoder

文本编码器是Transformer架构,并在此基础上根据Radford模型进行了架构修改。作为基础尺寸,使用8个注意头的12层512宽的解码器,参数为63M。对于输入的文本序列,用 [SOS] 和[EOS] 括起来,把 [EOS] 作为整个文本输入的特征代表,将’EOS’的编码后的文本特征进行归一化然后通过线性层映射到多模态空间中。

对比学习

CLIP模型的损失函数由两部分构成:对比损失和分类损失。

  • 对比损失:通过最大化匹配图像-文本对的相似性,最小化不匹配图像-文本对的相似性来训练模型。
  • 分类损失:用于训练模型对图像和文本进行多任务分类。

CLIP实现——推理

CLIP模型预训练完成后,CLIP转换为零样本分类器。

zero-shot推理,推理时需要:

  • 一张图像数据
  • 一个训练好的模型
  • 一些提示文本(任意个)

和训练过程类似地,需要图像编码器将给定图像编码为图像特征,文本编码器将待选文本编码为文本特征。推理中使用prompt (提示),使用 “a photo of a {subject}.” 句子模板,将给定的类别分别填入subject作为文本进行编码,并预测CLIP估计的标题类与给定图像的最佳配对。

之所以进行prompt engineering有两个原因

1.一词多义,一个单词可能存在好几种意思,需要上下文信息来猜测这个单词的具体含义。
2.与预训练时的文本输入保持一致。因为在预训练时的输入大多是一句话,为了减小预训练和推理时的输入gap,在预测时输入也是一句话。

句子模板的选择很重要!论文中还对prompt engineering进行了讨论,测试了很多种类的句子模板。

推理过程中最关键的是,有很高的自由度去设置"多项选择题"。

以往的分类网络

1、类别是固定的。一般最后一层是softmax操作之后的全连接层,如果要更改类别的数量,就需要修改最后一层。
2、预测的内容是固定的,不能超过数据集的类别范围。

CLIP

提供给网络的分类标签可以数量不固定,而且可以是任意内容。如果提供两个标签,就是二分类问题,提供100个标签,就是100分类问题。CLIP摆脱了事先定好的分类标签。

CLIP可以随意进行Zero-Shot推理的一部分原因是因为训练的数据集很大,覆盖了绝大部分的视觉概念,并且文本的冗余信息较少,模型可以较准确的找出与视觉特征相似度较高的文本种类特征从而完成分类。

CLIP总结

  • CLIP的zero-shot性能虽然和有监督的ResNet50相当,但是还不是SOTA,作者估计要达到SOTA的效果,CLIP还需要增加1000x的计算量,这个硬件条件很难满足。
  • zero-shot CLIP 在某些数据集上表现也并不好,在一些细分类任务上,CLIP 的性能低于 ResNet50。同时 CLIP 也无法处理抽象的概念,也无法做一些更难的任务(如统计某个物体的个数)。作者认为还有很多很多任务,CLIP 的 zero-shot 表现接近于瞎猜。
  • CLIP 虽然泛化能力强,在许多自然图像上还是很稳健的,但是如果在做推理时,这个数据与训练的数据差别非常大,即 out-of-distribution,那么 CLIP 的泛化能力也很差
  • 虽然 CLIP 可以做 zero-shot 的分类任务,但它还是在你给定的这些类别中去做选择。这是一个很大的限制,与一个真正灵活的方法,如 image captioning,直接生成图像的标题,这样的话一切都是模型在处理。 不幸的是,作者发现 image captioning 的 baseline 的计算效率比 CLIP 低得多。一个值得尝试的简单想法是将对比目标函数和生成目标函数联合训练,希望将 CLIP 的高效性和 caption 模型的灵活性结合起来。
  • CLIP 并没有直接优化 few-shot 的性能,有时在下游任务的推理时Few-Shot效果比Zero-Shot效果还要差。在作者的工作中,回到在CLIP特征上拟合线性分类器。 当从 zero-shot 转换到设置 few-shot 时,当 one-shot、two-shot、four-shot 时反而不如 zero-shot,不提供训练样本时反而比提供少量训练样本时差了。
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号