CLIP官方github代码详解_README

news/2024/10/4 16:08:36/文章来源:https://blog.csdn.net/buyaotutou/article/details/142203649

系列文章目录


文章目录

  • 系列文章目录
  • 一、Usage
    • 1、conda install --yes -c pytorch pytorch=1.7.1 torchvision cudatoolkit=11.0
    • 2、示例代码
  • 二、API
    • 1、clip.available_models()
    • 2、clip.load(name, device=..., jit=False)
    • 3、clip.load()返回的模型支持以下方法:
  • 三、更多例子
    • 1、Zero-Shot预测
    • 2、Linear-probe评价
  • 四、参见


一、Usage

1、conda install --yes -c pytorch pytorch=1.7.1 torchvision cudatoolkit=11.0

conda: 这是一个包管理工具,用于管理 Python 环境和安装软件包。
install: 这是一个命令,表示要安装软件包。
–yes: 这个选项表示在安装过程中自动确认所有提示,避免手动确认。
-c pytorch: 这个选项指定了要从名为 pytorch 的频道(repository)中安装软件包。Conda 允许从不同的频道获取软件包。
pytorch=1.7.1: 这是要安装的具体软件包及其版本。在这里,表示要安装 PyTorch 的 1.7.1 版本。
torchvision: 这是另一个要安装的软件包,通常与 PyTorch 一起使用,提供计算机视觉相关的工具和数据集。
cudatoolkit=11.0: 这是要安装的 CUDA 工具包的版本,CUDA 是用于 GPU 加速计算的工具。这里指定为 11.0 版本。

2、示例代码

import torch  # 导入 PyTorch 库,用于深度学习相关操作
import clip  # 导入 CLIP 库,用于处理图像和文本的模型
from PIL import Image  # 从 PIL 库导入 Image 模块,用于图像处理# 检查是否有可用的 GPU,如果有则使用 CUDA,否则使用 CPU
device = "cuda" if torch.cuda.is_available() else "cpu"# 加载 CLIP 模型和预处理函数,使用 ViT-B/32 结构,指定计算设备
model, preprocess = clip.load("ViT-B/32", device=device)# 打开指定的图像文件,进行预处理,并增加一个维度(batch size),然后移动到指定设备
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)# 计算图像和文本之间的对比 logitslogits_per_image, logits_per_text = model(image, text)# 对 logits 进行 softmax 操作,得到每个文本标签的概率分布probs = logits_per_image.softmax(dim=-1).cpu().numpy()# 打印每个标签的概率,显示模型对每个文本的预测概率
print("Label probs:", probs)  # prints: [[0.9927937  0.00421068 0.00299572]]

二、API

CLIP 的模型clip提供以下方法:

1、clip.available_models()

返回可用 CLIP 模型的名称。

2、clip.load(name, device=…, jit=False)

返回模型和模型所需的 TorchVision 变换,由clip.available_models()返回的模型名称指定。它会根据需要下载模型。name参数也可以是本地检查点的路径。可以选择性地指定运行模型的设备,默认是使用第一个CUDA设备(如果有的话),否则使用CPU。当jitFalse时,将加载模型的非jit版本。
CLIP的JIT版本指的是使用“Just-In-Time”编译技术优化的CLIP模型。CLIP(Contrastive Language-Image Pretraining)是一种结合文本和图像的模型,能够理解和生成与图像相关的文本描述。
JIT版本的CLIP通常意味着:
性能优化:通过JIT编译,模型在推理时能够更快地执行,减少延迟。
动态计算图:利用PyTorch的JIT功能,可以动态地优化计算图,提升效率。
更好的资源利用:能够更有效地利用GPU等硬件资源,提高整体性能。
总的来说,CLIP的JIT版本旨在提高模型的运行速度和效率,特别是在处理大规模数据时。

3、clip.load()返回的模型支持以下方法:

model.encode_image(image: Tensor)

给定一批图像,返回由CLIP模型的视觉部分编码的图像特征。

