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

article/2025/6/9 3:50:22

从自然语言监督中学习可迁移的视觉模型
虽然有点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的这篇文章也给后续很多文章和领域提供了思路,值得一读吧。


http://www.hkcw.cn/article/QikqAIQbia.shtml

相关文章

【连接器专题】案例:产品测试顺序表解读与应用

在查看SD卡座连接器的规格书,一些测试报告时,你可能会看到如下一张产品测试顺序表。为什么会出现一张测试顺序表呢? 测试顺序表的使用其实定义测试环节的验证的“路线图”和“游戏规则”,本文就以我人个经验带领大家一起看懂这张表并理解其设计逻辑。 测试顺序表结构 测试…

【MATLAB代码】制导方法介绍与例程——三点法|三维空间,动态目标导引(订阅专栏后可直接查看源代码)

三点法导引是一种导弹制导策略,通过计算导弹、目标和制导站之间的相对位置来确保导弹准确追踪移动目标。该方法利用三角定位和动态调整,实时更新导弹的飞行路径,以提高命中率,广泛应用于军事导弹和无人机等领域。文中有完整的matlab源代码,订阅专栏后即可查看 文章目录 代…

AUTOSAR CP——Can模块

Can模块的主要配置信息 其他相关模块 通讯框图 Can网络唤醒配置:当硬件支持的时候,可以通过Bus唤醒,见《TechnicalReference_Can_ Rscan》 P30 _5.5.1 Wakeup Functionality:RH850芯片时,在不使用SBC时,…

项目执行中缺乏灵活应对机制,如何增强适应性?

项目执行中缺乏灵活应对机制可以通过建立风险预警机制、培养团队快速响应能力、制定动态调整方案、加强团队沟通协作、引入敏捷管理理念来增强适应性。 其中,培养团队快速响应能力尤为重要。这种能力意味着当项目遇到突发状况时,团队能迅速评估问题、确定…

【无刷电机FOC进阶基础准备】【02 常用电磁名词】

目录 磁导率气隙磁感应强度磁通量磁链电感值感应电动势 本节介绍一些高频的电磁名词,大部分在高中阶段出现过,这部分内容不会很严谨,只介绍一些实用的概念。 磁导率 描述一个材料自身的磁性受外部磁场影响的能力,比如磁导率低的材…

接口自动化测试之pytest 运行方式及前置后置封装

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 一、Pytest 优点认知 1.可以结合所有的自动化测试工具 2.跳过失败用例以及失败重跑 3.结合allure生产美观报告 4.和Jenkins持续集成 5.很多强大的插件 pytest-htm…

PH热榜 | 2025-06-03

1. Knowledge 标语:像认识朋友一样去销售给潜在客户,因为你其实了解他们! 介绍:Knowledge 是一个针对个人的销售智能平台,它利用行为数据和心理测评来识别市场上的潜在买家,并指导销售团队以最真实、最有…

【Java】性能调优:利用 jstack 寻找 Java 程序卡顿的真相

前言 当 Java 程序出现给人感觉 “卡顿”、“响应慢”、CPU 风调高、系统给予调用总是延迟时,我们需要采用系统层和虚拟机层的合理工具来分析细节。 本文仅从 JVM 的角度来分析,研究如何利用 jstack 进行 Java 程序性能调优。 Java 程序卡顿的常规原因…

Skyeye 云智能制造办公系统 v3.16.6 发布

Skyeye 云智能制造,采用 Springboot (微服务) Layui UNI-APP Ant Design Vue 的低代码平台。包含 30 多个应用模块、50 多种电子流程,CRM、PM、ERP、MES、ADM、EHR、笔记、知识库、项目、门店、商城、财务、多班次考勤、薪资、招聘、云售后、论坛、公…

Python+requests+pytest+allure自动化测试框架

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 1、核心库 requests request请求 openpyxl excel文件操作 loggin 日志 smtplib 发送邮件 configparser unittest.mock mock服务 2、目录结构 base utils …

06 APP 自动化- H5 元素定位

文章目录 H5 元素定位1、APP 分类2、H5 元素3、H5 元素定位环境的搭建4、代码实现: H5 元素定位 1、APP 分类 1、Android 原生 APP2、混合 APP(Android 原生控件H5页面)3、纯 H5 App 2、H5 元素 H5 元素容器 WebViewWebView 控件实现展示网页 3、H5 元素定位环…

项目计划未与实际情况同步更新,如何保持计划的实时性?

项目计划未与实际情况同步更新,可以通过建立实时更新机制、加强信息共享和沟通、引入敏捷管理工具、实施持续监控流程、明确计划更新责任来保持计划的实时性。 其中,建立实时更新机制至关重要。实时更新机制确保项目计划始终反映最新的进展和问题状况&am…

会议效率低下,应该怎么办

面对会议效率低下的问题,建议从以下几个方面进行优化:明确会议目标、控制会议时长、限定参与人员、使用协作工具、制定会议输出机制。其中,明确会议目标 是提升效率的关键起点。很多无效会议根源在于“为什么开会”这个问题没有回答清楚。只有…

LabVIEW基于 DataSocket从 OPC 服务器读取数据

LabVIEW 中基于 DataSocket 函数从 OPC 服务器读取数据的功能,为工业自动化等场景下的数据交互提供了解决方案。通过特定函数实现 URL 指定、连接建立与管理、数据读取,相比传统 Socket 通信和 RESTful API ,在 OPC 服务器数据交互场景有适配…

数据挖掘顶刊《IEEE Transactions on Knowledge and Data Engineering》2025年5月研究热点都有些什么?

本推文对2025年5月出版的数据挖掘领域国际顶级期刊《IEEE Transactions on Knowledge and Data Engineering》进行了分析,对收录的62篇论文的关键词与研究主题进行了汇总,并对其中的研究热点进行了深入分析,希望能为相关领域的研究人员提供有…

结合 AI 生成 mermaid、plantuml 等图表

AI 画图 AI 画图并不是真的让 AI 画一个图片,而是让 AI 根据你的需求,生成对应的需求文本,再根据 “文本画图” 来生成图片。 Mermaid mermaid 支持流程图、时序图、架构图等等多种图片绘制。当然最终生成的效果和样式会根据不同的“文本代…

Java基础(二):八种基本数据类型详解

Java基础系列文章 Java基础(一):发展史、技术体系与JDK环境配置详解 Java基础(二):八种基本数据类型详解 目录 一、比特(bit)和字节(Byte)1、定义与换算关系2、应用场景差异 二、各类型详解1、整数类型&a…

数据安全合规体系构建的“三道防线“

引言 "三道防线"模型架构图 #mermaid-svg-wbeppAbwa3Vb3nL2 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-wbeppAbwa3Vb3nL2 .error-icon{fill:#552222;}#mermaid-svg-wbeppAbwa3Vb3nL2 .error-text{fi…

MySQL强化关键_019_索引优化

目 录 一、最左前缀原则 1.完全使用索引 2.部分使用索引 3.不使用索引 4.效率折损 (1)使用范围查找 (2)索引断开 二、索引失效场景 1. 索引列参与运算 2.索引列模糊查询以“%”开始 3.索引列是字符串类型,查…

ABAP锁对象

1、锁表 在一些业务场景中,我们需要将某张表或某张表中的某些数据锁定,防止多人对该表进行操作,导致数据出现问题。SAP对于表的锁定,有专门的锁对象。 1.1、创建锁 事务代码SE11,表的锁对象名称,需要以E…