Openai连接文本和图像CLIP模型(Huggingface版)zero-shot分类代码案例

Openai连接文本和图像CLIP模型(Huggingface版)zero-shot分类代码案例

注:大家觉得博客好的话,别忘了点赞收藏呀,本人每周都会更新关于人工智能和大数据相关的内容,内容多为原创,Python Java Scala SQL 代码,CV NLP 推荐系统等,Spark Flink Kafka Hbase Hive Flume等等~写的都是纯干货,各种顶会的论文解读,一起进步。
今天和大家分享一篇关于Opinai神作CLIP模型
#博学谷IT学习技术支持#



前言

2021年见证了vision transformer的大爆发,随着谷歌提出ViT之后,一大批的vision transformer的工作席卷计算机视觉任务。除了vision transformer,另外一个对计算机视觉影响比较大的工作就是Open AI在2021年1月份发布的DALL-E和CLIP,这两个都属于结合图像和文本的多模态模型,其中DALL-E是基于文本来生成模型的模型,而CLIP是用文本作为监督信号来训练可迁移的视觉模型,这两个工作也像ViT一样带动了一波新的研究高潮。这篇文章将首先介绍CLIP的原理以及如何用CLIP实现zero-shot分类,然后我们将讨论CLIP背后的动机,最后文章会介绍CLIP的变种和其它的一些应用场景。


一、CLIP是什么?

CLIP的英文全称是Contrastive Language-Image Pre-training,即一种基于对比文本-图像对的预训练方法或者模型。CLIP是一种基于对比学习的多模态模型,与CV中的一些对比学习方法如moco和simclr不同的是,CLIP的训练数据是文本-图像对:一张图像和它对应的文本描述,这里希望通过对比学习,模型能够学习到文本-图像对的匹配关系。如下图所示,CLIP包括两个模型:Text Encoder和Image Encoder,其中Text Encoder用来提取文本的特征,可以采用NLP中常用的text transformer模型;而Image Encoder用来提取图像的特征,可以采用常用CNN模型或者vision transformer。作者看到一般使用vit较多,可能因为vit效果比CNN更好。
在这里插入图片描述
这里对提取的文本特征和图像特征进行对比学习。对于一个包含N个文本-图像对的训练batch,将N个文本特征和N个图像特征两两组合,CLIP模型会预测出N方个可能的文本-图像对的相似度,这里的相似度直接计算文本特征和图像特征的余弦相似性(cosine similarity),即上图所示的矩阵。这里共有N个正样本,即真正属于一对的文本和图像(矩阵中的对角线元素),而剩余的N方-N个文本-图像对为负样本,那么CLIP的训练目标就是最大N个正样本的相似度,同时最小化N方-N个负样本的相似度。
为了训练CLIP,OpenAI从互联网收集了共4个亿的文本-图像对。

二、如何用CLIP实现zero-shot分类

上面我们介绍了CLIP的原理,可以看到训练后的CLIP其实是两个模型,除了视觉模型外还有一个文本模型,那么如何对预训练好的视觉模型进行迁移呢?与CV中常用的先预训练然后微调不同,CLIP可以直接实现zero-shot的图像分类,即不需要任何训练数据,就能在某个具体下游任务上实现分类,这也是CLIP亮点和强大之处。用CLIP实现zero-shot分类很简单,只需要简单的两步:

根据任务的分类标签构建每个类别的描述文本:A photo of {label},然后将这些文本送入Text Encoder得到对应的文本特征,如果类别数目为[公式],那么将得到[公式]个文本特征;
将要预测的图像送入Image Encoder得到图像特征,然后与[公式]个文本特征计算缩放的余弦相似度(和训练过程一致),然后选择相似度最大的文本对应的类别作为图像分类预测结果,进一步地,可以将这些相似度看成logits,送入softmax后可以到每个类别的预测概率。
在这里插入图片描述

代码如下(示例):

from PIL import Image
from transformers import CLIPProcessor,CLIPModel

model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")
#这里加入自己图片的地址就行
image = Image.open('xxx.jpg')
#这里加入类别的标签类别
text = ['plane','car','dog','bird']
inputs = processor(text=text,images = image,return_tensors="pt",padding=True)
outputs = model(**inputs)
logits_per_image = outputs.logits_per_image
probs = logits_per_image.softmax(dim=1)

for i in range(len(text)):
    print(text[i],":",probs[0][i])

可以看到结果还是相当不错的
在这里插入图片描述

