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

CLIP 基础模型:从自然语言监督中学习可转移的视觉模型

一、说明

在本文中,我们将介绍CLIP背后的论文(Contrastive Language-I mage Pre-Training)。我们将提取关键概念并分解它们以使其易于理解。此外,还对图像和数据图表进行了注释以澄清疑问。

        图片来源:

论文:从自然语言监督中学习可转移的视觉模型

代码:https://github.com/OpenAI/CLIP

首次发布时间:26 年 2021 月 <> 日

作者:亚历克·拉德福德、金钟旭、克里斯·哈拉西、阿迪亚·拉梅什、加布里埃尔·吴、桑迪尼·阿加瓦尔、吉里什·萨斯特里、阿曼达·阿斯克尔、帕梅拉·米什金、杰克·克拉克、格雷琴·克鲁格、伊利亚·苏茨克弗

类别: 多模态深度学习, 计算机视觉, 自然语言处理, 基础模型, 表示学习

二、背景简述

        CLIP(Contrastive Language-I mage Pre-Training)是一个多模态模型,用于学习自然语言和图像之间的对应关系。它根据从互联网收集的 400 亿个文本图像对进行训练。正如我们将在本文后面发现的那样,CLIP 具有强大的零镜头性能,这意味着它在与训练不同的下游任务中表现良好,无需执行任何微调。

CLIP旨在:

  1. 将自然语言处理中已知的大规模预训练技术(例如GPT家族,T5和BERT)的成功应用于计算机视觉。
  2. 通过使用自然语言而不是固定的集合类标签,实现灵活的零镜头功能。

        为什么你可能会问自己这是一件大事?首先,许多计算机视觉模型都是在众包标记数据集上训练的。这些数据集通常包含数十万个样本。一些例外情况是在百万个或两位数样本的范围内。可以想象,这是一个非常耗时且昂贵的过程。另一方面,自然语言模型的数据集通常要大几个数量级,并且是从互联网上抓取的。其次,如果对象检测模型已在某些类上训练,并且您想要添加额外的类,则需要在数据中标记此新类并重新训练模型。

CLIP将自然语言和图像特征相结合的能力与其零镜头性能相结合,导致许多其他流行的基础模型的广泛采用,例如UnCLIP,EVA,SAM,Stable Diffusion,GLIDE或VQGAN-CLIP,仅举几例。

三、CLIP的方法

        现在让我们深入了解 CLIP 的方法。图 1 中描绘的波纹管显示了 CLIP 的架构及其训练过程

图 1 — CLIP 的架构和训练过程。

         模型体系结构由两个编码器模型组成,每个模型对应一个模态。对于文本编码器,使用转换器,而图像编码器使用ResNet或ViT(视觉转换器)的版本。学习的线性变换(每种模态一个)将特征转换为大小匹配的嵌入。最后,计算相反模态的每个嵌入之间的余弦相似性,并通过学习的温度标量进行缩放。在训练过程中,匹配对之间的余弦相似性最大化,而不正确的对之间的余弦相似性最小化,因此框架名称中的术语“对比”。

        当然,除了大型数据集之外,还有一些微妙之处对成功至关重要。首先,对比学习方法在很大程度上取决于批量大小 N。沿着正确的样本提供的负样本越多,学习信号就越强。CLIP 的批量大小为 32,768,这是相当大的。其次,CLIP不会学习确切措辞的匹配,而是一种更简单的代理任务,只学习整个文本,也称为单词袋(BoW)。

有趣的事实:使用 ResNet50x64 作为图像编码器的 CLIP 版本在 18 V592 GPU 上训练了 100 天,而使用 ViT 模型的版本在 12 V256 GPU 上训练了 100 天。换句话说,分别在单个 GPU 上超过 29 年和超过 8 年(忽略将使用不同的批量大小的事实)。

        训练模型后,它可用于对图像执行对象分类。问题是:如何使用尚未训练对图像进行分类的模型进行分类,也没有输入类标签但文本提示?图2.演示如何:

图 2 — CLIP 的图像分类架构。

        类标签可以看作是由单个单词组成的文本提示。为了告诉模型哪些类可用于分类任务,将一组 N 个类输入到模型中。与在一组固定标签上训练的分类模型相比,这是一个巨大的优势。我们现在可以输入 3 个类或 100 个类;这是我们的选择。正如我们稍后将看到的,为了提高 CLIP 的性能,类标签被转换为提示,以便为模型提供进一步的上下文。然后将每个提示馈送到文本编码器,然后转换为嵌入向量。

        输入图像被馈送到图像编码器以获得嵌入向量。

        然后计算每对文本和图像嵌入的余弦相似性。对获得的相似性值应用 Softmax 以形成概率分布。最后,选择概率最高的值作为最终预测。

