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

【论文精读】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,能够学习到更复杂的图像表征。

相关文章:

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

Learning Transferable Visual Models From Natural Language Supervision 前言Abstract1. Introduction and Motivating Work2. Approach2.1. Creating a Sufficiently Large Dataset2.2. Selecting an Efficient Pre-Training Method2.3. Choosing and Scaling a Model2.4. P…...

缓存和分布式锁笔记

缓存 开发中,凡是放入缓存中的数据都应该指定过期时间,使其可以在系统即使没有主动更新数据也能自动触发数据加载进缓存的流程。避免业务崩溃导致的数据永久不一致 问题。 redis作为缓存使用redisTemplate操作redis 分布式锁的原理和使用 分布式加锁&…...

React笔记(七)Antd

一、登录功能 首先要使用antd,要先下载 yarn add antd 登录页面关键代码 import React from react /*1、如果要在react中完成样式隔离,需要如下操作1)命名一个xx.module.scss webpack要求2) 在需要的组件中通过ES6方式进行导入&#x…...

无涯教程-Android - RadioButton函数

RadioButton有两种状态:选中或未选中,这允许用户从一组中选择一个选项。 Radio Button 示例 本示例将带您完成一些简单的步骤,以展示如何使用Linear Layout和RadioButton创建自己的Android应用程序。 以下是修改后的主要Activity文件 src/MainActivity.java 的内容。 packa…...

kafka如何避免消费组重平衡

目录 前言: 协调者 重平衡的影响 避免重平衡 重平衡发生的场景 参考资料 前言: Rebalance 就是让一个 Consumer Group 下所有的 Consumer 实例就如何消费订阅主题的所有分区达成共识的过程。在 Rebalance 过程中,所有 Consumer 实例…...

浅谈一下企业信息化管理

企业信息化管理 企业信息化是指将企业的生产过程,物料,事务,财务,销售等业务过程数字化,通过各种信息系统网络价格成新的信息资源,提供给各层次的人们东西观察各类动态业务中的一切信息,以便于…...

北京APP外包开发团队人员构成

下面是一个标准的APP开发团队构成,但具体的人员规模和角色可能会根据项目的规模和需求进行调整。例如,一些小型项目或初创公司可能将一些角色合并,或者聘请外包团队来完成部分工作。北京木奇移动技术有限公司,专业的软件外包开发公…...

Node基础and包管理工具

Node基础 fs 模块 fs 全称为 file system,称之为 文件系统,是 Node.js 中的 内置模块,可以对计算机中的磁盘进行操作。 本章节会介绍如下几个操作: 1. 文件写入 2. 文件读取 3. 文件移动与重命名 4. 文件删除 5. 文件夹操作 6. …...

【python使用 Pillow 库】缩小|放大图片

当我们处理图像时,有时候需要调整图像的大小以适应特定的需求。本文将介绍如何使用 Python 的 PIL 库(Pillow)来调整图像的大小,并保存调整后的图像。 环境准备 在开始之前,我们需要安装 Pillow 库。可以使用以下命令…...

解决Ubuntu 或Debian apt-get IPv6问题:如何设置仅使用IPv4

文章目录 解决Ubuntu 或Debian apt-get IPv6问题:如何设置仅使用IPv4 解决Ubuntu 或Debian apt-get IPv6问题:如何设置仅使用IPv4 背景: 在Ubuntu 22.04(包括 20.04 18.04 等版本) 或 Debian (10、11、12)系统中,当你使用apt up…...

Xubuntu16.04系统中解决无法识别exFAT格式的U盘

问题描述 将exFAT格式的U盘插入到Xubuntu16.04系统中,发现系统可以识别到此U盘,但是打不开,查询后发现需要安装exfat-utils库才行。 解决方案: 1.设备有网络的情况下 apt-get install exfat-utils直接安装exfat-utils库即可 2.设备…...

Pygame中Trivia游戏解析6-1

1 Trivia游戏简介 Trivia的含义是“智力测验比赛中的各种知识”。Trivia游戏类似智力竞赛,由电脑出题,玩家进行作答,之后电脑对玩家的答案进行判断,给出结果并进行评分。该游戏的界面如图1所示。 图1 Trivia游戏界面 2 游戏流程 …...

idea中创建springboot项目显示Spring Initializr Error

很长时间不创建springboot项目了,今天发现创建完成idea显示: Spring Initializr Error error:status:500项目中没有pom.xml文件.检查了一下原因是在创建的时候类型没有创建正确(之前记得都是默认),默认如下 需要选择创建maven完整工程那种,最下面那种只会生成pom.xml不会…...

VScode 国内下载源 以及 nvm版本控制器下载与使用

VScode 国内下载源 进入官网 https://code.visualstudio.com/ 点击下载 复制下载链接到新的浏览器标签 将地址中的/stable前的az764295.vo.msecnd.net换成vscode.cdn.azure.cn,再回车就会直接在下载列表啦。 参考大神博客 2.使用nvm 对 node 和npm进行版本控制…...

GO|经典错误之回车与\n

学习go的输入输出语句,于是在笔记本上写了这么一段代码: func main() {reader : bufio.NewReader(os.Stdin)input, _ : reader.ReadString(\n)input input[:len(input)-1]i, _: strconv.Atoi(input)fmt.Println(i) } 运行,输入99&#xff…...

【MATLAB第71期】基于MATLAB的Abcboost自适应决策树多输入单输出回归预测及多分类预测模型(更新中)

【MATLAB第71期】基于MATLAB的Abcboost自适应决策树多输入单输出回归预测及多分类预测模型(更新中) 一、效果展示(多分类预测) 二、效果展示(回归预测) 三、代码获取 CSDN后台私信回复“71期”即可获取下…...

ARM编程模型-内存空间和数据

ARM属于RISC体系,许多指令单周期指令,是32位读取/存储架构,对内存访问是32位,Load and store的架构,只有寄存器对内存,不能内存对内存存储,CPU通过寄存器对内存进行读写操作。 ARM的寻址空间是线…...

leetcode原题: 最大数

题目: 给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。 注意:输出结果可能非常大 所以你需要返回一个字符串而不是整数。 示例1: 输入:nums [10,2] 输…...

docker 是什么

目录 docker是一个软件 Docker 是一种运行于 Linux 和 Windows 上的软件,用于创建、管理和编排容器。 为什么要使用 Docker? 1、 更快速的交付和部署 2、 更高效的虚拟化 3、 更轻松的迁移和扩展 4 、更简单的管理 docker是一个软件,是…...

基于Gin框架的HTTP接口限速实践

在当今的微服务架构和RESTful API主导的时代,HTTP接口在各个业务模块之间扮演着重要的角色。随着业务规模的不断扩大,接口的访问频率和负载也随之增加。为了确保系统的稳定性和性能,接口限速成了一个重要的话题。 1 接口限速的使用场景 接口…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...

【SpringBoot自动化部署】

SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一,能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时,需要添加Git仓库地址和凭证,设置构建触发器(如GitHub…...

鸿蒙(HarmonyOS5)实现跳一跳小游戏

下面我将介绍如何使用鸿蒙的ArkUI框架,实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...