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

论文阅读:CLIP:Learning Transferable Visual Models From Natural Language Supervision

从自然语言监督中学习可迁移的视觉模型
虽然有点data/gpu is all you need的味道,但是整体实验和谈论丰富度上还是很多的,也是一篇让我多次想放弃的文章,因为真的是非常长的原文和超级多的实验讨论,隔着屏幕感受到了实验的工作量之大。

Abstract

最先进的计算机视觉系统被训练来预测一组固定的预定对象类别。 这种受限制的监督形式限制了它们的通用性和可用性,因为需要额外的标记数据来指定任何其他视觉概念。 直接从原始文本中学习图像是一种很有前途的选择,它利用了更广泛的监督来源。 我们证明了预测哪个标题与哪个图像相匹配的简单预训练任务是一种有效且可扩展的方法,可以在从互联网收集的4亿对(图像,文本)数据集上从头开始学习SOTA图像表示。 在预训练之后,使用自然语言来参考学习到的视觉概念(或描述新的概念),从而实现模型向下游任务的零样本转移。我们通过对30多个不同的现有计算机视觉数据集进行基准测试来研究这种方法的性能,这些数据集涵盖了OCR、视频中的动作识别、地理定位和许多类型的细粒度对象分类等任务。 该模型不平凡地转移到大多数任务,并且通常与完全监督的基线竞争,而不需要任何数据集特定的训练。 例如,我们在ImageNet zero-shot上匹配原始ResNet-50的精度,而不需要使用它所训练的128万个训练样本中的任何一个。

Introduction and Motivating Work

在过去几年中,直接从原始文本中学习的预训练方法彻底改变了NLP

与任务无关的目标,如自回归和masked语言建模,已经在计算、模型容量和数据方面扩展了许多数量级,稳步提高了能力。“文本到文本”作为标准化输入输出接口的发展使任务无关架构能够零射传输到下游数据集,从而消除了对专门输出头或数据集特定定制的需要。 像GPT-3在使用定制模型的许多任务中具有竞争力,而几乎不需要特定数据集的训练数据。

这些结果表明,在网络规模的文本集合中,现代预训练方法可获得的总体监督优于高质量的人群标记NLP数据集。然而,在计算机视觉等其他领域,在人群标记数据集(如ImageNet)上预训练模型仍然是标准做法(Deng et al., 2009)。 直接从网络文本中学习的可扩展预训练方法能否在计算机视觉领域取得类似的突破? 先前的工作令人鼓舞。

总之可以整理为,之前的很多工作其实并不是方法不行而是数据不够多,所以效果不好,并且泛化性能非常有限,而作者提出的方法称为CLIP(Contrastive LanguageImage Pre-training)在各个数据集上都表现出了很高的指标,有更强的鲁棒性。例如在ImageNet上,CLIP同监督训练的ResNet50达到了同等的水平。

通过4亿数据在大量数据集表现出了优秀的效果,但是后文中对比中在MNIST效果却很差,作者后文给出的原因是发现数据集很少有和MNIST相似的数据。所以后续文章作者也总结了很多CLIP的局限性,但是他依旧在很多数据集表现的很好这也是不能忽视的。
在这里插入图片描述

Approach

2.1 自然语言监督

以自然语言为(标签)指导模型学习具有很多优势。

首先,不需要人工标注,可以快速规模化。可以充分利用互联网上的信息。

其次,强大的zero-shot迁移学习能力。传统的机器学习对输入标签格式有特殊要求,在推理阶段需要遵循相同的格式。数据集的格式限制了模型的使用范围。传统的机器学习模型不能在数据集定义的格式之外的任务上使用。使用自然语言作为监督信号,能够处理任何以自然语言作为输入的任务。而自然语言是最直观、通用的输入格式。所以模型可以方便地迁移到其它场景。

第三,让CV模型学习到视觉概念的自然语言描述。将“苹果”图片和“苹果”单词建立联系,也就真正学习到了图片的语义信息。

第四,多模态。以自然语言作为桥梁,用一个大模型学习文本、图片甚至视频的理解。

2.2 创建足够大的数据集

现有数据集主要有3个,MS-COCO、Visual Genome、YFCC100M。前两者是人工标注的,质量高但是数据量小,大约只有0.1M。YFCC100M大约有100M图片,但是质量堪忧,有些标题只有无意义的名字,过滤后,这个数据集缩小至15M,大约和ImageNet差不多大。(显然这个数据量是不够的)