四、实验和消融

        CLIP论文介绍了大量的实验和消融。在这里,我们将介绍五个,我认为从中理解CLIP的成功很重要。先介绍一下要点(由 CLIP 的作者制定),然后我们将深入了解细节:

  1. 培训效率:CLIP在零镜头传输时比我们的图像标题基线更有效
  2. 文本输入格式:快速工程和集成可提高零射性能
  3. 零镜头性能:零镜头剪辑具有完全监督基线的竞争力
  4. 少镜头性能:零射程 CLIP 优于少射程线性探头
  5. 分配班次:零镜头 CLIP 比标准 ImageNet 型号更能抵抗分布偏移

4.1 培训效率

        在训练期间,图像编码器和文本编码器是联合训练的,这意味着同时使用单个训练目标。CLIP不仅执行对比学习方案,而且将文本提示作为一个整体与给定的图像进行比较,因此单词的顺序无关紧要。它只是一个“文字袋”。短语“我的名字是萨沙”与“萨沙的名字是我的”产生相同的嵌入。

        预测一袋单词而不是正确的单词及其在短语中的位置是一个更容易的代理目标。图3.波纹管显示了 ImageNet 上针对训练用于预测精确单词的初始转换器模型、训练用于预测单词袋的初始转换器模型以及使用单词袋执行对比学习的 CLIP 模型的训练样本数的零镜头精度。

“CLIP 在零镜头传输方面比我们的图像标题基线效率高得多” — CLIP 作者

图 3 — 零射效率
 

4.2 文本输入格式

        正如我们在图 2 中看到的,为了执行对象分类,类标签已转换为文本提示。当然,这不是偶然的,因为CLIP完全可以用一个词。这样做是为了利用语言的描述性,并提供上下文来解决可能的歧义。让我们以“拳击手”这个词为例。它可能是一种狗或一种运动员。CLIP的作者已经表明,文本提示的格式非常重要,可以提高性能并提高效率。

“快速工程和集成提高了零镜头性能” — CLIP 作者

图 4— 提示工程和集成与无上下文类名

4.3 零镜头性能

        在另一个实验中,作者将CLIP的零镜头图像分类性能与专门在比较数据集上训练的模型进行了比较。

“零镜头 CLIP 与完全监督的基线具有竞争力” — CLIP 作者

图 5— 零镜头剪辑与监督基线

4.4 少镜头性能

        虽然零镜头预测器没有对下游任务进行微调,但很少有镜头检测器可以。作者对多个公开可用的预训练模型进行了实验,并将其在20个不同数据集上的少数镜头性能与零镜头和少镜头CLIP进行了比较。少数镜头模型在每个班级的 1、2、4、8 和 16 个样本上进行了微调。

        有趣的是,零镜头 CLIP 的表现大致与 4 镜头 CLIP 一样好。

        如果将CLIP与其他模型进行比较,则必须考虑所比较的公开可用模型(即BiT,SimCLR和ResNet)已经在不同且较小的数据集上预先训练为CLIP模型。

“零镜头 CLIP 优于少镜头线性探头” — CLIP 作者

图 6— 少镜头性能
 

4.5 分布转移

        一般来说,模型对分布偏移的鲁棒性是指它能够在不同数据分布的数据上表现得与在训练数据的数据分布上一样好。理想情况下,它的性能同样好。实际上,它的性能会下降。

        零镜头CLIP的鲁棒性已与ResNet101 ImageNet模型进行了比较。两种模型都在 ImageNet 的自然分布偏移上进行评估,如图 7 所示。

“零镜头 CLIP 比标准 ImageNet 模型更能适应分布偏移” — CLIP 作者

图 7 — 分布偏移
 

五、更多阅读和资源

萨沙·基尔希

        正如本文开头提到的,CLIP已被大量项目广泛采用。以下是使用 CLIP 的论文列表:

  1. [解剪辑]使用 CLIP 潜伏生成分层文本条件图像
  2. [伊娃]探索大规模遮罩视觉表示学习的局限性
  3. [山姆]细分任何内容
  4. [稳定扩散]基于潜在扩散模型的高分辨率图像合成
  5. [滑翔]使用文本引导扩散模型实现逼真的图像生成和编辑
  6. [VQGAN-CLIP]使用自然语言指导生成和编辑开放域图像

        如果您想深入了解实现并自己测试,则提供存储库列表:

  • OpenAI 的官方回购
  • Python Notebook 可以玩 CLIP
  • OpenCLIP:CLIP的开源实现

