CLIP到底有多强,让我们来试试吧!

CLIP模型及代码地址:GitHub - openai/CLIP: Contrastive Language-Image Pretraining

一、准备环境

先创建一个anaconda虚拟环境,包含python=3.7版本,将该环境命名为clip。成功。

( pytorch=1.7.1 所需 python 版本 >=3.6,本博客决定安装 py3.7 )

conda create --name clip python=3.7
# 切换到虚拟环境clip中
conda activate clip

根据CLIP的github上指示,安装pytorch=1.7.1 及其他所需库。成功。

conda install --yes -c pytorch pytorch=1.7.1 torchvision cudatoolkit=11.0
pip install ftfy regex tqdm

最后,从github上直接安装CLIP。这一步可能会失败。

pip install git+https://github.com/openai/CLIP.git

如果无法访问github网址,会出现如下错误:

解决方法是从github镜像网站上拉取CLIP项目的完整zip包,将下载到的CLIP-main.zip文件保存在本地路径中,然后从本地直接安装CLIP库。

具体代码如下:

# 进入CLIP-main.zip所在路径
# 解压.zip文件,然后进入解压后的文件夹
unzip CLIP-main.zip
cd CLIP-main
# 运行setup.py文件,完成本地安装clip
python setup.py install

然后查看已安装的库,能找到clip就说明安装成功了,如下图所示:

二、测试CLIP

使用一个简单的图像分类代码测试clip是否能够正常运行,如下图是海贼王里面的人物艾斯,将该图片命名为Ace.jpeg。

运行下面的代码,希望模型能够识别出该图像是【一个人,一条狗,一只猫】中的哪一类:

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("Ace.jpeg")).unsqueeze(0).to(device)
text = clip.tokenize(["a man", "a dog", "a cat"]).to(device)with torch.no_grad():# 计算每一张图像和每一个文本的相似度值logits_per_image, logits_per_text = model(image, text)# 对该image与每一个text的相似度值进行softmaxprobs = logits_per_image.softmax(dim=-1).cpu().numpy()print("Label probs:", probs)

首次运行,代码会加载openai已经训练好的ViT-B/32模型,如下图所示:

 等模型加载完毕,就会执行图像分类了,从结果可以看出,CLIP以0.928的概率判定该图像是一个man,而不是dog或者cat。


非常神奇的是,如果将代码的候选text选项中 “a man” 替换成艾斯的名字 “Ace”,让CLIP判断图像是否是Ace,结果甚至更好,CLIP以0.994的概率判定该图像是艾斯!

text = clip.tokenize(["Ace", "a dog", "a cat"]).to(device)

三、API介绍及使用

1. clip.available_models()

import torch
import clip
print(clip.available_models())

该方法输出CLIP的预训练好的图像编码器名称:

['RN50', 'RN101', 'RN50x4', 'RN50x16', 'RN50x64', 'ViT-B/32', 'ViT-B/16', 'ViT-L/14']

2. clip.load()

该方法接受4个输入参数,得到2个输出结果。

参数:

  • name:字符串。用于指定CLIP使用的图像编码器模型。可以是模型名称,也就是clip.available_models()的输出结果;或者是这些模型所在的路径。
  • device:字符串或者torch.device的输出结果。用于指定加载模型的设备,gpu或者cpu。
  • jit:布尔值。是否加载优化的JIT模型。
  • download_root:字符串。用于指定下载的模型的保存地址,默认值如下代码所示。
model, proprecess = clip.load(name="RN50", device="cpu", jit=False, download_root="~/.cache/clip")