OpenAI自己构建了一个400M的数据集,使用500K个查询进行搜索,每个查询大约有20K个“图像—文本“对。该数据集被称为WIT(webimagetext),数据量和GPT-2使用的差不多。

2.3 有效的预训练方法

OpenAI的第一个尝试类似于VirTex,将基于CNN的图片编码器和文本transformer从头训练,去预测图片的标题。然而这个方法很快遇到了困难。从下图中可以看出,一个63M的语言模型,使用了基于ResNet50的图片编码器的两倍计算量,但是效率却是预测词袋的1/3(3x efficiency)。

很快,OpenAI尝试了第二种方案——对比学习。将文本和图片的embedding进行相似度比较,从图片2可以看出训练速度是预测词袋的4倍。

对方法的描述:给定一个大小为N的batch,CLIP需要预测这NxN个对是否属于同一语义。CLIP利用图片和文本编码器将图片和文本的embedding进行基于cosine距离的打分,使N个成对的分数变大,使N^2-N个非成对的分数减小。模型训练是基于对称的交叉熵说损失。下图展示了训练的伪代码:
在这里插入图片描述
代码过程描述:

第1-2行:利用图片编码器和文本编码器提取图片和文本的高维表征。

第3-4行:利用可学习线性变换(无偏置)将图片和文本表达映射到同一语义空间

第5行:内积进行相似度比较,同时乘上温度系数 exp(\tau) 。

第6-9行:分别沿图像(每一条文本同不同图片的相似度)和文本轴(每一条图片同文本的相似度)计算交叉熵,相加处以2得到对称损失。

第一个是我们从头开始训练CLIP,而不使用ImageNet权重初始化图像编码器或使用预训练权重初始化文本编码器。

第二个我们只使用线性投影将每个编码器的表示映射到多模态嵌入空间。 我们没有注意到两个版本之间的训练效率差异,并推测非线性投影可能仅在自监督表示学习方法中与当前图像的细节共同适应。本文没有使用非线性变换;

第三个是直接利用原始文本即单个句子;

第四个是图片的预处理只有大小变换后随机方形剪切;

最后,控制softmax中对数范围的温度参数τ在训练过程中被直接优化为对数参数化的乘法标量,以避免变成超参数。

2.4 选择和缩放模型

视觉:resnet或者transformer

文本:transformer

2.5 训练

训练了8个模型,不同的深度、宽度、patch等,32epoch、adam、batchsiz=32768、混合精度训练

训练完后对模型用更大的size进行了一个fintune了1epoch称其为CLIP模型
本文构造了一个更简单的学习任务。利用对比学习的思想,只预测哪段文本作为一个整体是和图片成对出现的,不需要预测文本的确切内容。用对比学习的目标( contrastive objective)代替了预测学习的目标(predictive objective)。这个约束放宽了很多,学习需要的算力减少很多。

作者发现,仅仅把训练目标任务从预测型换成对比性,训练的效率就能提升4倍。如图所示。
在这里插入图片描述

2.6 使用CLIP

在下游任务测试时,有两种使用CLIP的方法。第一种,利用文本prompt进行预测,将预测的embedding同类别的embedding进行相似度匹配,实现分类任务;第二种,额外训练linear probe进行预测。

在这里插入图片描述
这张图片展示了基于对比学习训练(1)和使用零样本预测(2&3)。对比学习是利用文本—图像对数据,判别当前图片是否于文本匹配,从而学习图像的高维表征;零样本预测时,利用prompt构建不同类别的embedding,然后同图片匹配从而进行分类。
生成句子例如这是一张xx照片,然后通过text encoder 编码得到文本特征,然后用文本特征和图像特征进行cosine 相似度 进入softmax得到概率分布

总之,我认为的一个重要贡献是它打通了文本和图片理解的界限,催生了后面多模态的无限可能。后续的“以图生文”,“以文搜图”都有赖这一点。

Experiments

3.1 zero-short 迁移

作者动机:解决之前工作迁移其他任务困难的问题。

3.1.3对比其他方法

CLIP在零样本迁移效果和有监督的res50相当。CLIP同Visual N-Grams进行了横向对比。如Table1中所示,几乎在所有数据集上CLIP都远超过Visual N-Grams(体现CLIP的zero-shot能力)
在这里插入图片描述
3.1.4提示工程与集成

