【代码实践】使用CLIP做一些多模态的事情
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做一些多模态的事情相关推荐
- 详解视频中动作识别模型与代码实践
摘要:本案例将为大家介绍视频动作识别领域的经典模型并进行代码实践. 本文分享自华为云社区<视频动作识别>,作者:HWCloudAI.实验目标 通过本案例的学习: 掌握 C3D 模型训练和模 ...
- ReactiveCocoa代码实践之-更多思考
三.ReactiveCocoa代码实践之-更多思考 1. RACObserve()宏形参写法的区别 之前写代码考虑过 RACObserve(self.timeLabel , text) 和 RACOb ...
- 语音识别——基于深度学习的中文语音识别tutorial(代码实践)
文章目录 利用thchs30为例建立一个语音识别系统 1. 特征提取 2. 数据处理 下载数据 2.1 生成音频文件和标签文件列表 定义函数`source_get`,获取音频文件及标注文件列表 确认相 ...
- 【深度学习】图像去模糊算法代码实践!
作者:陈信达,上海科技大学,Datawhale成员 1.起源:GAN 结构与原理 在介绍DeblurGANv2之前,我们需要大概了解一下GAN,GAN最初的应用是图片生成,即根据训练集生成图片,如生成 ...
- 【机器学习基础】(六):通俗易懂无监督学习K-Means聚类算法及代码实践
K-Means是一种无监督学习方法,用于将无标签的数据集进行聚类.其中K指集群的数量,Means表示寻找集群中心点的手段. 一. 无监督学习 K-Means 贴标签是需要花钱的. 所以人们研究处理无标 ...
- 【机器学习基础】通俗易懂无监督学习K-Means聚类算法及代码实践
K-Means是一种无监督学习方法,用于将无标签的数据集进行聚类.其中K指集群的数量,Means表示寻找集群中心点的手段. 一. 无监督学习 K-Means 贴标签是需要花钱的. 所以人们研究处理无标 ...
- 【机器学习基础】(五):通俗易懂决策树与随机森林及代码实践
与SVM一样,决策树是通用的机器学习算法.随机森林,顾名思义,将决策树分类器集成到一起就形成了更强大的机器学习算法.它们都是很基础但很强大的机器学习工具,虽然我们现在有更先进的算法工具来训练模型,但决 ...
- 【机器学习基础】(四):通俗理解支持向量机SVM及代码实践
上一篇文章我们介绍了使用逻辑回归来处理分类问题,本文我们讲一个更强大的分类模型.本文依旧侧重代码实践,你会发现我们解决问题的手段越来越丰富,问题处理起来越来越简单. 支持向量机(Support Vec ...
- 【机器学习基础】(三):理解逻辑回归及二分类、多分类代码实践
本文是机器学习系列的第三篇,算上前置机器学习系列是第八篇.本文的概念相对简单,主要侧重于代码实践. 上一篇文章说到,我们可以用线性回归做预测,但显然现实生活中不止有预测的问题还有分类的问题.我们可以从 ...
最新文章
- SyntaxError: Non-ASCII character ‘\xe4‘ in file xx(路径)
- 2021湖南高考艺考成绩查询,2021届湖南艺考生联考成绩查询时间安排
- 【深度学习入门到精通系列】卷积和池化计算详解
- Leetcode1684. 统计一致字符串的数目[C++题解]:字符串O(n^2)简单题
- 第六章 深度学习(上)
- JavaScript实现detectDirectedCycle检测定向循环算法(附完整源码)
- 朴素贝叶斯算法实现分类以及Matlab实现
- ai的预览模式切换_深耕基础办公领域,永中软件云端远程办公新模式助力企业复工复产...
- python之路 day5
- input输入格式转换插件-Vanilla Masker
- 如何通过提前Bake Docker镜像加快基础设施的启动速度
- CC2541蓝牙低功耗芯片中文资料提供
- 房友软件注册码暴力输入程序
- pip升级及关于pyecharts安装下载所遇到的问题及部分的解决
- mysql 高可用方案
- 测试工程师, 入职以后如何开展工作?
- ios在判断设备是ipad_识别您的 iPad 机型
- mysql slave duplicate entry_slave 报Duplicate entry for key
- 使用burp进行网站爆破
- 复制微信号并跳转到微信界面
热门文章
- 苹果手机的ipsec
- firt time come in
- 软考—信息项目管理师(信息化和信息系统二)
- python sklearn metrics,在Python中sklearn.metrics.mean_squared_error越大越好(否定)?
- 大学计算机考试不挂科秘诀,在大学,考试想不挂科,学渣的4个锦囊妙计,最后一点看笑了!...
- java 泛型中的上界(extend)和下界(super)
- Pixelmator for Mac(强大的图像处理软件)
- ACM 比赛 训练记录(持续更新)
- android 直播sdk 抖音,从零开始仿写一个抖音App——跨平台视频编辑SDK项目搭建
- 2017年总结及2018年规划