CLIP解读

news2024/11/18 23:29:47

1、引言

在计算机视觉领域,通常需要经过训练模型来实现对预定类别目标预测(如分类、检测等任务),但是这种形式会限制模型的通用性。比如我们训练完了一个猫狗分类模型,如果现在希望识别一只老虎,那么原来训练的模型则不可用。在这样一个背景下,CLIP的提出完美解决了这一问题,通过引入大语言模型,在几乎不需要重新训练模型的基础上,实现对几乎所有类别目标的识别,可谓是对传统CV模型的降维打击!

CLIP模型通过学习互联网上4 亿对的图像与文本数据,来获取大量知识与经验,利用文本作为监督信号来训练可迁移的视觉模型。该模型可以轻松地迁移到大多数任务,并且性能通常可以与完全监督的baseline相媲美,而无需任何数据集特定的训练。例如,CLIP在不使用ImageNet任何一个训练样本的情况下,在分类任务上的准确性能与ResNet-50媲美!

 Github:https://github.com/OpenAI/CLIP

2、核心方法

2.1 自然语言监督

与其他训练方法相比,自然语言监督学习有几个潜在的优势。与用于图像分类任务的标准众包标签相比,扩展自然语言监督要容易得多,因为它的标签不需要采用经典的“机器学习兼容格式”(例如标准的 1-of-N 多数投票“黄金标签”)。相反,可以很方便地从互联网上获取大量的监督数据。与大多数无监督或自监督学习方法相比,从自然语言学习具有重要优势,因为它不仅仅学习表示,而且还将该表示与语言连接起来,从而实现灵活的零样本迁移。

2.2 图文数据集构建

现有工作主要使用三个数据集:MS-COCO、Visual Genome 和 YFCC100M。虽然 MS-COCO 和 Visual Genome 是高质量的人群标记数据集,但按照现代标准来看,它们很小,每个数据集大约有 100,000 张训练照片。相比之下,其他计算机视觉系统需要接受多达 35 亿张 Instagram 照片的训练。YFCC100M(可容纳 1 亿张照片)是一种可能的替代方案,但每张图像的元数据稀疏且质量参差不齐。许多图像使用自动生成的文件名作为“标题”或包含相机曝光设置的“描述”。经过过滤仅保留带有自然语言标题和/或英文描述的图像后,数据集缩小了 6 倍,只剩下 1500 万张照片,这与 ImageNet 的大小大致相同。

自然语言监督的一个主要动机是互联网上公开提供的大量这种形式的数据。由于现有数据集没有充分反映这种可能性,因此仅考虑这些数据集的结果会低估这方面研究的潜力。为了解决这个问题,本文构建了一个包含 4 亿对(图像、文本)的新数据集,这些数据集是从互联网上的各种公开来源收集的。生成的数据集的总字数与用于训练 GPT-2 的 WebText 数据集相似。我们将此数据集称为 WebImageText。

2.3 模型选择与扩展

论文中文本编码器固定选择一个包含63M参数的Text Transformer模型,而图像编码器采用了两种的不同的架构:

  • 一是常用的CNN架构ResNet,其中ResNet包含5个不同大小的模型:ResNet50ResNet101RN50x4RN50x16 和 RNx64(后面三个模型是按照EfficientNet缩放规则对ResNet分别增大4x,16x 和 64x 得到)
  • 二是基于Transformer的ViT,ViT选择3个不同大小的模型:ViT-B/32ViT-B/16 和 ViT-L/14

本文还用注意力池机制取代了全局平均池层,注意力池被实现为单层“transformer-style多头 QKV 注意力,其中查询以全局平均池化的图像表示为条件。对于第二种架构,论文使用最近推出的 Vision Transformer (ViT) 进行实验(Dosovitskiy 等人,2020)。论文只进行了微小的修改,即在Transformer之前向组合patch和位置嵌入添加额外的层归一化,并使用略有不同的初始化方案。

CLIP的文本编码器是一个 Transformer 结构,论文中使用 63M 参数、12 层、512 宽的模型,具有 8 个注意力头。该Transformer对具有 49,152 个词汇大小的文本的小写字节对编码 (BPE) 表示进行运算。为了计算效率,最大序列长度上限为 76。文本序列用 [SOS] 和 [EOS] 标记括起来,Transformer最高层在 [EOS] 标记处的激活被视为特征表示经过层归一化然后线性投影到多模态嵌入空间中的文本。文本编码器中使用了屏蔽自注意力,以保留使用预先训练的语言模型进行初始化或添加语言建模作为辅助目标的能力,尽管对此的探索留待未来的工作。