a photo of a {label}这种方法可以提升在imagenet上1.3%的准确率,prompt对于分类的性能很重要。因此OpenAI自己尝试了很多prompt去提升分类的准确率。比如在Oxford-IIIT Pet数据集中,使用prompt “A photo of a {label}, a type of pet.”就好于单单使用“A photo of a {label},”。还讲了一些在Food101、FGVC、OCR、satellite数据集上的经验。

3.2特征学习

特征学习是指在下游任务数据集上用全部的数据重新训练。有两种方式衡量预训练阶段学习到的特征好不好:

linear prob将预训练好的模型“冻住”,不改变其参数,在之上训练一个分类头。
finetune整个网络参数都可以调整,端到端地学习。微调一般更灵活,效果更好。
本文采用linear prob的方式。不需要大量调参,评测流程可以标准化。

总结

这里还有很多数据分布问题、模型不足、实验讨论、和人类对比等等,实验非常丰富,就不一一展开, 总的来说,原因花这么多人、gpu、数据实现的CLIP想必在gpt 4中也有很多该实验的影子和贡献,openai的这篇文章也给后续很多文章和领域提供了思路,值得一读吧。

相关文章:

论文阅读:CLIP:Learning Transferable Visual Models From Natural Language Supervision

从自然语言监督中学习可迁移的视觉模型 虽然有点data/gpu is all you need的味道,但是整体实验和谈论丰富度上还是很多的,也是一篇让我多次想放弃的文章,因为真的是非常长的原文和超级多的实验讨论,隔着屏幕感受到了实验的工作量之…...

在图像分析算法部署中应对流行趋势的变化|文献速递-深度学习医疗AI最新文献

Title 题目 Navigating prevalence shifts in image analysis algorithm deployment 在图像分析算法部署中应对流行趋势的变化 01 文献速递介绍 机器学习(ML)已开始革新成像研究与实践的诸多领域。然而,医学图像分析领域存在显著的转化鸿…...

CAMEL-AI开源自动化任务执行助手OWL一键整合包下载

OWL 是由 CAMEL-AI 团队开发的开源多智能体协作框架,旨在通过动态智能体交互实现复杂任务的自动化处理,在 GAIA 基准测试中以 69.09 分位列开源框架榜首,被誉为“Manus 的开源平替”。我基于当前最新版本制作了免安装一键启动整合包。 CAMEL-…...

Selenium 中 JavaScript 点击的优势及使用场景

*在 Selenium 自动化测试中,使用 JavaScript 执行点击操作(如driver.execute_script("arguments[0].click();", element))相比直接调用element.click()有以下几个主要优势: 1. 绕过元素不可点击的限制 问题场景&#x…...

Linux系统-基本指令(5)

文章目录 mv 指令cat 指令(查看小文件)知识点(简单阐述日志)more 和 less 指令(查看大文件)head 和 tail 指令(跟查看文件有关)知识点(管道)时间相关的指令&a…...

C++ set数据插入、set数据查找、set数据删除、set数据统计、set排序规则、代码练习1、2

set数据插入&#xff0c;代码见下 #include<iostream> #include<set> #include<vector>using namespace std;void printSet(const set<int>& s) {for (set<int>::const_iterator it s.begin(); it ! s.end(); it) {cout << *it <…...

[android]MT6835 Android 指令启动MT6631 wifi操作说明

问题说明 MT6835使用指令启动wifi 使用andorid指令启动 2.4G启动方式 cmd wifi start-softap ctltest wpa2 11111111 -b 2 5G启动指令 cmd wifi start-softap ctltest wpa2 11111111 -b 5 使用linux指令启动 指令启动wifi 新建br-lan brctl addbr br-lan 关闭wifi a…...

C# winform教程(二)

一、基础控件 常用的基础控件主要有按钮&#xff0c;文本&#xff0c;文本输入&#xff0c;组&#xff0c;进度条&#xff0c;等等。 基础控件 名称含义详细用法Button按钮Buttoncheckbox多选按钮Combobox下拉选择groupbox组控件label标签&#xff0c;显示文字panel控件集合&a…...

Java详解LeetCode 热题 100(25):LeetCode 141. 环形链表(Linked List Cycle)详解