model.encode_text(text: Tensor)

给定一批文本标记,返回由CLIP模型的语言部分编码的文本特征。

model(image: Tensor, text: Tensor)

给定一批图像和一批文本标记,返回两个张量,包含对应于每个图像和文本输入的logit分数。其值是对应图像和文本特征之间的相似度的余弦值,乘以100。

三、更多例子

1、Zero-Shot预测

下面的代码使用CLIP执行Zero-Shot预测,如本文附录B所示。本例从CIFAR-100数据集中获取图像,并在数据集中的100个文本标签中预测最可能的标签。注意,本例使用encode_image()encode_text()方法返回给定输入的编码特征。

import os
import clip
import torch
from torchvision.datasets import CIFAR100# Load the model
device = "cuda" if torch.cuda.is_available() else "cpu"
model, preprocess = clip.load('ViT-B/32', device)# Download the dataset
cifar100 = CIFAR100(root=os.path.expanduser("~/.cache"), download=True, train=False)# Prepare the inputs
image, class_id = cifar100[3637]
image_input = preprocess(image).unsqueeze(0).to(device)
text_inputs = torch.cat([clip.tokenize(f"a photo of a {c}") for c in cifar100.classes]).to(device)# Calculate features
with torch.no_grad():image_features = model.encode_image(image_input)text_features = model.encode_text(text_inputs)# Pick the top 5 most similar labels for the image
image_features /= image_features.norm(dim=-1, keepdim=True)
text_features /= text_features.norm(dim=-1, keepdim=True)
similarity = (100.0 * image_features @ text_features.T).softmax(dim=-1)
values, indices = similarity[0].topk(5)# Print the result
print("\nTop predictions:\n")
for value, index in zip(values, indices):print(f"{cifar100.classes[index]:>16s}: {100 * value.item():.2f}%")

输出将如下所示(具体数字可能因计算设备的不同而略有不同):

Top predictions:snake: 65.31%turtle: 12.29%sweet_pepper: 3.83%lizard: 1.88%crocodile: 1.75%

2、Linear-probe评价

下面的示例使用scikit-learn对图像特征执行逻辑回归。

import os
import clip
import torchimport numpy as np
from sklearn.linear_model import LogisticRegression
from torch.utils.data import DataLoader
from torchvision.datasets import CIFAR100
from tqdm import tqdm# Load the model
device = "cuda" if torch.cuda.is_available() else "cpu"
model, preprocess = clip.load('ViT-B/32', device)# Load the dataset
root = os.path.expanduser("~/.cache")
train = CIFAR100(root, download=True, train=True, transform=preprocess)
test = CIFAR100(root, download=True, train=False, transform=preprocess)def get_features(dataset):all_features = []all_labels = []with torch.no_grad():for images, labels in tqdm(DataLoader(dataset, batch_size=100)):features = model.encode_image(images.to(device))all_features.append(features)all_labels.append(labels)return torch.cat(all_features).cpu().numpy(), torch.cat(all_labels).cpu().numpy()# Calculate the image features
train_features, train_labels = get_features(train)
test_features, test_labels = get_features(test)# Perform logistic regression
classifier = LogisticRegression(random_state=0, C=0.316, max_iter=1000, verbose=1)
classifier.fit(train_features, train_labels)# Evaluate using the logistic regression classifier
predictions = classifier.predict(test_features)
accuracy = np.mean((test_labels == predictions).astype(float)) * 100.
print(f"Accuracy = {accuracy:.3f}")

注意,c值应该通过使用验证分割的超参数扫描来确定。

四、参见

OpenCLIP: 包括较大的和独立训练的CLIP模型,最高可达 ViT-G/14
Hugging Face implementation of CLIP: 更容易与HF生态系统集成

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

如若内容造成侵权/违法违规/事实不符,请联系编程新知网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

django学习入门系列之第十点《A 案例: 员工管理系统8》

