CLIP:用文本作为监督信号训练可迁移的视觉模型

news2024/11/15 21:41:05

Radford A, Kim J W, Hallacy C, et al. Learning transferable visual models from natural language supervision[C]//International conference on machine learning. PMLR, 2021: 8748-8763.

CLIP 是 OpenAI 在 2021 年初的工作,文章发表在 ICML-2021,正文只有 9 页;arxiv 上的版本有足足 27 页,详细介绍了实验的动机、过程与分析。CLIP 使用文本作为监督信号预训练了一个迁移能力极强的视觉模型,虽然方法简单但效果极佳,能够在任意的视觉分类模型上取得不错的效果。截至目前,文章已有近 1w 的引用量,可见其影响力。

CLIP 所做的任务是预训练一个具有较强迁移能力的视觉分类模型,开创性地提出训练模型学习图像和文本之间的联系,以便能在够处理 zero-shot 的下游任务时取得很好的迁移效果。

本文不再按照论文解读的方式逐段记录,只专注于介绍 CLIP 技术本身。本文参考 神器CLIP:连接文本和图像,打造可迁移的视觉模型,更多参考资料如下:

  • 全文翻译:史上最全OpenAI CLIP解读:简单的想法与被低估的实验;
  • 文章总结:跟李沐读论文系列——CLIP、【CLIP系列Paper解读】CLIP: Learning Transferable Visual Models From Natural Language Supervision;
  • 视频讲解:CLIP 论文逐段精读【论文精读】;

目录

  • 一. 背景
  • 二. CLIP 原理
    • 1. CLIP 模型
    • 2. 训练方法
    • 3. 实验细节
  • 三. CLIP 模型迁移
  • 四. 对比实验
  • 五. 总结
  • 六. 复现

一. 背景

在过去的十多年里,科学家们尝试了各种方法想让 AI 准确地认识图片,但经过训练的 AI 模型在面对陌生类型的图片时,表现却难遂人愿。于是研究者们经过分析得出背后的原因主要有两个:理解力和训练量。人类的大脑在处理图片时理解的是一个整体的形象,而 AI 理解的是单独的像素点;并且 AI 的训练数据集有限,数量难以达到人所见过的图片的程度。针对理解力问题,研究者们大显神通,在 CNN 的基础上提出了残差网络、注意力机制、transformer 等诸多手段;针对训练量问题,研究者们建立了一个大型图像库 ImageNet,训练集包括了 1000 个类型的 120 多万张带标签图片。1

然而,尽管研究者们做出了种种努力,AI 对陌生图片的理解力依然无法让人满意。为此,拥有充分计算资源的 OpenAI 研究者们想到了一个更加暴力的方法:充分利用互联网上海量的图片及其上下文信息,不再执着于训练 AI 辨认图片,而是 训练其对图片和文字的匹配能力。这样不仅提高了理解力的要求,还拥有了更大规模的训练样本。于是,OpenAI 研究者们在互联网上找了 4 亿多张配有文字描述且质量过关的图片,将文字和图片分别交给其他 AI 模型进行编码,然后供给 CLIP 学习计算文字和图片的关联程度。学习过程中使用 对比学习,让有关系的文字和图片关联程度尽可能高,无关系的文字和图片关联程度尽可能低,从而学习到文字和图片之间的一致性和差异性。

对比学习 (Contrastive Learning):一种无监督机器学习方法,通过将相似的样本在空间中拉近,将不相似的样本推远,有助于模型学习到数据的一致性和差异性,从而得到更有意义、更鲁棒的表示。对比学习一个典型的例子就是图像和文本的对比学习,如 CLIP。在这种情况下,训练模型让有关系的文字和图片关联程度尽可能高,无关系的文字和图片关联程度尽可能低,使得模型能够在多模态数据中更好地理解和推理关系。对比学习不需要人为输入标签去指导人工智能,又具有标签起到的监督效果,近年来广受好评。

训练完成的 CLIP 在没有经过任何调整的情况下(即 zero-shot),对 27 个不同的图片数据库进行分类测试,在其中的 16 个图片数据库上的辨认准确率甚至超过了针对该图片库专门训练的 AI。并且针对不同的图片库,CLIP 只要附加少量的训练量进行微调,就可以超越任何一个专业 AI 的辨识准确度。由此可见,这种基于海量数据库来训练一个大模型的想法,效果非常显著。

zero-shot:指模型在没有专门训练数据的情况下,对新领域或新任务进行有效的推理或预测的能力。这意味着模型能够在训练阶段学习到一般性的特征,然后在测试阶段能够推广到新的、未知的类别。这种能力对于处理动态和多样化的环境中的视觉任务非常重要。

二. CLIP 原理