使用CLIP进行zero-shot分类,另外一个比较重要的地方是文本描述的生成,上面的例子我们采用分类标签,但其实也有其它选择,比如我们直接用类别标签,这其实属于最近NLP领域比较火的一个研究:prompt learning或者prompt engineering,具体可以见我之前写过的一篇关于prompt learning的文章
https://blog.csdn.net/weixin_53280379/article/details/125113370?spm=1001.2014.3001.5502

三、其他CLIP的运用

1.视频理解
CLIP是基于文本-图像对来做的,但是它可以扩展到文本-视频,比如VideoCLIP就是将CLIP应用在视频领域来实现一些zero-shot视频理解任务。
2.图像生成
VQGAN+CLIP实现各种图像生成模型。特别好玩,和dall-e差不多效果。
等等其实还有好多,分割,检测其实能做的很多,也有很多非常好的论文。


总结

主要和大家分享一下Openai大热的连接文本和图像CLIP模型(Huggingface版)zero-shot分类代码案例,其实还是可以看到一些GPT的影子,模型本身比较简单,没什么难度,就是大力出奇迹的感觉,4亿个训练数据加上500GPU YEAR。或许是将来的趋势吧。可以运用到更多的下游任务。

  • 3
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: "计算机三大顶会" 指的是全球计算机领域最重要的三个国际学术会议: 1. 计算机科学与自动化国际会议 (International Conference on Computer Science and Automation, ICCSA); 2. 计算机图形学与图像处理国际会议 (International Conference on Computer Graphics and Image Processing, CGIP); 3. 计算机视觉与模式识别国际会议 (International Conference on Computer Vision and Pattern Recognition, CVPR)。 这三个会议均为顶级学术盛会,每年吸引了全球计算机领域的顶尖专家和学者参会。 ### 回答2: 计算机三大顶会是指 ACM(Association for Computing Machinery)、IEEE(Institute of Electrical and Electronics Engineers)以及USENIX(Advanced Computing Systems Association)。 ACM(美国计算机协会)是世界上最大的计算机学会,致力于计算机科学和信息技术的研究与发展。ACM每年都会举办重要的学术会议,如计算机科学领域的顶级会议SIGGRAPH、SIGKDD和SIGCOMM等,这些会议旨在促进学术界之间的交流与合作。 IEEE(国际电气和电子工程师协会)是一个国际性的专业协会,致力于电气、电子和计算机工程技术的发展。IEEE每年都会举办多个顶级会议,如国际计算机视觉与模式识别会议(CVPR)、国际数据工程与知识工程会议(ICDE)以及国际信息与通信技术论坛(ICTF)等,这些会议汇集了全球顶尖学者和技术专家进行学术交流。 USENIX(高级计算机系统协会)是一个致力于推动计算机系统研究与实践的组织。它通过举办国际研讨会和学术会议,如USENIX年会、USENIX安全与隐私研讨会等,为研究者提供了一个交流最新计算机系统技术的平台。 这些顶会以其学术严谨性、高水平的论文和前沿的研究成果而闻名于世。参加这些顶会能够在学术交流和专业网络方面获得丰富的机会,也可以了解到最新的研究趋势和发展动态,对于学术研究者和工程师而言具有重要的意义。这些顶会的论文发表被广泛认同和引用,对学术界和工业界都具有重要影响力。 ### 回答3: 计算机三大顶会即指国际计算机领域三个具有较高声誉和影响力的学术会议,分别是ACM(Association for Computing Machinery,美国计算机学会)、IEEE(Institute of Electrical and Electronics Engineers,电气和电子工程师学会)以及USENIX(The Advanced Computing Systems Association,高级计算机系统协会)。 ACM是全球最大、最具影响力的学术组织之一,其旗下举办了众多领域的顶级会议,如ACM SIGGRAPH(计算机图形学与交互技术国际会议)、ACM CHI(人机交互国际会议)等,覆盖广泛。 IEEE是一个全球性的专业技术组织,也是工程技术领域最大的非盈利组织。IEEE的计算机相关领域会议众多,其中以IEEE INFOCOM(国际计算机和通信会议)和IEEE CVPR(计算机视觉与模式识别会议)等最为著名。 USENIX是一个致力于推动计算机系统技术发展的组织,其会议主要关注系统软件和系统性能。USENIX举办的顶级会议包括USENIX Security(USENIX安全性)、USENIX ATC(USENIX年度技术会议)等。 这三大顶会都吸引着众多学术界和工业界的顶尖研究者和专家前来参会,分享最新的研究成果和技术进展。参与这些顶会可以汲取最新的学术思想、了解最新的研究趋势,以及与同行交流合作。对于从事计算机科学和工程领域的人员来说,参与计算机三大顶会是非常有价值的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值