文章目录 10.6 重写样式10.7 判断数据是否合法10.8 保存内容至数据库10.9 修改入职时间10.10 错误提示10.11 重写错误信息往期回顾 10.6 重写样式 注意:因为他框架都已经给你写好了,所以如果要使用样式的话可能要自己重新定义框架来进行修改 他有两种方…

mac 如何开启指定端口供外部访问?

前言 需要 mac 上开放指定端口,指定 ip 访问 解决 在 macOS 上开放一个端口,并指定只能特定的 IP 访问,可以使用 macOS 内置的 pfctl(Packet Filter)工具来实现。 1、 编辑 pf 配置文件: 打开 /etc/pf.conf 文件进行编辑。 可以使…

学习笔记 韩顺平 零基础30天学会Java(2024.9.16)

P563 自定义泛型方法 当调用方法时,要传入参数,因为当传入参数时,编译器就可以确定泛型代表的类型 泛型方法和方法使用了泛型是不一样的 泛型方法可以使用类声明的泛型,也可以使用自己的泛型 P564 泛型方法练习 P565 泛型的继承和…

ZW3D二次开发_UI_非模板表单_设置表单显示位置

1.ZW3D弹出非模板表单时可以设置弹出位置(居中、左下角、右上角等) 2.假设已创建好非模板表单 3.在Form属性中添加form_pos属性 4.输入值 base,CTR,0.0 ,如下图 也可以设置为其他值显示在不同的位置,如下 5.重新编译,…

使用 GaLore 预训练LLaMA-7B

项目代码: https://github.com/jiaweizzhao/galorehttps://github.com/jiaweizzhao/galore 参考博客: https://zhuanlan.zhihu.com/p/686686751 创建环境 基础环境配置如下: 操作系统: CentOS 7CPUs: 单个节点具有 1TB 内存的 Intel CP…

高德2.0 多边形覆盖物无法选中编辑

多边形覆盖物无法选中编辑。先检查一下数据的类型得是<number[]>,里面是字符串的虽然显示没问题&#xff0c;但是不能选中编辑。 &#xff08;在项目中排查了加载时机&#xff0c;事件监听…等等种种原因&#xff0c;就是没发现问题。突然想到可能是数据就有问题&#xf…

Pytorch详解-Pytorch核心模块

Pytorch核心模块 一、Pytorch模块结构_pycache__Cincludelibautogradnnoptimutils 二、Lib\site-packages\torchvisiondatasetsmodelsopstransforms 三、核心数据结构——Tensor&#xff08;张量&#xff09;在深度学习中&#xff0c;时间序列数据为什么是三维张量&#xff1f;…

OpenCV结构分析与形状描述符(21)计算包围给定点集的最小面积三角形函数minEnclosingTriangle()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 找到一个包围二维点集的最小面积三角形&#xff0c;并返回其面积。 该函数找到一个包围给定的二维点集的最小面积三角形&#xff0c;并返回其面…

VMware Fusion虚拟机Mac版 安装Win10系统教程

Mac分享吧 文章目录 Win10安装完成&#xff0c;软件打开效果一、VMware安装Windows10虚拟机1️⃣&#xff1a;准备镜像2️⃣&#xff1a;创建虚拟机3️⃣&#xff1a;虚拟机设置4️⃣&#xff1a;安装虚拟机&#xff08;步骤和Win11安装步骤类似&#xff0c;此处相同步骤处没换…

828华为云征文|基于华为云Flexus云服务器X实现个人博客搭建

文章目录 ❀前言❀部署前准备❀宝塔安装❀安全组开放❀web访问验证❀安装docker❀安装wordpress❀安全组开放18040端口❀访问博客网址❀发布个人博客❀总结 ❀前言 大家好&#xff0c;我是早九晚十二。 近期华为云推出了最新的华为云Flexus云服务器X&#xff0c;这款云主机在算…

Linux实操笔记2 Ubuntu安装Nginx的不同方法

