【论文精读】Learning Transferable Visual Models From Natural Language Supervision

Learning Transferable Visual Models From Natural Language Supervision

  • 前言
  • Abstract
  • 1. Introduction and Motivating Work
  • 2. Approach
    • 2.1. Creating a Sufficiently Large Dataset
    • 2.2. Selecting an Efficient Pre-Training Method
    • 2.3. Choosing and Scaling a Model
    • 2.4. Pre-training
    • 2.5. Using CLIP
  • 3. Analysis
    • 3.1. Initial Comparison to Visual N-Grams
    • 3.2. Zero-Shot Performance
    • 3.3. Representation Learning
    • 3.4. Robustness to Natural Distribution Shift
  • 4. Data Overlap Analysis
  • 5. Broader Impacts
  • 6. Limitations
  • 7. Related Work
  • 8. Conclusion
  • 阅读总结

前言

CLIP作为多模态对比学习里程碑式工作,在创新性,有效性和领域性三个方面都拉满了。它最伟大的地方在于,打破了固有的基于给定类别分类的壁垒,让即使是未见过的类也能给出很好的结果,这大大提升了模型的灵活性,也让其更适配多种下游任务。


Paperhttp://proceedings.mlr.press/v139/radford21a/radford21a.pdf
Codehttps://github.com/OpenAI/CLIP
FromICML2021

Abstract

目前CV系统最佳的模型都是基于固定对象类别进行训练的。这种监督训练方式限制了它们的通用性和可用性,直接从原始文本中学习图像是一种很有前途的替换方案,它可以利用更广泛的监督来源。作者证明,通过预测图像和其对应文本的简单预训练任务是一种高效可扩展的方案。作者从互联网上收集了4亿对图文数据,并在该数据集上重头开始训练。预训练后,通过自然语言来引导学习的视觉概念,实现在下游任务零样本迁移。作者研究了30多个下游任务上CLIP的性能,包括OCR、视频动作识别等,CLIP可以轻松迁移到各种任务上,甚至达到了完全监督训练的结果。

1. Introduction and Motivating Work

直接从原始文本中学习的预训练方法彻底改变了NLP领域,典型的模型如GPT-3,几乎不需要特定于数据集的训练就可以在很多下游任务上取得很好的结果。这一结果表明,大规模无标注数据集可实现的总体监督超过了高质量的人工标注数据集。但是在CV领域,主流的做法仍然是在监督数据集上预训练,亟待无监督的预训练方法在CV中带来突破。
此前就有科研人员在CV无监督学习上进行尝试。包括对图片和其caption建模,采用基于Transformer的机构建模,掩码语言建模以及对比学习等方法从文本中学习图像的表示潜力。
但是上述的方法仍然低于领域的SOTA。作者认为gap的产生主要来自于规模,因此作者研究大规模自然语言监督训练图像模型的行为。最后作者提出了CLIP模型用于对比语言图像预训练,这是一种从自然语言监督中学习的高效且可扩展的方法。
CLIP在预训练期间学习执行一系列任务,效果优于公开可用的ImageNet模型,并且计算高效。作者还发现CLIP模型在零样本下甚至能够达到监督训练的效果。

2. Approach

image.png

2.1. Creating a Sufficiently Large Dataset

作者发现,现有的图文数据集如MS-COCO、Visual Genome,虽然质量很高,但是规模太小,只有10万规模的数据。作为对比,其他CV系统在多达35亿张图像的Instagram数据集上训练。YFCC100M数据集虽然规模上亿,但是质量过低。因此作者构建了一个包含四亿对图文的数据集,这些数据从互联网各种公开来源收集。该数据集称作WIT。

2.2. Selecting an Efficient Pre-Training Method

作者最初的方法也是采用生成式方法来预测图像的标题,但是这种方法计算量大,效率低下。如下图所示:
image.png
因此作者探索一个系统可以解决更容易的代理任务。作者发现,如果将预测任务更换为文本与哪个图像配对,即换成对比学习的方法,效率提升了四倍。
整体的过程第二节开头的流程图和下面的伪代码所示:
image.png
给定一批图文对,分别用两个编码器对图文进行编码,图片的编码器可以是ResNet,也可以是ViT;文本的编码器是Transformer。CLIP通过联合训练图像和文本编码来学习多模态嵌入空间,以最大化批次中N个图像和其对应文本的余弦相似度,并最小化与其它 N 2 − N N^2-N N2N个负样本的余弦相似度。
由于模型规模和数据集相匹配,CLIP不会出现过拟合的问题。作者重头开始训练CLIP,并且将表示对比嵌入空间之间的非线性投影替换为了线性投影。作者还删除了文本转换函数,简化了图像转换函数,只保留了随机裁剪的数据增强。最后作者将温度 τ \tau τ优化为可学习参数(调参成本太高了)。

