CLIP是啥?

news2024/11/24 4:04:09

论文地址:https://arxiv.org/pdf/2103.00020v1

代码地址:GitHub - openai/CLIP: CLIP (Contrastive Language-Image Pretraining), Predict the most relevant text snippet given an image

题目解读
Transferable Visual model指不使用特定数据集的数据训练模型,但是得到的模型却可以在多个不同的特定数据集上表现出良好的性能,该模型具有Transferable的性质。

From natural language supervision指从语言文本中提取有效的信息,辅助CV模型的构建和训练。

一、CLIP是什么?
答:CLIP是一个预训练模型,就像BERT、GPT、ViT等预训练模型一样。首先使用大量无标签数据训练这些模型,然后训练好的模型就能实现,输入一段文本(或者一张图像),输出文本(图像)的向量表示。CLIP和BERT、GPT、ViT的区别在于,CLIP是多模态的,包含图像处理以及文本处理两个方面内容,而BERT、GPT是单文本模态的,ViT是单图像模态的。

二、作者提出CLIP的动机?
答:1.现有CV模型大多都只能预测已知的图像类别,对于没有见过的图像类别,需要额外的信息才能识别。那么文本其实就提供了这样的额外信息。所以利用图像对应的文本数据,也许就能使模型能够分辨未见类的图像。

2.最近NLP领域中出现的BERT、GPT等预训练模型表明,用大规模的无监督数据训练模型,可以在多个下游NLP任务上获得非常好的结果,有些甚至超过使用人工标注的数据训练出的模型。而现有的CV模型基本都是基于人工标注的数据集训练的(比如ImageNet),那么仿照NLP中预训练模型,如果使用大量无监督(也就是非人工标注)的图像,CV模型能否实现突破呢?

3.目前也有很多研究者注意到natural language在CV中的作用,并尝试利用起来。但是实际的实验结果通常低于其他特殊设计的使用有监督数据的模型。但是作者认为,他们在CV模型中加入natural language数据后实际结果不够好的原因可能是数据规模仍然不够大,而不是natural language数据对CV无用。

三、CLIP的预训练数据是什么?
     预训练数据是作者新构建的WIT数据集。鉴于现有CV数据集仍然不够大,且很少包含足够的natural language数据(大多CV数据集中的文本数据只是图像的类别指示,比如dog,cat等单词),所以作者从网上爬了4亿个图像-文本对,构建了数据集WIT(WebImageText)。WIT数据集中的文本都是图像相关的sentence,而不是single word,因此提供了足够的natural language数据。

四、CLIP的预训练任务是什么?
  CLIP的预训练任务是预测给定的图像和文本是否是一对(paired),使用对比学习(contrastive learning)的loss。

我们知道,为了能够充分利用大量的无监督数据,预训练任务一般都是自监督的,比如BERT的预训练任务是masked language model(MLM)和next sentence prediction(NSP)。VirTex的预训练任务是预测图像的caption。按照这种思路,本文先尝试将预测图像的caption(也就是WIT数据集中图像对应的text sentence)作为预训练任务,如下图中蓝色线条预测text中的一个个words,结果甚至不如简单的直接预测text的bag-of-words encoding来得又快又好(如下图中橙色线条)。但是作者认为,上述两种方法都是预测文本的exact words,这样显然是很难的,因为文本表达具有丰富性和多样性,同一张图像能够有非常多不同的与之对应的合理表述文本。

所以本文采取了对比学习的方法来预训练CLIP。直接将image对应的text sentence作为一个整体,来判断text和image是否是一对。对于一个包含N个图像-文本对的batch而言,其中正样本是每张图像及其对应的文本,一共有N个,而其他所有图像和文本的组合都是不成对的,也就是负样本是N×N-N个。实验发现该方法在效果和性能上都很好,如下图绿色线条。

五、CLIP的结构?
CLIP的主要结构是一个文本编码器Text Encoder和一个图像编码器Image Encoder,然后计算文本向量和图像向量的相似度以预测它们是否为一对。

CLIP将图像和文本先分别输入一个图像编码器image_encoder和一个文本编码器text_encoder,得到图像和文本的向量表示 I-f 和 T_f 。然后将图像和文本的向量表示映射到一个joint multimodal sapce,得到新的可直接进行比较的图像和文本的向量表示 I_e 和T_e (这是多模态学习中常用的一种方法,不同模态的数据表示之间可能存在gap,无法进行直接的比较,因此先将不同模态的数据映射到同一个多模态空间,有利于后续的相似度计算等操作)。然后计算图像向量和文本向量之间的cosine相似度。最后,对比学习的目标函数就是让正样本对的相似度较高,负样本对的相似度较低。