今天来了解Ubuntu或者说Linux系统安装Nginx的几种办法。包括从Ubuntu的库安装到官方源码编译安装。 一、Nginx是什么&#xff1f; 以下是来自Nginx中文文档的内容。 Nginx 是一个高性能的 Web 和反向代理服务器, 它具有有很多非常优越的特性: 作为 Web 服务器&#xff1a;相比…

UML 类图(提供 Java 实现)

文章目录 UML 类图概述及作用类图表示法类&#xff08;接口&#xff09;的表示类与类之间关系的表示关联关系&#xff08;Association&#xff09;单向关联&#xff08;Unidirectional Association&#xff09;双向关联&#xff08;Bidirectional Association&#xff09;自关联…

Linux memcg lru lock提升锁性能

内核关于per memcg lru lock的重要提交&#xff1a; f9b1038ebccad354256cf84749cbc321b5347497 6168d0da2b479ce25a4647de194045de1bdd1f1d 计算虚拟地址转换基本机制 为了处理多应用程序的地址冲突&#xff0c; linux 系统在应用中使用了虚拟地址&#xff0c;得益于硬件的…

linux 操作系统下date 命令介绍和使用案例

linux 操作系统下date 命令介绍和使用案例 在 Linux 操作系统中&#xff0c;date 命令是一个用于显示和设置系统日期和时间的基本工具。它不仅可以显示当前的日期和时间&#xff0c;还允许用户以不同的格式输出日期&#xff0c;并进行日期计算 1. date 命令简介 date 命令用…

TypeScript类

TypeScript 类 TypeScrip 类的出现完全改变了前端领域项目代码编写模式&#xff0c;配合 TypeScript 静态语言&#xff0c;编译期间就能检查语法错误的优势【项目上线后隐藏语法错误的风险几乎为零&#xff0c;相比不用 TypeScript 开发项目&#xff0c;使用 TypeScript 后对前…

MATLAB 从 R2024B 开始支持树莓派 5

树莓派&#xff08;Raspberry Pi&#xff09;系列是一系列基于单板计算机的微型电脑&#xff0c;由英国的树莓派基金会于 2012 年开始发布。它的目标是提供一个低成本、易于学习和玩耍的平台&#xff0c;用于教育和初学者学习计算机科学和编程。 目前市面上&#xff0c;最新最…

宿舍管理系统的设计与实现 (含源码+sql+视频导入教程)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 宿舍管理系统拥有三个角色&#xff0c;分别为系统管理员、宿舍管理员以及学生。其功能如下&#xff1a; 管理员&#xff1a;宿舍管理员管理、学生管理、宿舍楼管理、缺勤记录管理、个人密…

Nature Geoscience 最新文章解码自然的气候护盾!植物多样性增强草地土壤温度稳定性

本文首发于“生态学者”微信公众号&#xff01; 近日&#xff0c;德国综合生物多样性研究中心&#xff08;iDiv&#xff09;、莱比锡大学、耶拿弗里德里希席勒大学&#xff08;FSU&#xff09;以及其他研究机构的科学家们基于连续18年的草地生物多样性实验揭示了植物多样性能增…

【Android 13源码分析】WindowContainer窗口层级-3-实例分析

在安卓源码的设计中&#xff0c;将将屏幕分为了37层&#xff0c;不同的窗口将在不同的层级中显示。 对这一块的概念以及相关源码做了详细分析&#xff0c;整理出以下几篇。 【Android 13源码分析】WindowContainer窗口层级-1-初识窗口层级树 【Android 13源码分析】WindowCon…

Visual Studio(vs)下载安装C/C++运行环境配置和基本使用注意事项

基本安装 点击跳转到vs官网点击箭头所指的按钮进行下载双击运行刚才下载好的下载器点击继续勾选“使用C的桌面开发”和“Visual Studio扩展开发”点击“安装位置”&#xff0c;对vs的安装位置进行更改。你可以跟我一样只选择D盘或者其他你空闲的盘&#xff0c;然后将默认的路径…