虽然之前的计算机视觉研究通常通过单独增加宽度或深度来缩放模型,但对于 ResNet 图像编码器,论文采用 Tan & Le(2019)的方法,该方法发现在所有宽度、深度和分辨率上分配额外的计算效果优于仅将其分配到模型的一个维度。虽然 Tan & Le (2019) 调整了分配给 EfficientNet 架构每个维度的计算比率,但论文使用了一个简单的基线,即平均分配额外计算以增加模型的宽度、深度和分辨率。对于文本编码器,论文仅将模型的宽度缩放为与计算出的 ResNet 宽度增加成正比,而根本不缩放深度,因为论文发现 CLIP 的性能对文本编码器的容量不太敏感

2.4 模型训练

本文训练了一系列 5 个 ResNet 和 3 个 Vision Transformer。对于 ResNet,本文训练一个 ResNet-50、一个 ResNet-101,然后再训练 3 个,它们遵循 EfficientNet 风格的模型缩放,并使用 ResNet-50 的大约 4 倍、16 倍和 64 倍的计算量。它们分别表示为 RN50x4、RN50x16 和 RN50x64。对于 Vision Transformers,本文训练了 ViT-B/32、ViT-B/16 和 ViT-L/14。

所有的模型都训练32个epoch,采用AdamW优化器,而且训练过程采用了一个较大的batch size:32768。由于数据量较大,最大的ResNet模型RN50x64需要在592个V100卡上训练18天,而最大ViT模型ViT-L/14需要在256张V100卡上训练12天,可见要训练CLIP需要耗费多大的资源。对于ViT-L/14,还在336的分辨率下额外finetune了一个epoch来增强性能,论文发现这个模型效果最好,记为ViT-L/14@336,论文中进行对比实验的CLIP模型也采用这个。

3、模型与原理

3.1 基本原理

CLIP的英文全称是Contrastive Language-Image Pre-training,即一种基于对比文本-图像对的预训练方法或者模型。CLIP是一种基于对比学习的多模态模型,与CV中的一些对比学习方法如moco和simclr不同的是,CLIP的训练数据是文本-图像对:一张图像和它对应的文本描述,这里希望通过对比学习,模型能够学习到文本-图像对的匹配关系。

3.2 模型架构

如下图所示,CLIP包括两个模型:Text Encoder 和 Image Encoder,其中Text Encoder用来提取文本的特征,可以采用NLP中常用的Text Transformer;而 Image Encoder 用来提取图像的特征,可以采用常用 CNN 模型或者 Vision Transformer。

本文对提取的文本特征和图像特征进行对比学习。对于一个包含N个文本-图像对的训练Batch,将N个文本特征和N个图像特征两两组合,CLIP模型会预测出N^2个可能的文本-图像对的相似度,这里的相似度直接计算文本特征和图像特征的余弦相似性(cosine similarity),即上图所示的矩阵。这里共有N个正样本,即真正属于一对的文本和图像(矩阵中的对角线元素),而剩余的N^2-N个文本-图像对为负样本,那么CLIP的训练目标就是最大N个正样本的相似度,同时最小化N^2-N个负样本的相似度。

3.2 zero-shot分类

在计算机视觉中,以图像分类任务为例,zero-shot学习通常指的是去识别未见过类别的研究。虽然无监督学习领域的许多研究都集中在机器学习系统的表征学习能力上,但论文主张zero-shot迁移是衡量机器学习系统任务学习能力的一种方式。

与CV中常用的先预训练然后微调不同,CLIP可以直接实现zero-shot的图像分类,即不需要任何训练数据,就能在某个具体下游任务上实现分类,这也是CLIP亮点和强大之处。用CLIP实现zero-shot分类很简单,只需要简单的两步:

  • 根据任务的分类标签构建每个类别的描述文本:A photo of {label},然后将这些文本送入Text Encoder得到对应的文本特征,如果类别数目为NN,那么将得到NN个文本特征;
  • 将要预测的图像送入Image Encoder得到图像特征,然后与NN个文本特征计算缩放的余弦相似度(和训练过程一致),然后选择相似度最大的文本对应的类别作为图像分类预测结果,进一步地,可以将这些相似度看成logits,送入softmax后可以到每个类别的预测概率值。

4、实验

4.1 Compare Visual N-Grams to CLIP

论文在3个分类数据集上进行了zero-shot效果对比,如下表所示,可以看到CLIP模型在效果上远远超过之前的模型,其中在ImageNet数据集可以达到76.2,这和全监督的ResNet50效果相当,不用任何训练数据就能达到这个效果是相当惊艳的。

4.2 Prompt engineering and Ensembling