CLIP 是一种多模态(语言和图像)预训练模型,通过在大规模图像和文本数据上进行预训练,学会了将图像和文本映射到一个共享的表示空间。这使得模型能够在不同任务和数据集上进行零样本学习,即在没有任务特定标签的情况下进行推理和泛化。

1. CLIP 模型

CLIP 全称是 Contrastive Language-Image Pre-training,即一种 基于对比文本 - 图像对的预训练模型。CLIP 的训练数据是 文本 - 图像对 (image, text) pairs,即一张图像和它对应的文本描述,通过对比学习,得到文本和图像之间的匹配关系。如图所示,CLIP 包括 Text Encoder 和 Image Encoder 两个模型:Text Encoder 用来提取文本的特征,可以采用 NLP 中常用的 text transformer 模型;而 Image Encoder 用来提取图像的特征,可以采用 CV 中常用 CNN 模型或者 vision transformer。
在这里插入图片描述

2. 训练方法

CLIP 的训练过程就是对提取的文本特征和图像特征进行对比学习。对于一个包含 N 对文本 - 图像的训练 batch,将 N 个文本特征和 N 个图像特征两两组合,CLIP 模型会预测出 N2 对可能的文本 - 图像的相似度(这里取文本特征和图像特征的余弦相似性 cosine similarity),即图中的矩阵。这里只有 N 个 正样本(即真正属于一对的文本和图像),其余均为负样本,那么 CLIP 的训练目标就是最大 N 个正样本的相似度,同时最小化 N(N-1) 个负样本的相似度,伪代码如下:

# image_encoder - ResNet or Vision Transformer
# text_encoder - CBOW or Text Transformer
# I[n, h, w, c] - minibatch of aligned images
# T[n, l] - minibatch of aligned texts
# W_i[d_i, d_e] - learned proj of image to embed
# W_t[d_t, d_e] - learned proj of text to embed
# t - learned temperature parameter
# extract feature representations of each modality
I_f = image_encoder(I) #[n, d_i]
T_f = text_encoder(T) #[n, d_t]
# joint multimodal embedding [n, d_e]
I_e = l2_normalize(np.dot(I_f, W_i), axis=1)
T_e = l2_normalize(np.dot(T_f, W_t), axis=1)
# scaled pairwise cosine similarities [n, n]
logits = np.dot(I_e, T_e.T) * np.exp(t)
# symmetric loss function
labels = np.arange(n)
loss_i = cross_entropy_loss(logits, labels, axis=0)
loss_t = cross_entropy_loss(logits, labels, axis=1)
loss = (loss_i + loss_t)/2

3. 实验细节

为了训练 CLIP,OpenAI 从互联网收集了 4 亿对文本 - 图像作为数据集,文中称为 WebImageText (WIT)

Text Encoder 和 Image Encoder 选用模型如下:

  • Text Encoder:固定选择了一个包含 63M 参数的 text transformer 模型;
  • Image Encoder:采用了两种的不同的架构,一种是常用的 CNN 架构 ResNet,另一种是基于 transformer 的 ViT:
    • ResNet:包含 5 个不同大小的模型:ResNet50、ResNet101、RN50x4、RN50x16 和 RNx64;
    • ViT:选择 3 个不同大小的模型:ViT-B/32、ViT-B/16 和 ViT-L/14。

由于数据量庞大,最大的 ResNet 模型 RN50x64 需要在 592 张 V100 卡上训练 18 天,最大的 ViT 模型 ViT-L/14 需要在 256 张 V100 卡上训练 12 天,可见要训练 CLIP 需要耗费多大的资源。对于 ViT-L/14,还在 336 的分辨率下增加了一轮 epoch 来增强性能,发现这个模型效果最好,记为 ViT-L/14@336,文中进行对比实验的 CLIP 模型也都采用这个。2

三. CLIP 模型迁移

前文介绍了 CLIP 的原理,可以看到训练后的 CLIP 其实是文本和视觉两个模型。那么如何对预训练好的模型进行迁移呢?与 CV 中常用的先预训练后微调不同,CLIP 可以直接实现 zero-shot 的图像分类,即不再需要任何训练数据,就能在某个具体的下游任务上实现分类,这也是 CLIP 的强大之处。用 CLIP 实现 zero-shot 分类只需要简单的两步:

  1. 根据下游任务的分类标签构建每个类别的描述文本,然后将这些文本送入 Text Encoder 得到对应的文本特征;
  2. 将要预测的图像送入 Image Encoder 得到图像特征,然后与文本特征计算余弦相似度。选择相似度最大的文本对应的类别作为图像分类的预测结果。这些相似度可以看成是 logits,送入 softmax 后可以到每个类别的预测概率。

在这里插入图片描述