经过上述训练过程,CLIP实际上得到了两个训练好的文本编码器和图像编码器,后续的工作就围绕这两个编码器展开。

作者在本文中实验了5种ResNet模型和3种Visual Transformer模型作为图像编码器,文本编码器则用了Transformer。经过实验发现,这些不同的图像编码器中效果最好的是ViT-L/14@336px。

六、文中多次提到的Zero shot transfer of CLIP 是什么意思?
   本文的CLIP预训练时使用的数据集是WIT,而在ImageNet、STL10、Food101、CIFAR10、MNIST等其他数据集上直接测试。这意味着CLIP在训练时没有见过ImageNet这些数据集中的图像,那么这种测试实际上就是zero shot的。

一个测试例子可以看下图,假设要测试的数据集是ImageNet,那么,因为CLIP在训练时用的所有数据来自WIT,而没有任何ImageNet的数据,所以CLIP在ImageNet上进行测试实际上就是Zero shot的。由于ImageNet中text数据只有表示图像类别的car,dog,bird等single word,而CLIP训练时text数据是sentence,为了弥补训练和测试的gap,作者将ImageNet中所有类别单词扩展为一句话“ A photo of a {car/dog/.../bird}. ” ,作为图像对应的sentence(该操作实际上是prompt engineering)。

下图中Text Encoder和Image Encoder是已经训练好的CLIP中的文本和图像编码器,要对任意一张来自ImageNet的图像进行分类,只需要将该图像输入Image Encoder中得到它的向量表示I1。然后将ImageNet数据集中所有类别标签扩展成的sentence输入Text Encoder,得到所有类别的向量表示T1---TN,然后计算I1与T1---TN的相似度,其中相似度最高的就是该图像对应的text数据,也就是该图像的分类结果。

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

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

相关文章

【代码随想录刷题记录】LeetCode844比较含退格的字符

题目地址 1. 思路 1.1 基本思路 拿到这个题,我们要单独写一个函数去将退格后的字符串结果返回出来(生成退格后的真实的字符串),我还是想魔改 O ( n ) O(n) O(n)时间复杂度的删除数组元素的算法:【代码随想录刷题记录…

认识Linux及一些基本

目录 linux简介: 1. 发展史 UNIX发展的历史 Linux发展历史 2. 开源 3. 企业应用现状 Linux在服务器领域的发展 Linux在桌面领域的发展 Linux在移动嵌入式领域的发展 Linux在云计算/大数据领域的发展 4. 发行版本 Debian Ubuntu 红帽企业级Linux Cent…

LLDP简介

LLDP简介 定义 LLDP(Link Layer Discovery Protocol)是IEEE 802.1ab中定义的链路层发现协议。LLDP是一种标准的二层发现方式,可以将本端设备的管理地址、设备标识、接口标识等信息组织起来,并发布给自己的邻居设备,邻…

国产Sora诞生!清华团队发布Vidu大模型,可直接生成16秒视频

大模型之争已从单模态转向多模态。 4月27日,在2024中关村论坛年会未来人工智能先锋论坛上,清华大学联合北京生数科技有限公司正式发布了文生视频大模型——Vidu。 在会议上,清华大学人工智能研究院副院长、生数科技首席科学家朱军对外展示了…

溪谷软件:游戏联运有多简单?

游戏联运,即游戏联合运营,是一种游戏运营模式,涉及到多个平台或公司共同推广和运营同一款游戏。对于开发者而言,游戏联运的简化程度可能因具体情况而异,但以下是一些因素,使得游戏联运在某种程度上变得更加…

​水滴式饲料粉碎机:创新设计与卓越性能的完美结合

水滴式饲料粉碎机是一种新型的饲料加工设备,其新颖的设计理念和工作性能受到了广大养殖户和饲料生产厂家的青睐。水滴式饲料粉碎机之所以受到如此广泛的关注,不仅是因为其G效、节能的特点,更是因为其新颖的结构设计,使得饲料加工过…

Cesium.js(3):Cesium查看器、场景、实体、数据源介绍

1 Cesium的四大类说明 1.1 Viewer查看器类 Viewer是cesium的查看器类,第一个参数是地图主窗口DIV的容器ID,第二个参数option是Viewer的可选设置参数,包含图层、地形时间系统等参数,种类多样,主要作用是对视口中各个组…

【Python的魅力】:利用Pygame实现游戏坦克大战——含完整源码

文章目录 一、游戏运行效果二、代码实现2.1 项目搭建2.2 加载我方坦克2.3 加载敌方坦克2.4 添加爆炸效果2.5 坦克大战之音效处理 三、完整代码 一、游戏运行效果 二、代码实现 坦克大战游戏 2.1 项目搭建 本游戏主要分为两个对象,分别是我方坦克和敌方坦克。用户可…