简单来说,prompt learning的核心是通过构建合适prompt(提示)来使预训练模型能够直接应用到下游任务,这和之前的预训练+微调属于不同的范式。论文中也提到,如果直接采用类别标签作为文本描述,那么很多文本就是一个单词,缺少具体的上下文,而且也和CLIP的训练数据不太一致,效果上会不如采用A photo of {label}(ImageNet数据集上可以提升1.3%)。论文也实验了采用80个不同的prompt来进行集成,发现在ImageNet数据集上能带来3.5%的提升,具体见CLIP公开的notebook。下图对比了基于ResNet的CLIP模型直接采用类别名与进行prompt engineering和ensembling的效果对比:


5、局限性

论文的最后也对CLIP的局限性做了讨论,这里简单总结其中比较重要的几点:

  • CLIP的zero-shot性能虽然和有监督的ResNet50相当,但是还不是SOTA,作者估计要达到SOTA的效果,CLIP还需要增加1000x的计算量,这是难以想象的;
  • CLIP的zero-shot在某些数据集上表现较差,如细粒度分类,抽象任务等;
  • CLIP在自然分布漂移上表现鲁棒,但是依然存在域外泛化问题,即如果测试数据集的分布和训练集相差较大,CLIP会表现较差
  • CLIP并没有解决深度学习的数据效率低下难题,训练CLIP需要大量的数据

6、总结

论文研究了是否有可能将 NLP 中与任务无关的网络规模预训练的成功转移到另一个领域。为了优化其训练目标,CLIP 模型在预训练期间学习执行各种任务。然后可以通过自然语言提示来利用这种任务学习,以实现向许多现有数据集的零样本迁移。在足够的规模下,这种方法的性能可以与特定任务的监督模型相媲美,尽管仍有很大的改进空间。不管怎么说,CLIP的提出为解决计算机视觉任务提供了另一种思路,与ViT一样同为重量级的工作!                                                               

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

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

相关文章

【Qt】Qt中的常用属性

需要云服务器等云产品来学习Linux可以移步/-->腾讯云<--/官网&#xff0c;轻量型云服务器低至112元/年&#xff0c;新用户首次下单享超低折扣。 目录 一、QWidget属性一览 二、属性enabled(可用状态) 三、属性geometry(修改位置和尺寸) 1、QRect类型的结构 2、geome…

nginx介绍及搭建

架构模型 Nginx是由一个master管理进程、多个worker进程组成的多进程模型。master负责管理worker进程&#xff0c;worker进程负责处理网络事件&#xff0c;整个框架被设计为一种依赖事件驱动、异步、非阻塞的模式。 优势&#xff1a; 1、充分利用多核&#xff0c;增强并发处理…

FMEA赋能人工智能:开启智能风险预防新纪元!

在数字化浪潮席卷全球的今天&#xff0c;人工智能&#xff08;AI&#xff09;已经渗透进我们生活的方方面面&#xff0c;而如何确保AI系统的稳定与安全&#xff0c;成为摆在科技界和工业界面前的一大挑战。FMEA&#xff08;失效模式与影响分析&#xff09;作为一种经典的质量管…

汽车专业翻译应该如何进行呢?

随着全球汽车行业的不断发展&#xff0c;大量的汽车业相关技术资料、产品说明、会议交流、推广分享等都需要进行语言转换&#xff0c;进而促进了汽车翻译业务的需求旺盛。那么&#xff0c;汽车专业翻译应该如何进行呢&#xff0c;北京哪个翻译公司比较好&#xff1f; 业内人士指…

VSCode单机活动栏图标无法收起

如果活动栏为展开状态&#xff0c;单击活动栏图标可以正常收起&#xff0c;但无法通过再次单击打开&#xff0c;解决方案如下&#xff1a; 设置->工作台->外观&#xff1a; Activity Bar:Icon Click Behavior: 切换为默认的toggle

由浅到深认识C语言(14):枚举

该文章Github地址&#xff1a;https://github.com/AntonyCheng/c-notes 在此介绍一下作者开源的SpringBoot项目初始化模板&#xff08;Github仓库地址&#xff1a;https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址&#xff1a;https://blog.csdn…

Post请求出现Request header is too large

问题描述&#xff1a; 在做项目的时候&#xff0c;前端请求体太大的时候&#xff0c;出现Request header is too large问题&#xff0c;后端接口如下&#xff1a; 前端请求接口返回问题如下&#xff1a; 解决方案&#xff1a; 问题原因&#xff1a;这是因为我们在做Springboo…

YOLOv9有效改进专栏汇总|未来更新卷积、主干、检测头注意力机制、特征融合方式等创新![2024/3/18]

​ 专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;助力高效涨点&#xff01;&#xff01;&#xff01; 专栏介绍 YOLOv9作为最新的YOLO系列模型&#xff0c;对于做目标检测的同学是必不可少的。本专栏将针对2024年最新推出的YOLOv9检测模型&#xff0…