相关文章:

CLIP 基础模型:从自然语言监督中学习可转移的视觉模型

一、说明 在本文中&#xff0c;我们将介绍CLIP背后的论文&#xff08;Contrastive Language-I mage Pre-Training&#xff09;。我们将提取关键概念并分解它们以使其易于理解。此外&#xff0c;还对图像和数据图表进行了注释以澄清疑问。 图片来源&#xff1a; 论文&#xff1a…...

解读性能指标TP50、TP90、TP99、TP999

TP指标说明 TP指标: 指在一个时间段内&#xff0c;统计该方法每次调用所消耗的时间&#xff0c;并将这些时间按从小到大的顺序进行排序, 并取出结果为&#xff1a;总次数*指标数对应TP指标的值&#xff0c;再取出排序好的时间。 TPTop Percentile&#xff0c;Top百分数&#…...

【无标题】mysql 截取两个,之间字符串

截取两个&#xff0c;之间字符串 select area,SUBSTRING_INDEX(et.area,,,1) as XZQH1,if(length(et.area)-length(replace(et.area,,,))>1,SUBSTRING_INDEX(SUBSTRING_INDEX(et.area,,,2),,,-1),NULL) AS XZQH2,if(length(et.area)-length(replace(et.area,,,))>2,SUBS…...

全局的键盘监听事件

一、设定全局键盘监听事件 放在vue 的created()或者mounted ()中&#xff0c;可对整个文档进行键盘事件监听。 new Vue({ created() { window.addEventListener(keydown, this.handleKeydown); }, beforeDestroy() { window.removeEventListener(keydown, this.handleK…...

Qt自定义QSlider(支持水平垂直)

实现背景&#xff1a; Qt本身有自己的QSlider&#xff0c;为什么我们还要自定义实现呢&#xff0c;因为Qt自带的QSlider存在一个问题&#xff0c;当首尾为圆角时&#xff0c;滑动滚动条到首尾时会出现圆角变成矩形的问题。当然如果QSS之间的margin和滑动条的圆角控制的好的话是…...

会话控制学习

文章目录 介绍cookieexpress中使用cookie获取cookie session配置区别 介绍 cookie express中使用cookie 退出登录就是删除cookie 获取cookie 添加中间键后&#xff0c;直接获取 session 配置 区别...

dweb-browser阅读

dweb-browser阅读 核心模块js.browser.dwebjmm.browser.dwebmwebview.browser.dwebnativeui.browser.dweb.sys.dweb plaoc插件 核心模块 js.browser.dweb 它是一个 javascript-runtime&#xff0c;使用的是 WebWorker 作为底层实现。它可以让您在 dweb-browser 中运行 javasc…...

ChatGPT:使用fastjson读取JSON数据问题——如何使用com.alibaba.fastjson库读取JSON数据的特定字段

ChatGPT&#xff1a;使用fastjson读取JSON数据问题——如何使用com.alibaba.fastjson库读取JSON数据的特定字段 有一段Json字符串&#xff1a; {"code": 200,"message": "success","data": {"total": "1","l…...

2、ARM处理器概论

一、ARM处理器概述 1、ARM的含义 ARM&#xff08;Advanced RISC Machines&#xff09;有三种含义&#xff0c;一个公司的名称、一类处理器的通称、一种技术 ARM公司&#xff1a; 成立于1990年11月&#xff0c;前身为Acorn计算机公司主要设计ARM系列RISC处理器内核授权ARM内…...

【Python】福利彩票复式模拟选号程序

【效果】 【注意】 逻辑是用Random模拟10000次复试彩票选号,然后给出最大可能性一组。但是模拟终究是模拟,和现实彩票结果没有任何联系,下载下来玩就是了,没人能保证模拟出中奖号码,不要投机,不要投机! 【修改】 代码很简单,如果想改成不是复式的,自行修改即可。 如…...

Pytorch 机器学习专业基础知识+神经网络搭建相关知识

文章目录 一、三种学习方式二、机器学习的一些专业术语三、模型相关知识四、常用的保留策略五、数据处理六、解决过拟合与欠拟合七、成功的衡量标准 一、三种学习方式 有监督学习&#xff1a; 1、分类问题 2、回归问题 3、图像分割 4、语音识别 5、语言翻译 无监督学习 1、聚类…...