2.3. Choosing and Scaling a Model

作者考虑了两个不同的图像编码架构,即ResNet50和ViT。前者使用广泛,后者潜力无限。文本编码器采用Transformer。作者分别对这些模型进行了简单的变体,具体可见原文。

2.4. Pre-training

作者训练了5种ReNets和3种ViT,ResNet分别采用了RestNet50,ResNet101,以及另外三个变体,RN50×4,RN50×16,RN50×64,代表相对ResNet50的计算量。对于ViT,训练了ViT-B/32、ViT-B/16和ViT-L/14。最好的训练模型是ViT-L/14@336px,后面所提到的CLIP都是指该模型。

这里@336px代表的是以336像素的分辨率额外进行了预训练,从而提升模型的性能,该方法在FixRes上得到证实。

2.5. Using CLIP

CLIP经过预训练,可以预测图像和其对应的文本是否在WIT中配对。为了探索CLIP应用于下游任务的功能,作者对其进行了零样本性能测试。对于每个数据集,作者使用数据集中的类作为潜在的文本配对的集合。此外,作者还尝试为CLIP提供文本prompt以提升性能。

3. Analysis

3.1. Initial Comparison to Visual N-Grams

Visual N-Grams方法是已知和本文类似的工作,同样进行了zero-shot迁移。下表是CLIP和Visual N-Grams的zeroshot对比:
image.png
在ImageNet上,CLIP将性能从11.5%提升到76.2%。并且达到了与原始ResNet相近的性能。此外,CLIP的Top-5准确率明显更高,当然这样的比较并不公平,Visual N-Grams无论从模型大小还是训练数据的规模都远远落后于CLIP。

3.2. Zero-Shot Performance

CV中的zero-shot一般指的是对未见目标的泛化,本文在更广泛的意义上定义该任务,即对未见的数据集的泛化。虽然无监督学习的研究集中在学习表征上,但是本文希望其作为衡量机器学习特定任务的学习能力。从这个角度出发,一个数据集用于评估特定分布上任务的表现,但是许多热门CV数据集的构建是作为基线指导通用图像分类方法的开发,而不是衡量特定任务的性能。
作者在30多个数据集上进行评估,并与50多个现有的CV系统进行比较。首先是CLIP在分类任务上的表现与监督ResNet50的对比,如下所示:
image.png
CLIP在27个数据集中的16个上取得更好的性能。对于细粒度的分类任务上,CLIP的优势明显,作者推测自然语言为涉及动词的视觉概念提供了更广泛的监督。在一些专门、复杂或抽象上的任务上,CLIP表现相当薄弱,这些结果表明了CLIP在更复杂的任务上能力较差,可能的原因是缺乏相应的领域知识。
虽然将CLIP的零样本能力和完全监督模型进行比较可以体现CLIP的任务学习能力,但是小样本可以是更直接的比较,零样本可以认为是极限的小样本任务。下图可视化了多个模型线性层微调的小样本性能,当然也包括了CLIP的零样本性能。
image.png
有趣的是,4-shot以下的CLIP性能不如零样本CLIP,这是二者方法之间差异导致的,零样本CLIP通过自然语言引导,可以直接具体化视觉概念,但是监督学习需要间接从训练样本中推断概念。但是基于自然语言引导的学习缺点是许多不同的假设和数据保持一致,即不能再提供更细致化的视觉信息,因此当样本数量增多,监督学习的性能还是超过了零样本性能。
和其他模型相比,CLIP的小样本性能都要更优。

3.3. Representation Learning

与其惊叹于CLIP的零样本能力,不如关注于CLIP的表征学习能力。作者对多个模型进行线性层全量数据集微调,得到如下图的结果:
image.png
最好的CLIP模型比现有最好的模型平均高出2.6%,此外,与之前端到端训练的单个计算机视觉模型相比,CLIP模型可以学习到更广泛的任务,结果如右图所示,这是在27个更广泛的数据集上评估的性能。CLIP的优势更加明显,比之前系统提升了2.6%到5%。

3.4. Robustness to Natural Distribution Shift

虽然深度学习在ImageNet的性能超过了人类的判断,但是其仍会出现很多简单的错误。作者认为是否是因为训练和微调都是在ImageNet数据集上进行了,所以来带了观察上鲁棒性的gap。而CLIP并没有在ImageNet上训练,只是做零样本学习,直观上不会利用领域的特定模式或关系。所以CLIP理应表现更高的鲁棒性。下图是零样本CLIP与现有模型在自然分布变化上的性能。
image.png
所有CLIP模型都大幅提高了鲁棒性。这些结果表明,最近面向大规模任务和数据集无关的预训练的转变,可以提供对真实模型性能更准确的评估。

