一、CLIP模型

论文:Learning Transferable Visual Models From Natural Language Supervision
论文地址:https://arxiv.org/abs/2103.00020
论文代码:https://github.com/openai/CLIP

1、Motivation&Contribution

Motivation
(1)在现实世界里得到大量有标签的数据是困难的,受人力、金钱、现实等因素限制,“有严格限制”的标签是难以得到的,比如,一张狗的图片它对应的标签是dog,dog是给定的类别标签,这需要人去判断这张图片的标签,得到的数据符合<image,label>。
   但是“非严格限制”的标签是容易得到的,比如,小A发布了一张狗的图片,并配文:My dog is so cute!这在网络上到处都有这样的信息,我们可以将这样的数据定义为<imge,text>,显然,text文本信息是更容易得到的,不需要专门的人员进行标注。
  
(2)随着对比学习Contrastive Learning、Transformer、多模态学习的发展,文本和图片任务之间互相促进,使用text中的丰富的语义信息帮助图片的识别,也成为一个重要的探索方向。
  
(3)NLP任务中出现了BERT这样的大型预训练模型,帮助下游任务训练,那么在CV领域中是否也能有这样的模型,大家以后只要使用这个预训练好的CLIP模型,就能低成本地得到一个精度不错的模型,实现zero-shot或few-shot。事实上,CLIP确实在很多数据集上的迁移效果非常好。
Contribution:
(1)不再受传统的标准标签限制,使用一段text作为标签。
(2)将Text引入CV,使用Text语义信息帮助图片识别并达到很好的效果。
(3)预训练的CLIP模型在zero-shot、few-shot表现出色,可以在众多下游任务中拿来应用。

2、Data

   前人并非没有用text信息与image信息结合的想法,但效果都不够好,而CLIP指出它们之所以达不到更好的效果是因为它们使用的数据集还不够大,因此CLIP模型收集、使用了4亿的数据,数据的形式为<image,text>,可见CLIP模型能够有这么好的迁移效果,和大量的数据也有很大关系。

3、Model

   在解释模型前,可以先简单了解对比学习Parametric Contrastive Learning:长尾问题中的对比学习,简而言之,对比学习不需要标签,它通过拉近与正样本特征的距离,拉远负样本特征的距离,实现模型优化。

   接下来介绍模型的结构,事实上模型的结构非常简单。

   第一部分:Contrastive pre-training,一组<image,text>对,将image经过Image Encoder,text经过Text Encoder,这里的Encoder可以是Transformer,可以是Resnet之类的网络模型,得到图片和文本特征后,将图片特征和文本特征相乘,对角线上都是正样本,其他部分都是负样本,例如I1、T1,是狗的图片和Pepper the aussie pup文本对应的特征,它们是一对正样本,而I1和T2、T3……TN不是一对,是负样本。
  
   第二部分和第三部分:Create dataset classifier from label text,Use for zero-shot prediction可以认为是预测部分,或者是迁移部分,经过预训练好的模型,我们可以直接拿来进行zero-shot predict。一般的预测任务是有具体的标签的,而CLIP输入的是一段text,那么要把它和CLIP模型匹配,只要把标签转换为一段简单的text,最容易实现的就是A photo of a {object},除了这种模板,在特定数据集里,还可以添加句子来缩小范围,例如在食物数据集里可以变为,A photo of a {object}, a type of food.

   列出数据集所有的标签,将它们转换成text,再经过Text Encoder,同样,把图片经过Image Encoder,将text特征和image特征相乘,最相似的text即为对应标签,也就是a photo of a dog,则dog为最终标签。

4、迁移效果

   使用预训练的模型进行zero-shot学习,绿色表示CLIP比有监督学习的效果好,蓝色表示差。还有很多实验数据可以参考论文的实验部分。

   使用ImageNet训练好的ResNet101模型,再ImageNet上它和Zero-Shot CLIP精度一样,然而当它迁移到其他版本的数据集上,效果出现大幅度下降,而CLIP不需要样本就远远超过了ResNet101。

5、CLIP模型的zero-shot应用

详细信息可以参照论文源码。
先安装好CLIP。

$ conda install --yes -c pytorch pytorch=1.7.1 torchvision cudatoolkit=11.0
$ pip install ftfy regex tqdm
$ pip install git+https://github.com/openai/CLIP.git

加载预训练好的CLIP模型,使用CLIP模型进行预测。

import torch
import clip
from PIL import Imagedevice = "cuda" if torch.cuda.is_available() else "cpu"
model, preprocess = clip.load("ViT-B/32", device=device)image = preprocess(Image.open("CLIP.png")).unsqueeze(0).to(device)
text = clip.tokenize(["a diagram", "a dog", "a cat"]).to(device)with torch.no_grad():image_features = model.encode_image(image)text_features = model.encode_text(text)logits_per_image, logits_per_text = model(image, text)probs = logits_per_image.softmax(dim=-1).cpu().numpy()print("Label probs:", probs)  # prints: [[0.9927937  0.00421068 0.00299572]]