文章目录 1. 题目描述1.1 链表节点定义 2. 理解题目2.1 环形链表的可视化2.2 核心难点 3. 解法一&#xff1a;HashSet 标记访问法3.1 算法思路3.2 Java代码实现3.3 详细执行过程演示3.4 执行结果示例3.5 复杂度分析3.6 优缺点分析 4. 解法二&#xff1a;快慢指针法&#xff08;…...

【仿生机器人】刀剑神域计划——仿生机器人.亚丝娜

我在做仿生机器人头&#xff0c;硬件部分已经搭建完毕&#xff0c;包括头部和颈部&#xff0c;用的23个舵机驱动机器人做表情&#xff0c;也支持头部的旋转&#xff08;就是颈部的功能&#xff09;&#xff0c;安装了摄像头在眼睛中&#xff0c;还有麦克风接受周围环境声音&…...

ARM架构推理Stable Diffusiond

代码仓库&#xff1a; https://github.com/siutin/stable-diffusion-webui-docker.git Docker容器地址&#xff1a; https://hub.docker.com/r/siutin/stable-diffusion-webui-docker/tags git clone https://github.com/siutin/stable-diffusion-webui-docker.git cd stabl…...

仓颉项目调试配置与多文件场景下的问题解析

1. 调试配置指南 在 VS Code 中配置好仓颉开发工具链后&#xff0c;只需按下 F5 或 Fn F5 即可启动调试。 在 CodeArts IDE for Cangjie 中&#xff0c;需先通过右上角的 编辑配置 -> 新增配置项 -> 选择 Cangjie (cjdb) Debug -> 选择 launch 模式 -> 点击 确认…...

Easyui悬停组件

文章目录 一、EasyUI 官方悬停解决方案&#xff1a;Tooltip 组件1. 基础用法2. 高级配置项 二、进阶场景&#xff1a;Datagrid 表格悬停扩展1. 监听行事件2. 第三方扩展包&#xff08;流云大神版&#xff09; 三、自定义悬停样式四、常见问题解决 在EasyUI中&#xff0c;没有直…...

MySQL 8.0 OCP 英文题库解析(十)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题81~90 试题81:…...

Python Pytest

1.Pytest用例发现规则 1.1 模块名(python文件)名必须以 test_ 开头或 _test 结尾&#xff0c;如 test_case&#xff0c;case_test&#xff0c;下划线都不能少 1.2 模块不能放在 . 开头的隐藏目录或者叫 venv的目录下&#xff0c;virtual environment&#xff0c;叫venv1都可以…...

金属膜电阻和碳膜电阻

1、性能比较 特性金属膜电阻对比碳膜电阻精度0.1% ~ 1%5% ~ 10%温度系数15 ~ 50 ppm/℃&#xff08;极低漂移&#xff09;200 ~ 1000 ppm/℃噪声0.1 μV/V 以下&#xff08;超低噪声&#xff09;1~5 μV/V&#xff08;中高频噪声显著&#xff09;高频特性寄生电感/电容小&…...

DNS (Domain Name System) 域名系统 将域名解析为 IP 地址

✅ DNS 服务器是指什么&#xff1f; **DNS 服务器&#xff08;Domain Name System Server&#xff09;是一个将域名&#xff08;如 www.baidu.com&#xff09;解析为 IP 地址&#xff08;如 220.181.38.150&#xff09;**的服务器。 &#x1f9e0; 一句话理解&#xff1a; DNS…...

如何轻松删除 Android 上的文件(3 种方法)

Android 手机是非常强大的设备&#xff0c;可让我们存储大量的个人数据&#xff0c;从照片和视频到应用程序和文档。然而&#xff0c;随着时间的推移&#xff0c;您的设备可能会因不再需要的文件而变得混乱。删除这些文件有助于释放空间并提高性能。在本指南中&#xff0c;我们…...

[特殊字符] Unity UI 性能优化终极指南 — ScrollRect篇

ScrollRect ManualScrollRect API 我参考了官方最新文档&#xff08;基于UGUI 3.0包&#xff09;&#xff0c;加上实际性能测试经验&#xff0c;直接给你梳理&#xff1a; &#x1f3af; Unity UI 性能优化终极指南 — ScrollRect篇 &#x1f9e9; 什么是 ScrollRect&#xff…...