4. Data Overlap Analysis

CLIP性能表现如此好,是否是因为收集得到的4亿样本有下游任务上的数据泄露?为此作者进行了重复数据删除分析。在研究的35个数据集中,有9个数据没有重叠,平均重叠为3.2%,重叠量很小,对结果的影响微乎其微。

5. Broader Impacts

CLIP由于数据集分布的问题,可能会带来一定的偏见。包括种族,性别,年龄的歧视问题。作者希望这项工作能够激发未来对此类模型的能力、缺点和偏差的表征的研究。

6. Limitations

零样本的CLIP只能和传统的ResNet-50基线模型进行比较,远低于现有的SOTA。当前的硬件不足以支撑其达到SOTA的能力。因此有必要进一步研究提高CLIP计算和数据效率。
尽管作者强调零样本的迁移,但是还是反复通过测试性能来指导开发(即调参)。因此作者希望能够有个专门的评估数据集,只用于评估,而不作为调参的工作。

7. Related Work

略。

8. Conclusion

本文提出CLIP,用于研究其迁移学习的能力。为了优化其目标,作者采用自然语言引导的方式来利用模型学习到的特征,实现零样本迁移。在足够的规模下,这种方法的性能可以与特定任务的监督模型相媲美,尽管仍有很大的改进空间。

阅读总结

CLIP作为一种多模态对比学习方法,在创新性,有效性和领域性三个领域上都拉满了,可谓是十分硬核的里程碑式的工作。创新性上,作者采用了文本和图像两个模态信息进行对比学习,让模型同时学到文本和视觉语义信息;零样本实验采用自然语言引导,帮助模型理解任务。有效性上,零样本的CLIP可以达到监督训练ResNet-50的性能,线性层微调也超过了当前多个SOTA方法。领域性上,CLIP是无监督学习方法,本质上是对图像表征的学习,通过文本和图像两个模态信息的结合,CLIP可以学习到强大的表征,在多个CV下游任务上经过简单的微调甚至是零样本,就能得到部分领域的SOTA性能。
由于最近对无监督学习有比较多的理解,在我看来,CLIP这篇工作还有很多可以改进的地方,首先对比学习可以采用生成式的代理任务,更难的代理任务往往能学习到更复杂的表征。其次预训练的数据集可以是清理过的数据,并且进一步扩大规模,图像的编码器可以换成swin Transformer,能够学习到更复杂的图像表征。

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

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

相关文章

基于STM32的ADC采样及各式滤波实现(HAL库,含VOFA+教程)

前言:本文为手把手教学ADC采样及各式滤波算法的教程,本教程的MCU采用STM32F103ZET6。以HAL库的ADC采样函数为基础进行教学,通过各式常见滤波的实验结果进行分析对比,搭配VOFA工具直观的展示滤波效果。ADC与滤波算法都是嵌入式较为…

【FreeRTOS】信号量的相关函数使用及示例解释

FreeRTOS中的信号量是一种用于任务间同步的机制。它可以用来实现任务之间的互斥访问共享资源或者等待某个事件发生。 文章目录 信号量类型1. 二进制信号量(Binary Semaphore):2. 计数信号量(Counting Semaphore)&…

python in excel 如何尝鲜 有手就行

众所周知,微软在8月下旬放出消息python已入驻excel,可到底怎么实现呢。 今天我就将发布python in excel的保姆级教程,开始吧! 获取office 365 账号 首先我们要有微软office365 这时候需要再万能的某宝去找一个账号,…

Android JNI系列详解之ndk-build工具的使用

一、Android项目中使用ndk-build工具编译库文件 之前介绍过CMake编译工具的使用,今天介绍一种ndk自带的编译工具ndk-build的使用。 ndk-build目前主要有两种配置使用方式: 如上图所示,第一种方式是Android.mkApplication.mkgradle的方式生成…

5.Redis-string

string 字符串 字符串类型是 Redis 最基础的数据类型,关于字符串需要特别注意: 1.⾸先Redis中所有 key 的类型都是字符串类型,⽽且其他⼏种数据结构也都是在字符串类似基础上构建的,例如 list 和 set 的元素类型是字符串类型。 2…

Web_单一视频文件mp4转换为m3u分段ts文件实现边下边播