【代码实践】使用CLIP做一些多模态的事情相关推荐

  1. 详解视频中动作识别模型与代码实践

    摘要:本案例将为大家介绍视频动作识别领域的经典模型并进行代码实践. 本文分享自华为云社区<视频动作识别>,作者:HWCloudAI.实验目标 通过本案例的学习: 掌握 C3D 模型训练和模 ...

  2. ReactiveCocoa代码实践之-更多思考

    三.ReactiveCocoa代码实践之-更多思考 1. RACObserve()宏形参写法的区别 之前写代码考虑过 RACObserve(self.timeLabel , text) 和 RACOb ...

  3. 语音识别——基于深度学习的中文语音识别tutorial(代码实践)

    文章目录 利用thchs30为例建立一个语音识别系统 1. 特征提取 2. 数据处理 下载数据 2.1 生成音频文件和标签文件列表 定义函数`source_get`,获取音频文件及标注文件列表 确认相 ...

  4. 【深度学习】图像去模糊算法代码实践!

    作者:陈信达,上海科技大学,Datawhale成员 1.起源:GAN 结构与原理 在介绍DeblurGANv2之前,我们需要大概了解一下GAN,GAN最初的应用是图片生成,即根据训练集生成图片,如生成 ...

  5. 【机器学习基础】(六):通俗易懂无监督学习K-Means聚类算法及代码实践

    K-Means是一种无监督学习方法,用于将无标签的数据集进行聚类.其中K指集群的数量,Means表示寻找集群中心点的手段. 一. 无监督学习 K-Means 贴标签是需要花钱的. 所以人们研究处理无标 ...

  6. 【机器学习基础】通俗易懂无监督学习K-Means聚类算法及代码实践

    K-Means是一种无监督学习方法,用于将无标签的数据集进行聚类.其中K指集群的数量,Means表示寻找集群中心点的手段. 一. 无监督学习 K-Means 贴标签是需要花钱的. 所以人们研究处理无标 ...

  7. 【机器学习基础】(五):通俗易懂决策树与随机森林及代码实践

    与SVM一样,决策树是通用的机器学习算法.随机森林,顾名思义,将决策树分类器集成到一起就形成了更强大的机器学习算法.它们都是很基础但很强大的机器学习工具,虽然我们现在有更先进的算法工具来训练模型,但决 ...

  8. 【机器学习基础】(四):通俗理解支持向量机SVM及代码实践

    上一篇文章我们介绍了使用逻辑回归来处理分类问题,本文我们讲一个更强大的分类模型.本文依旧侧重代码实践,你会发现我们解决问题的手段越来越丰富,问题处理起来越来越简单. 支持向量机(Support Vec ...

  9. 【机器学习基础】(三):理解逻辑回归及二分类、多分类代码实践

    本文是机器学习系列的第三篇,算上前置机器学习系列是第八篇.本文的概念相对简单,主要侧重于代码实践. 上一篇文章说到,我们可以用线性回归做预测,但显然现实生活中不止有预测的问题还有分类的问题.我们可以从 ...

最新文章

  1. SyntaxError: Non-ASCII character ‘\xe4‘ in file xx(路径)
  2. 2021湖南高考艺考成绩查询,2021届湖南艺考生联考成绩查询时间安排
  3. 【深度学习入门到精通系列】卷积和池化计算详解
  4. Leetcode1684. 统计一致字符串的数目[C++题解]:字符串O(n^2)简单题
  5. 第六章 深度学习(上)
  6. JavaScript实现detectDirectedCycle检测定向循环算法(附完整源码)
  7. 朴素贝叶斯算法实现分类以及Matlab实现
  8. ai的预览模式切换_深耕基础办公领域,永中软件云端远程办公新模式助力企业复工复产...
  9. python之路 day5
  10. input输入格式转换插件-Vanilla Masker
  11. 如何通过提前Bake Docker镜像加快基础设施的启动速度
  12. CC2541蓝牙低功耗芯片中文资料提供
  13. 房友软件注册码暴力输入程序
  14. pip升级及关于pyecharts安装下载所遇到的问题及部分的解决
  15. mysql 高可用方案
  16. 测试工程师, 入职以后如何开展工作?
  17. ios在判断设备是ipad_识别您的 iPad 机型
  18. mysql slave duplicate entry_slave 报Duplicate entry for key
  19. 使用burp进行网站爆破
  20. 复制微信号并跳转到微信界面

热门文章

  1. 苹果手机的ipsec
  2. firt time come in
  3. 软考—信息项目管理师(信息化和信息系统二)
  4. python sklearn metrics,在Python中sklearn.metrics.mean_squared_error越大越好(否定)?
  5. 大学计算机考试不挂科秘诀,在大学,考试想不挂科,学渣的4个锦囊妙计,最后一点看笑了!...
  6. java 泛型中的上界(extend)和下界(super)
  7. Pixelmator for Mac(强大的图像处理软件)
  8. ACM 比赛 训练记录(持续更新)
  9. android 直播sdk 抖音,从零开始仿写一个抖音App——跨平台视频编辑SDK项目搭建
  10. 2017年总结及2018年规划