torch 和paddle 的GPU版本可以放在同一个conda环境下吗

新建conda 虚拟环境&#xff0c;python 版本3.8.17 虚拟机&#xff0c;系统centos 7,内核版本Linux fastknow 3.10.0-1160.92.1.el7.x86_64 &#xff0c;显卡T4&#xff0c;nvidia-smi ,460.32.03&#xff0c;对应cuda 11.2&#xff0c;安装cuda 11.2和cudnn&#xff0c;conda…...

MYBATIS-PLUS入门使用、踩坑记录

转载&#xff1a; mybatis-plus入门使用、踩坑记录 - 灰信网&#xff08;软件开发博客聚合&#xff09; 首先引入MYBATIS-PLUS依赖&#xff1a; SPRING BOOT项目&#xff1a; <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus…...

C# 静态类和sealed类(密封类)的区别

网上看到很多文章写静态类&#xff0c;和密封类&#xff0c;但是鲜有它们的对比总结&#xff0c;在此简单总结一下&#xff1a; 静态类&#xff08;Static Class&#xff09;&#xff1a; 静态类不能被实例化&#xff0c;其成员都是静态的&#xff0c;可以通过类名直接访问。静…...

el-table如何实现自动缩放,提示隐藏内容

前提问题&#xff1a;大屏展示中某一个区域是表格内容&#xff0c;当放大或缩小网页大小时&#xff0c;表格宽度随之缩放&#xff0c;但表格内容未进行缩放&#xff0c;需要表格内容与网页大小同时进行缩放&#xff0c;且表头和表格内容宽度不够未显示全时&#xff0c;需要进行…...

CRM客户管理软件对出海企业的帮助与好处

2023我们走出了疫情的阴霾&#xff0c;经济下行压力大&#xff0c;面对内需的不足&#xff0c;国内企业纷纷选择出海&#xff0c;拓展海外业务增加企业营收。企业出海不是一件易事&#xff0c;有了CRM系统可以让公司事半功倍&#xff0c;下面就来说一说CRM客户管理软件能为出海…...

【QT--使用百度地图API显示地图并绘制路线】

QT--使用百度地图API显示地图并绘制路线 前言准备工作申请百度地图密钥(AK)安装开发环境 开发过程新建项目ui界面GPSManager类主窗口Map 效果展示 前言 先吐槽一下下&#xff0c;本身qt学的就不咋滴&#xff0c;谁想到第一件事就是让写一个上位机工具&#xff0c;根据CAN总线传…...

C数据结构二.练习题

一.求级数和 2.求最大子序列问题:设给定一个整数序列 ai.az..,a,(可能有负数).设计一个穷举算法,求a 的最大值。例如,对于序列 A {1,-1,1,-1,-1,1,1,1,1.1,-1,-1.1,-1,1,-1},子序列 A[5..9](1,1,1,1,1)具有最大值5 3.设有两个正整数 m 和n,编写一个算法 gcd(m,n),求它们的最大公…...

猫头虎博主第5️⃣期赠书活动:《Java官方编程手册(第12版·Java 17)套装上下册》

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…...

(1)数据库 MSQ 数据库 安装 使用 以及增删改查

下载官网&#xff1a;MySQL :: Download MySQL Shell 常见的数据库分为&#xff1a; 关系型数据库&#xff0c; Oracle、MySQL、SQLServer、Access非关系型数据库&#xff0c; MongoDB、Redis、Solr、ElasticSearch、Hive、HBase 安装过程 使用过程...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...

Python实现简单音频数据压缩与解压算法

Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中&#xff0c;压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言&#xff0c;提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...

Linux操作系统共享Windows操作系统的文件

目录 一、共享文件 二、挂载 一、共享文件 点击虚拟机选项-设置 点击选项&#xff0c;设置文件夹共享为总是启用&#xff0c;点击添加&#xff0c;可添加需要共享的文件夹 查询是否共享成功 ls /mnt/hgfs 如果显示Download&#xff08;这是我共享的文件夹&#xff09;&…...

python基础语法Ⅰ

python基础语法Ⅰ 常量和表达式变量是什么变量的语法1.定义变量使用变量 变量的类型1.整数2.浮点数(小数)3.字符串4.布尔5.其他 动态类型特征注释注释是什么注释的语法1.行注释2.文档字符串 注释的规范 常量和表达式 我们可以把python当作一个计算器&#xff0c;来进行一些算术…...