一、下载ffmpeg: Builds - CODEX FFMPEG @ gyan.dev 二、转换视频文件: 先解压缩,会看到如下结构: 进入bin目录,把需要转换的视频文件复制过来,同时新建一个文件夹用来存放转换后的文件,然后按住Shift键同时单击鼠标右键,选择打开Powershell窗口: 输入以下命令(根据…

【管理运筹学】第 7 章 | 图与网络分析(1,图论背景以及基本概念、术语)

文章目录 引言一、图与网络的基本知识1.1 图与网络的基本概念1.1.1 图的定义1.1.2 图中相关术语1.1.3 一些特殊图类1.1.4 图的运算 写在最后 引言 按照正常进度应该学习动态规划了,但我想换换口味,而且动态规划听说也有一定难度,还不一定会考…

UE5- c++ websocket客户端写法

# 实现目标 ue5 c 实现socket客户端,读取服务端数据,并进行解析 #实现步骤 {projectName}.Build.cs里增加 "WebSockets","JsonUtilities", "Json"配置信息,最终输出如下: using UnrealBuildTool;…

基于科大讯飞AIGC创作平台,构建数字人虚拟主播

笔者为体验目前数字人虚拟主播创作视频的质量,特意制作了一段测试视频。 基于讯飞智作创建 总体感受,数字人虚拟主播具有成本低、可定制性强等优点,但是也存在缺乏人情味、技术限制和法律问题等缺点。因此,在使用数字人虚拟主播时…

opencv 提取选中区域内指定hsv颜色的水印

基于《QT 插件化图像算法研究平台》做的功能插件。提取选中区域内指定hsv颜色的水印。 《QT 插件化图像算法研究平台》有个HSV COLOR PICK功能,可以很直观、方便地分析出水印 的hsv颜色,比如, 蓝色:100,180,0,255,100,255。 然后利用 opencv …

QtConcurrent和QFuture的使用

在Qt中,有时候我们会遇到这样一种情况,需要执行一个很长时间的操作,这时候我们的主界面就会卡住。我们的通常做法就是把这个很长时间的操作扔到线程里去处理,可以使用标准库中的线程也可以使用QThread。 如果我们要在这个很长时间…

C# 跨线程访问窗体控件

在不加任何修饰的情况下,C# 默认不允许跨线程访问控件,实际在项目开发过程中,经常使用跨线程操作控件属性,需要设置相关属性才能正确使用,两种方法设置如下: 方法1:告诉编译器取消跨线程访问检…

ModaHub魔搭社区——未来向量数据库会不像传统数据库那样,在国内涌现 200 多家出来?

I. 引言:数据库市场的持续扩张与向量数据库的崛起 随着技术的迭代速度越来越快,技术门槛也在逐渐降低,数据库市场的持续扩张是不可避免的。当前存在着大量的需求,这将吸引越来越多的数据库甚至向量数据库加入竞争。然而,从业界角度看,这种市场扩张是有利的。它可以促使更…

实现公网远程访问:Windows本地快速搭建SFTP文件服务器并配置端口映射

文章目录 1. 搭建SFTP服务器1.1 下载 freesshd服务器软件1.3 启动SFTP服务1.4 添加用户1.5 保存所有配置 2 安装SFTP客户端FileZilla测试2.1 配置一个本地SFTP站点2.2 内网连接测试成功 3 使用cpolar内网穿透3.1 创建SFTP隧道3.2 查看在线隧道列表 4. 使用SFTP客户端&#xff0…

Redis之主从复制解读

目录 基本概述 作用 如何配置主从复制 命令配置(Slaveof ) 配置文件配置 主从复制缺点 主从复制原理 主从复制常见问题解答 命令补充(info replication) 基本概述 主从复制,是指将一台Redis服务器的数据,复制到其他的R…

Python3 条件控制

Python3 条件控制 Python 条件语句是通过一条或多条语句的执行结果(True 或者 False)来决定执行的代码块。 可以通过下图来简单了解条件语句的执行过程: 代码执行过程: if 语句 Python中if语句的一般形式如下所示: if conditi…

python后端,一个账户,多设备登录管理

一个账号,多台设备同时登陆的问题,设计以及实现 参考这篇文章: https://www.alibabacloud.com/help/zh/tair/use-cases/manage-multi-device-logon-from-a-single-user-by-using-tairhash1.0 设计思路 利用的是Redis,主设备的保…

【Java 动态数据统计图】动态数据统计思路案例(动态,排序,动态数组(重点推荐))七(129)

需求:前端根据后端的返回数据:画统计图; 说明: 1.X轴为地域,Y轴为地域出现的次数; 2. 动态展示(有地域展示,没有不展示,且高低排序) Demo案例: …

2023开学礼《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书江西师范大学图书馆

2023开学礼《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书江西师范大学图书馆

MyBatisPlus简单入门

1、简单介绍MyBatisPlus MyBatisPlus是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,完全去SQL化,封装好了大量的CRUD操作。甚至吧CRUD操作封装到了Service层,可以直接在Controller调用现成的CRUD服务层&#xff0c…