可以看到,CLIP 为具体的任务构建了动态的分类器。其中,Text Encoder 提取的文本特征可以看成分类器的参数,Image Encoder 提取的图像特征可以看成分类器的输入。

以官方 notebook 为例:

# 根据下游任务的分类标签构建每个类别的描述文本
descriptions = {
    "page": "a page of text about segmentation",
    "chelsea": "a facial photo of a tabby cat",
    "astronaut": "a portrait of an astronaut with the American flag",
    "rocket": "a rocket standing on a launchpad",
    "motorcycle_right": "a red motorcycle standing in a garage",
    "camera": "a person looking at a camera on a tripod",
    "horse": "a black-and-white silhouette of a horse", 
    "coffee": "a cup of coffee on a saucer"
}

# Text Encoder提取文本特征
image_input = torch.tensor(np.stack(images)).cuda()
text_tokens = clip.tokenize(["This is " + desc for desc in texts]).cuda()

# Image Encoder提取图像特征
with torch.no_grad():
    image_features = model.encode_image(image_input).float()
    text_features = model.encode_text(text_tokens).float()

# 计算余弦相似度
image_features /= image_features.norm(dim=-1, keepdim=True)
text_features /= text_features.norm(dim=-1, keepdim=True)
similarity = text_features.cpu().numpy() @ image_features.cpu().numpy().T

N2 对文本 - 图像的余弦相似度可视化如下,可以看到要分类的 8 个图像均能按照最大相似度匹配到正确的文本标签:
在这里插入图片描述

四. 对比实验

CLIP 的实验部分做的非常充足,每一个实验都做的细腻且有说服力,几乎把 CLIP 所有的能力都展示在眼前。OpenAI 并没有开源预训练模型的实验代码,因此实验部分不加赘述,详见 https://arxiv.org/pdf/2103.00020.pdf 。

五. 总结

CLIP 用文本作为监督信号,通过学习图像和文本之间的关联,训练出一种具有很强迁移能力的视觉模型,这种预训练模型能够在没有微调的情况下在下游任务上取得很好的迁移效果。CLIP 的最大贡献在于其打破了固定种类标签的桎梏,让下游任务的推理变得更灵活。

CLIP 出现不久后,各类相关应用就如雨后春笋般出现:Novel AI、CLIPasso、DALL - E2、Stable diffusion 等等。CLIP 的应用场景也不止于图像分类,还可以用于物体检测、视频理解、图像编辑、图像生成等。

六. 复现

OpenAI 没有开源预训练的代码,只开源了训练好的模型和 API,可以直接拿来做下游任务的推理。详见 https://github.com/openai/CLIP


  1. 15【3分钟AI】CLIP这“脑子”是怎么长的? ↩︎

  2. 神器CLIP:连接文本和图像,打造可迁移的视觉模型 ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1201358.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

并发安全问题之--事物失效问题

并发安全问题之–事物失效问题 事物失效常见的6种原因: 1、事物方法非public修饰 2、非事物方法调用事物方法 3、事物方法抛出的异常被捕获了 4、事物方法抛出的异常类型不对 5、事物传播行为不对(事物发生嵌套时有事物传播) 6、事物锁属类没…

IP多播需要使用两种协议(IGMP和多播路由选择协议)

目录 IGMP 多播路由选择协议 组播协议包括组成员管理协议和组播路由协议: 组成员管理协议用于管理组播组成员的加入和离开(IGMP) 组播路由协议负责在路由器之间交互信息来建立组播树(多播路由选择协议) IGMP 图中标有 IP 地址的四台主机都参加了一个多播组,其…

逻辑回归-癌症病预测与不均衡样本评估

1.注册相关库(在命令行输入) pip install scikit-learn pip install pandas pip install numpy 2.导入相关库 import pandas as pd import numpy as np from sklearn.metrics import classification_report from sklearn.model_selection import train_test_split…

初始MySQL(三)(合计函数,分组函数,字符串相关函数,数字相关函数,时间日期函数,加密函数,流程控制函数)

目录 合计/统计函数 count 返回行的总数 sum 合计函数 - avg group by 字符串相关函数 数学相关函数 时间日期相关函数 加密函数 流程控制函数 合计/统计函数 count 返回行的总数 Select count(*) | count (列名) from tablename [WHERE where_definition] #演…

国际阿里云:Windows实例中数据恢复教程!!!

在处理磁盘相关问题时,您可能会碰到操作系统中数据盘分区丢失的情况。本文介绍了Windows系统下常见的数据盘分区丢失的问题以及对应的处理方法,同时提供了使用云盘的常见误区以及最佳实践,避免可能的数据丢失风险。 前提条件 已注册阿里云账…

C/C++满足条件的数累加 2021年9月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C满足条件的数累加 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C/C满足条件的数累加 2021年9月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 现有n个整数,将其中个位数…