数据结构复习指导之数组和特殊矩阵

文章目录 数组和特殊矩阵 考纲内容 复习提示 前言 1.数组的定义 2.数组的存储结构 3.特殊矩阵的压缩存储 3.1对称矩阵 3.2三角矩阵 3.3三对角矩阵 4.稀疏矩阵 5.知识回顾 数组和特殊矩阵 考纲内容 (一)栈和队列的基本概念 (二&a…

数据结构六:线性表之顺序栈的设计

目录 一、栈的应用场景 二、栈的基本概念和结构 2.1 栈的基本概念 2.2 栈的结构 2.3 栈的实现方式 三、顺序栈的接口函数实现 3.0 顺序栈的概念和结构 3.1 顺序栈的接口函数 3.2 顺序栈的设计(结构体) 3.3 顺序栈的初始化 3.4 入栈&#x…

Python转换文本文件为PDF文档,绘制文本到PDF文档页面

文本文件因其轻便、易编辑的优势,常用于日常文字记录与数据交换;而PDF文档则以高保真、格式稳定和良好的阅读体验,成为正式报告、文献发布等场景的首选。将文本文件转为PDF,在PDF内精准绘制文本,旨在兼顾内容的规范呈现…

云计算革新:以太网 Scale-UP 网络为 GPU 加速赋能

谈谈基于以太网的GPU Scale-UP网络 Intel Gaudi-3 采用 RoCE 互联技术,促进了 Scale-UP 解决方案。业界专家 Jim Keller 倡导以太网替代 NVLink。Tenstorrent 成功应用以太网实现片上网络互联。RoCE 和以太网已成为互联解决方案的新兴趋势,为高性能计算提…

区块链技术--编译BSV源码(v1.0.1)

编译好的可执行文件bitcoin-cli 和 bitcoind 下载: https://github.com/youngqqcn/QBlockChainNotes/blob/master/BTC%E7%B3%BB%E5%B1%B1%E5%AF%A8%E5%B8%81/my_bsv_v1.0.1.tar.gz 安装 libminiupnpc wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packa…

商店数据(六)

目录 41.短信发送记录表 42.职员登录记录表 43.会员登录记录表 ​44.后台菜单表 45.商城信息表 46.消息队列表 47.移动端首页按钮管理表 48.商城导航表 41.短信发送记录表 CREATE TABLE wst_log_sms (smsId int(11) NOT NULL AUTO_INCREMENT COMMENT 自增ID,smsSrc t…

IOCP实现UDP Server

IOCP实现UDP Server 1、IOCP原理图 参考文献1:IOCP详解-阿里云开发者社区 (aliyun.com) 参考文献2:IOCP编程之基本原理 - 史D芬周 - 博客园 (cnblogs.com) 原理图 同步以及异步 2、UDP Server代码以及测试代码 // iocpudpdemo.cpp : 此文件包含 &qu…

再谈钓鱼邮件

再谈钓鱼邮件 概述 最近对邮件的防御策略进行了更新,结合威胁情报和安全沙箱对收到的钓鱼邮件进行了分析,期望这些案例能对大家有所帮助。 网关上拦截的钓鱼邮件基本可以分三个类别:链接钓鱼邮件、附件钓鱼邮件以及邮件头伪造钓鱼邮件&…

在谷歌浏览器访问特定的网站 提示此网站无法提供安全连接

1、问题描述: 最近通过谷歌浏览器访问某些网址提示此网站无法提供安全连接,换一个浏览器就能正确打开! 例子如下: 访问 https://baijiahao.baidu.com/s?id1788533041823242656 2、查找原因 通过控制台发现请求未有响应码&#xf…

【数据分析面试】34.填充NaN值 (Python:groupby/sort_value/ffill)

题目:填充NaN值 (Python) 给定一个包含三列的DataFrame:client_id、ranking、value 编写一个函数,将value列中的NaN值用相同client_id的前一个非NaN值填充,按升序排列。 如果不存在前一个client_id,则返…

小红书从记忆机制解读信息检索,提出新范式获得 EACL Oral

近日,来自小红书搜索算法团队的论文《Generative Dense Retrieval: Memory Can Be a Burden》被自然语言处理领域国际会议 EACL 2024 接收为 Oral,接受率为 11.32%(144/1271)。 他们在论文中提出了一种新颖的信息检索范式——生成…

python环境安装jupyter

安装完毕之后下一步可以参考:配置jupyter的启动路径-CSDN博客 1 前提条件:python环境 系统:win10 python:本地已经有python,可以查看本地的python版本: C:\Users\PC>python --version Python 3.8.10 …