当前位置: 首页 > news >正文

CLIP——多模态预训练模型介绍

CLIP: Contrastive Language-Image Pre-training

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 EncoderImage 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总结

  • 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,不提供训练样本时反而比提供少量训练样本时差了。

http://www.mrgr.cn/news/47768.html

相关文章:

  • RNN心脏病预测-Pytorch版本
  • 云集电商:数据库的分布式升级实践|OceanBase案例
  • 如何解决HTML和CSS相关情况下会导致页面布局不稳定?
  • Kubernetes 自定义资源定义(CRD)使用步骤
  • Ubuntu Bash工具
  • CSS基础入门
  • 【Linux系统编程】第三十弹---软硬链接与动静态库的深入探索
  • BERT的中文问答系统14
  • C++网络编程之套接字基础
  • 大模型推荐LLM4Rec调研2024
  • 浅谈云原生--微服务、CICD、Serverless、服务网格
  • 『Mysql进阶』Mysql SQL语句性能分析(七)
  • 代码随想录算法训练营Day31 | 455.分发饼干、376.摆动序列、53.最大子数组和
  • 2025年第九届绿色能源与应用国际会议(ICGEA 2025)即将召开!
  • 书店系统小程序的设计
  • 二叉树系列 10/11
  • 如何成为一名认证的低代码开发师?考证和培训指南!
  • TARA详解
  • LESS、SASS 与 SCSS 预处理器详解
  • LLM大模型怎样进行数据和质量测试
  • 在线拍卖|基于springBoot的在线拍卖系统设计与实现(附项目源码+论文+数据库)
  • C++:vector(题目篇)
  • 【Spring】Bean的生命周期
  • 【软件设计师】68道高频考题(附答案),无非就是考这些知识
  • 消防安全小程序推动社会消防安全意识提升
  • PHP生成RSA/ECC密钥对