2022年03月 Python(五级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 下面有关random的常用方法,描述错误的是? A: random.random()生成一个[0.0,1.0)之间的随机小数 B: random.randint(a,b)生成一个[a,b]之间的随机整数 C: random.choice(seq)从序列中…

RT-DTER 引入用于低分辨率图像和小物体的新 CNN 模块 SPD-Conv

论文地址:https://arxiv.org/pdf/2208.03641v1.pdf 代码地址:https://github.com/labsaint/spd-conv 卷积神经网络(CNN)在图像分类、目标检测等计算机视觉任务中取得了巨大的成功。然而,在图像分辨率较低或对象较小的更困难的任务中,它们的性能会迅速下降。 这源于现有CNN…

Anolis 8.6 安装 Drawio

Anolis 8.6 安装 Drawio 22.1.0 一.RPM版(不建议)二.WAR 包部署 一.RPM版(不建议) Draw RPM 包下载链接 RPM 包直接基于Linux图形化能力部署,服务器类型的Linux系统启动RPM包安装的Draw可能比较复杂 系统版本 ## 1.…

Leetcode刷题详解—— 有效的数独

1. 题目链接:36. 有效的数独 2. 题目描述: 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的…

Spark Job优化

1 Map端优化 1.1 Map端聚合 map-side预聚合,就是在每个节点本地对相同的key进行一次聚合操作,类似于MapReduce中的本地combiner。map-side预聚合之后,每个节点本地就只会有一条相同的key,因为多条相同的key都被聚合起来了。其他节…

Day28力扣打卡

打卡记录 给小朋友们分糖果 II(容斥原理) 链接 大佬的题解 def c2(n: int) -> int:return n * (n - 1) // 2 if n > 1 else 0class Solution:def distributeCandies(self, n: int, limit: int) -> int:return c2(n 2) - 3 * c2(n - limit …

Codeforces Round 788 (Div. 2) E. Hemose on the Tree(树上构造)

题目 t(t<5e4)组样例&#xff0c;每次给定一个数p&#xff0c; 表示一棵节点数为的树&#xff0c; 以下n-1条边&#xff0c;读入树边 对于n个点和n-1条边&#xff0c;每个点需要赋权&#xff0c;每条边需要赋权&#xff0c; 权值需要恰好构成[1,2n-1]的排列 并且当你赋…

基于springboot实现沁园健身房预约管理系统【项目源码】计算机毕业设计

基于springboot实现沁园健身房预约管理系统演示 B/S架构 B/S结构是目前使用最多的结构模式&#xff0c;它可以使得系统的开发更加的简单&#xff0c;好操作&#xff0c;而且还可以对其进行维护。使用该结构时只需要在计算机中安装数据库&#xff0c;和一些很常用的浏览器就可以…

Jenkins简介及Docker Compose部署

Jenkins是一个开源的自动化服务器&#xff0c;用于自动化构建、测试和部署软件项目。它提供了丰富的插件生态系统&#xff0c;支持各种编程语言和工具&#xff0c;使得软件开发流程更加高效和可靠。在本文中&#xff0c;我们将介绍Jenkins的基本概念&#xff0c;并展示如何使用…

[.NET]启明星电子文档管理系统edoc v33.0

启明星电子文档库是一个简单、实用的企业文档在线存储工具。系统采用ASP.NETMSSQL2008 Express开发&#xff0c;所有文档数据都以二进制方式存储在数据库里方便备份。 系统的特点包括&#xff1a; &#xff08;1&#xff09;支持文档在线预览&#xff0c;可以在线预览word&…

pta 装箱问题 Python3

假设有N项物品&#xff0c;大小分别为s1​、s2​、…、si​、…、sN​&#xff0c;其中si​为满足1≤si​≤100的整数。要把这些物品装入到容量为100的一批箱子&#xff08;序号1-N&#xff09;中。装箱方法是&#xff1a;对每项物品, 顺序扫描箱子&#xff0c;把该物品放入足以…

mini-vue 的设计

mini-vue 的设计 mini-vue 使用流程与结果预览&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name&qu…

LLM 面试总结

溜一遍 MLStack.Cafe - Kill Your Next Machine Learning & Data Science Interview https://www.llmforce.com/llm-interview-questions MLStack.Cafe - Kill Your Next Machine Learning & Data Science Interview An interview with a language model, ChatGPT - W…

阿里云国际站:专有宿主机

文章目录 一、专有宿主机的概念 二、专有宿主机的优势 三、专有宿主机的应用场景 一、专有宿主机的概念 专有宿主机&#xff08;Dedicated Host&#xff0c;简称DDH&#xff09;是阿里云专为企业用户定制优化的解决方案。具有物理资源独享、部署更灵活、配置更丰富、性价比…