进程的概念 | PCB | Linux下的task_struct | 父子进程和子进程

在讲进程之前首先就是需要去回顾一下我们之前学的操作系统是干嘛的&#xff0c;首先操作系统是一个软件&#xff0c;它是对上提供一个良好高效&#xff0c;稳定的环境的&#xff0c;这是相对于用户来说的&#xff0c;对下是为了进行更好的软硬件管理的&#xff0c;所以操作系统…

js @keydown的使用

2024.3.18今天我学习了el-input实现文本域换行的效果&#xff1a; 代码如下&#xff1a; <template><el-input keydown.native"handleKeyCode($event)"/> </template><script> export default{data(){return{input_data:}},method:{handle…

【回溯专题part1】【蓝桥杯备考训练】:n-皇后问题、木棒、飞机降落【已更新完成】

目录 1、n-皇后问题&#xff08;回溯模板&#xff09; 2、木棒&#xff08;《算法竞赛进阶指南》、UVA307&#xff09; 3、飞机降落&#xff08;第十四届蓝桥杯省赛C B组&#xff09; 1、n-皇后问题&#xff08;回溯模板&#xff09; n皇后问题是指将 n 个皇后放在 nn 的国…

MC0204 世界警察

世界警察小码哥来谈判了&#xff0c;恐怖分子在银行挟持了 n 个人质&#xff0c;每个人质都所属一个国家&#xff0c;第 i 个人质所属的国家为 ci​&#xff0c;人质排成了一排&#xff0c;位置都是固定的。经过商讨&#xff0c;恐怖分子允许小码哥可以带走任意一段连续区间内的…

微信小程序小案例实战

.wxml: <view class "title">狂飙经典语录 </view> <view class"out"><block wx:if"{{listArr.length}}"> <!-- bloock不会影响排版--><view class"list"><view class"row" wx:…

CSS基础笔记

第一课 CSS&#xff08;层叠式样式表&#xff09;&#xff1b;样式规则由 选择器、 属性 以及 属性值 组成 内联样式表、内嵌样式表、外部样式表 内联样式表 写在标签里 用 style 属性进行表示&#xff0c;优先级比 内嵌 和 外部 高 <h1 style"color: blue; text-…

osgEarth学习笔记3-第二个Osg QT程序

原文链接 打开QT Creator&#xff0c;新建一个窗口项目。 QT版本如下&#xff1a; 修改pro文件 QT core gui greaterThan(QT_MAJOR_VERSION, 4): QT widgets CONFIG c11 DEFINES QT_DEPRECATED_WARNINGS SOURCES \main.cpp \mainwindow.cpp HEADERS \mainwindow…

2024蓝桥杯每日一题(DFS)

备战2024年蓝桥杯 -- 每日一题 Python大学A组 试题一&#xff1a;奶牛选美 试题二&#xff1a;树的重心 试题三&#xff1a;大臣的差旅费 试题四&#xff1a;扫雷 试题一&#xff1a;奶牛选美 【题目描述】 听说最近两斑点的奶牛最受欢迎&#xff0c;…

Fay数字人<助理版>具体编译步骤,手把手带你避坑 | 多图预警 ( python 3.11 编译环境 超详细教程 )

Fay数字人<助理版>具体编译步骤 系列教程环境描述一、搭建编译环境1、下载anaconda2、下载Fay(带货版)源码 二、Fay编译参数配置&#xff08;手把手教学&#xff09;(一)Fay具体编译步骤(二)配置 aliyun key(三)配置 aliyun 智能语音交互app(四)修改并配置自己的FAY数字…

Java 应用程序监控

Java 监控涉及监控在 Java 上运行的应用程序的关键性能指标&#xff0c;以及 支持 Java 应用程序的服务器。Java 监控可以帮助优化 Java 应用程序的性能&#xff0c;发现和识别以下问题&#xff1a; 导致常见的应用程序问题&#xff0c;并在问题影响最终用户之前解决问题。 Ja…

Vue.js中使用Web Workers来创建一个秒表

在Vue.js中使用Web Workers来创建一个秒表应用可以提高性能&#xff0c;因为Web Workers可以在后台线程中运行&#xff0c;不阻塞主线程。下面是一个简单的Vue.js秒表应用的示例&#xff0c;该应用使用Web Worker来执行计时功能。 首先&#xff0c;我们创建一个Web Worker文件…

ASPICE-SYSSWE

文章主要内容&#xff1a; Automotive SPICE 过程参考模型 SYS.1 需求挖掘 过程ID SYS.1 过程名称 需求挖掘 过程目的 需求挖掘过程的目的是:在产品和/或服务的整个生命周期内收集、处理和跟踪不断变化的利益相关方的需要和需求&#xff0c;从而建立一个需求基线&#x…