自适应流量调度用于遥操作:面向时间敏感网络的通信与控制协同优化框架

英文标题&#xff1a;Adaptive Flow Scheduling for Teleoperation: A Communication and Control Co-Optimization Framework over Time-Sensitive Networks 中文标题&#xff1a;自适应流量调度用于遥操作&#xff1a;面向时间敏感网络的通信与控制协同优化框架 作者信息 …...

阿里云服务器-解决宝塔登录不成功

出现问题&#xff1a; This site can’t be reached XX.XX.XXX.XXX took too long to respond. Try: Checking the connection Checking the proxy and the firewall Running Windows Network Diagnostics ERR_CONNECTION_TIMED_OUT 可能是端口未开放 原因&#xff1a;服务器…...

6.3 day 35

知识点回顾&#xff1a; 三种不同的模型可视化方法&#xff1a;推荐torchinfo打印summary权重分布可视化进度条功能&#xff1a;手动和自动写法&#xff0c;让打印结果更加美观推理的写法&#xff1a;评估模式 可视化 理解深度学习网络最重要的2点&#xff1a; 1.了解损失如何定…...

graphviz, dot, Error: lost rA sA edge; 独立的模块

1) 有向图dot文件 digraph R { node [shaperecord]; { ranksame rA sA tA } { ranksame uB vB wB } rA -> sA; sA -> vB; t -> rA; uB -> vB; wB -> u; wB -> tA; } 2&#xff09;出现报警信息 Warning: flat edge between adjacent …...

MicroROS简述

文章目录 前言1. 什么是MicroROS2. MicroROS的功能2.1 Micro-ROS 的核心作用&#xff1a;桥梁 翻译官2.2 为什么服务端&#xff08;Agent&#xff09;能知道设备端的消息和服务&#xff1f; 3. MicroROS出现的背景3.1 机器人系统的“断层”问题3.2 物联网与边缘计算的兴起3.3 …...

LeetCode Hot100刷题——完全平方数

279. 完全平方数 给你一个整数 n &#xff0c;返回 和为 n 的完全平方数的最少数量 。 完全平方数 是一个整数&#xff0c;其值等于另一个整数的平方&#xff1b;换句话说&#xff0c;其值等于一个整数自乘的积。例如&#xff0c;1、4、9 和 16 都是完全平方数&#xff0c;而…...

Axure-元件流程图

Axure-02 线框图元件使用 目标 元件基本介绍 基础元件的使用 表单型元件的使用 菜单与表格元件的使用 案例&#xff1a;个人简历表 元件基本介绍 概述 在Axure RP中&#xff0c;元件是构建原型图的基础模块。 将元件从元件库里拖拽到画布中&#xff0c;即可添加元件到你…...

LangChain系列之LangChain4j集成Spring Bot

<<< 书接上文 2. 代码示例 以下是一个集成 LangChain4j API 的 Spring Boot 应用示例。 2.1 创建 Spring Boot 项目 你可以使用SpringInitializr (https://start.spring.io/)来创建一个 Spring Boot 项目。选择 Maven 项目、Java 语言以及合适的 Spring Boot 版本…...

Python爬虫解析动态网页:从渲染到数据提取

一、动态网页与静态网页的区别 在开始之前&#xff0c;我们需要理解动态网页与静态网页的区别。静态网页的内容在服务器端是固定的&#xff0c;每次请求都会返回相同的结果&#xff0c;通常以HTML文件的形式存储。而动态网页则不同&#xff0c;其内容是通过JavaScript在客户端…...

LLMs之MCP:如何使用 Gradio 构建 MCP 服务器

LLMs之MCP&#xff1a;如何使用 Gradio 构建 MCP 服务器 导读&#xff1a;本文详细介绍了如何使用Gradio构建MCP服务器&#xff0c;包括前提条件、构建方法、关键特性和相关资源。通过一个简单的字母计数示例&#xff0c;演示了如何将Gradio应用转换为LLM可以使用的工具。Gradi…...

VBA模拟进度条

在上一章中我跟大家介绍了ProgressBar控件的使用方法&#xff0c;但由于该控件无法在64位版本的Office中运行&#xff0c;为此我们可以采用Lable控件来模拟进度条的变化&#xff0c;以解决在64位版本的Office中无进度条控件的问题。 一、设计思路 添加两个重叠的Lable标签控件…...