利用文本信息引导视觉的模型CLIP相关推荐

  1. 如何利用遥感信息改进水文模型

    利用遥感信息改进水文模型的方法有很多,但是主要有以下几点: 利用遥感数据来估算降雨量,从而更准确地模拟水文过程. 利用遥感数据来评估地表径流,从而更精确地模拟水文过程. 利用遥感数据来评估地表蒸散量, ...

  2. 图嵌入表示TADW:当DeepWalk加上外部文本信息

    来自清华的TADW 论文:Network Representation Learning with Rich Text Information[1] 代码:https://github.com/alb ...

  3. 保密 | 利用DOS命令将文本信息隐藏在图片中

    记录一次信息隐藏的小窍门,利用DOS事项将一段文本信息隐藏在图片之中 1.将要隐藏的文本内容保存至文本文件,将该文本文件与载体图片拷贝到一起,放置于一个文件夹中: 2.按Ctrl+R输入cmd切换到D ...

  4. 利用Python提取PDF文件中的文本信息

    如何利用Python提取PDF文件中的文本信息 日常工作中我们经常会用到pdf格式的文件,大多数情况下是浏览或者编辑pdf信息,但有时候需要提取pdf中的文本,如果是单个文件的话还可以通过复制粘贴来直 ...

  5. 利用RSA非对称加密对文本信息进行加密

    利用RSA非对称加密对文本信息进行加密 非对称加密 非对称加密即创建一对密钥对,分为公钥和私钥. 公钥即大家都能看到的秘钥,私钥即自己用的秘钥,rsa加密后密码的安全性一般取决于用户对私钥的保管. 公 ...

  6. NLP专栏简介:数据增强、智能标注、意图识别算法|多分类算法、文本信息抽取、多模态信息抽取、可解释性分析、性能调优、模型压缩算法等

    NLP专栏简介:数据增强.智能标注.意图识别算法|多分类算法.文本信息抽取.多模态信息抽取.可解释性分析.性能调优.模型压缩算法等 专栏链接:NLP领域知识+项目+码源+方案设计 订阅本专栏你能获得什 ...

  7. 深度学习应用篇-自然语言处理[10]:N-Gram、SimCSE介绍,更多技术:数据增强、智能标注、多分类算法、文本信息抽取、多模态信息抽取、模型压缩算法等

    [深度学习入门到进阶]必看系列,含激活函数.优化策略.损失函数.模型调优.归一化算法.卷积模型.序列模型.预训练模型.对抗神经网络等 专栏详细介绍:[深度学习入门到进阶]必看系列,含激活函数.优化策略 ...

  8. 知识图谱专栏简介:数据增强,智能标注,文本信息抽取(实体关系事件抽取)、知识融合算法方案、知识推理、模型优化、模型压缩技术等

    知识图谱专栏简介:数据增强,智能标注,文本信息抽取(实体关系事件抽取).知识融合算法方案.知识推理.模型优化.模型压缩技术等 专栏链接:NLP知识图谱相关技术业务落地方案和码源 NLP知识图谱相关技术 ...

  9. 利用3D绘图程序Pangolin显示文本信息

    利用3D绘图程序Pangolin显示文本信息 由于自己项目的需求,需要将一些文本信息在Pangolin的显示界面中进行显示.在查看了Pangolin源码后,以及博主liu_hang_0727的帮助下实 ...

最新文章

  1. Java项目:仿小米商城系统(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)
  2. Soil Ecology Letters被ESCI收录
  3. 独家对话阿里云函数计算负责人不瞋:你所不知道的 Serverless
  4. sqlbulkcopy mysql_SqlBulkCopy 的 Timeout 和 BatchSize
  5. VTK:可视化算法之FireFlow
  6. STM32 ADC 单次模式、连续模式、扫描模式(转载)
  7. 【zookeeper】zookeeper 查看ZK连接总数
  8. windows下运行python打印有颜色的字_Windows和Linux下Python输出彩色文字的方法教程...
  9. 机器学习面试-处理聚类问题
  10. jquery富文本编译器_jQuery 移动端artEditor富文本编辑器
  11. 抖音、快手无水印视频下载【现已支持所有平台】
  12. Linux忘记开机密码
  13. 使用LTT升级HP磁带机的固件程序
  14. Did China Eat America’s Jobs?
  15. EXCEL10:excel看板
  16. 荣耀手机装联通卡显示无服务器,荣耀X10用不了物联网卡(联通物联卡3g却不能上网)...
  17. 互联网月饼大赏,你最喜欢哪家的?
  18. php字体大小_php设置字体的方法
  19. 【VB-01】离线语音模块,无需语音算法开发,直接嵌入式用。
  20. OSError: [WinError 1455] 页面文件太小,无法完成操作。 Error loading “C:\ProgramData\Anaconda3\lib\site-packages\to

热门文章

  1. 【CTF】LFI漏洞总结(PHP本地文件包含漏洞)
  2. 服务器每个月维护要1000元,点评封神榜-关于服务器维护
  3. NOIP2014提高组A.石头剪刀布(解题报告)
  4. 基于单片机的CO浓度检测及报警系统设计(电路+程序流程)
  5. Python爬取大众点评景点评论
  6. [附源码]Node.js计算机毕业设计大众点评管理系统Express
  7. java变量重名问题
  8. 什么是智能插座,智能插座有什么用?
  9. DSP_基于TMS320F28335和CCS7.2的编程入门
  10. 计算机网络笔记(3) 网络应用P2P架构