CLIP模型调用的一段代码及解释

代码示例

from transformers import CLIPProcessor, CLIPModel# 加载预训练的CLIP模型和处理器
model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")# 显示图像
from IPython.display import Image, display
display(Image(filename="data_examples/truck.jpg"))# 加载图像
from PIL import Image
image = Image.open("data_examples/truck.jpg")# 准备文本标签
cls_list = ["dog", "woman", "man", "car", "truck","a black truck", "bird", "a white truck", "black cat"]# 使用处理器预处理图像和文本
inputs = processor(text=cls_list, images=image,return_tensors="pt", padding=True)# 使用模型计算图像和文本的匹配度
outputs = model(**inputs)
print(outputs.keys())# 提取图像和文本的相似性分数
logits_per_image = outputs.logits_per_image
probs = logits_per_image.softmax(dim=1)# 输出每个标签的相似性概率
for i in range(len(cls_list)):print(f"{cls_list[i]}: {probs[0][i]}")

详细解释和API说明

1. 导入CLIP模型和处理器
from transformers import CLIPProcessor, CLIPModel
  • CLIPModel:这个类提供了CLIP模型的加载和调用方法。CLIP模型能理解和关联图像和文本两种输入。
  • CLIPProcessor:这个类提供了图像和文本数据的预处理功能。它将原始的图像和文本转换为模型可以理解的格式。
2. 加载预训练的CLIP模型和处理器
model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")
  • from_pretrained:这是一个用于加载预训练模型的函数。在这里,我们加载了OpenAI预训练的CLIP模型和处理器版本"openai/clip-vit-base-patch32"。这种预训练使模型在特定的大数据集上提前学习了一般性的图像和文本关系。
  • "openai/clip-vit-base-patch32":这是指定的模型版本。ViT-B/32是CLIP模型的一种架构,基于视觉变换器(Vision Transformer),patch size为32x32。
3. 显示图像
from IPython.display import Image, display
display(Image(filename="data_examples/truck.jpg"))
  • display:这是一个IPython提供的函数,用于在Jupyter笔记本或类似环境中显示图像或其他媒体内容。
  • Image:用于加载和显示图像文件。在这里,我们加载并展示名为“truck.jpg”的图像。
4. 加载图像
from PIL import Image
image = Image.open("data_examples/truck.jpg")
  • Image.open:这是PIL库中的一个函数,用于从文件中加载图像。在这里,我们打开名为“truck.jpg”的图像并将其存储在变量image中。
5. 准备文本标签
cls_list = ["dog", "woman", "man", "car", "truck","a black truck", "bird", "a white truck", "black cat"]
  • cls_list:这是一个包含多个文本标签的列表,用于描述图像中可能的内容。在这个例子中,我们准备了一些描述性的短语来描述可能的图像内容。
6. 使用处理器预处理图像和文本
inputs = processor(text=cls_list, images=image,return_tensors="pt", padding=True)
  • processor:处理器将文本和图像转换为模型可以理解的格式。
  • text=cls_list:传递文本描述列表给处理器。
  • images=image:传递图像给处理器。
  • return_tensors="pt":指定返回的格式为PyTorch张量(pt表示PyTorch)。
  • padding=True:这个参数在处理文本时添加必要的填充(padding),使得所有文本序列长度一致,便于模型处理。
7. 使用模型计算图像和文本的匹配度
outputs = model(**inputs)
print(outputs.keys())
  • model(**inputs):这里我们将预处理后的输入(图像和文本)传递给CLIP模型。**inputs的语法将字典中的键值对作为关键字参数传递给函数。模型输出的是图像和文本之间的匹配度分数。
  • outputs.keys():这是输出的一个字典,keys()显示了输出的键,这里包含了logits_per_imagelogits_per_text,分别表示图像和文本的相似性得分。
8. 提取图像和文本的相似性分数
logits_per_image = outputs.logits_per_image
probs = logits_per_image.softmax(dim=1)
  • logits_per_image:这是模型输出的图像与每个文本标签的匹配度得分。分数越高,图像和对应文本标签的相似度越高。
  • softmax(dim=1):这是一个函数,将每个得分转换为概率。dim=1表示对每一行进行归一化处理,使得每一行的所有得分之和为1,这样可以直观地理解为概率分布。
9. 输出每个标签的相似性概率
for i in range(len(cls_list)):print(f"{cls_list[i]}: {probs[0][i]}")
  • for i in range(len(cls_list)):这是一个循环,遍历每个文本标签。
  • probs[0][i]:这里我们提取每个文本标签与图像的相似性概率。
  • print(f"{cls_list[i]}: {probs[0][i]}"):打印出每个文本标签的相似性概率。

API说明和使用方法

  1. CLIPModel.from_pretrained

    • 功能:加载一个预训练的CLIP模型。
    • 参数
      • pretrained_model_name_or_path:模型名称或路径。
    • 使用场景:当需要使用CLIP模型处理图像和文本时,首先需要加载预训练模型。
  2. CLIPProcessor.from_pretrained

    • 功能:加载一个预训练的CLIP处理器,用于数据预处理。
    • 参数
      • pretrained_model_name_or_path:处理器名称或路径。
    • 使用场景:当需要将原始图像和文本转换为模型可以接受的格式时,使用处理器。
  3. processor(text, images, return_tensors, padding)

    • 功能:预处理图像和文本。
    • 参数
      • text:文本描述或标签。
      • images:输入的图像。
      • return_tensors:指定返回的张量类型(如PyTorch)。
      • padding:是否添加填充,使文本序列长度一致。
    • 使用场景:在将数据输入到模型之前,使用这个函数来预处理图像和文本。
  4. softmax(dim)

    • 功能:将输入转换为概率分布。
    • 参数
      • dim:指定沿哪个维度进行归一化。
    • 使用场景:当需要将模型的输出得分转换为概率时使用。

代码执行输出

Unused or unrecognized kwargs: padding.
odict_keys(['logits_per_image', 'logits_per_text', 'text_embeds', 'image_embeds', 'text_model_output', 'vision_model_output'])
dog: 4.405162326293066e-05
woman: 3.664665564429015e-05
man: 0.00025887592346407473
car: 0.013572390191257
truck: 0.0647275298833847
a black truck: 0.02343730442225933
bird: 7.969647413119674e-05
a white truck: 0.8978394269943237
black cat: 4.128721229790244e-06

好的!让我们逐步解析代码输出,理解每一部分的含义:

输出部分一:警告信息
Unused or unrecognized kwargs: padding.
  • 含义
    这是一个警告信息,表示在调用processor时,传递的参数padding=True没有被使用或识别。虽然这个警告不影响主要功能,但它提示我们在使用API时需要检查并确保传递的参数是有效的。

  • 原因
    在CLIP的处理器中,padding参数可能并不适用或者没有实现作用。通常,padding在处理文本序列(如长短不一的句子)时用来对齐长度,但在当前的CLIP处理器实现中,它可能不需要这个参数或有不同的处理方式。

  • 解决办法
    可以去掉padding=True参数,或者查看CLIP的文档,确定是否有其他替代方法来处理需要填充的情况。如果我们确实需要对齐文本长度,可以手动进行处理,或者依赖CLIP自动处理。

输出部分二:模型输出的键
odict_keys(['logits_per_image', 'logits_per_text', 'text_embeds', 'image_embeds', 'text_model_output', 'vision_model_output'])
  • 含义
    这是CLIP模型在处理图像和文本后返回的结果。odict_keys表示有序字典的键(键顺序保持输入顺序),这些键对应的值是模型的输出结果。每个键的含义如下:

    • logits_per_image:图像和文本之间的相似性得分,每个得分表示输入图像与各个文本描述的匹配程度。
    • logits_per_text:文本和图像之间的相似性得分,每个得分表示输入文本与各个图像的匹配程度(在这个例子中,我们主要使用logits_per_image)。
    • text_embeds:文本的嵌入向量,表示文本在模型中的特征表示。
    • image_embeds:图像的嵌入向量,表示图像在模型中的特征表示。
    • text_model_output:文本编码器的完整输出,包括中间层的表示和注意力分数等。
    • vision_model_output:视觉编码器的完整输出,包括中间层的表示和注意力分数等。
输出部分三:相似性概率
dog: 4.405162326293066e-05
woman: 3.664665564429015e-05
man: 0.00025887592346407473
car: 0.013572390191257
truck: 0.0647275298833847
a black truck: 0.02343730442225933
bird: 7.969647413119674e-05
a white truck: 0.8978394269943237
black cat: 4.128721229790244e-06
  • 含义
    这些是每个文本标签与图像的相似性概率。概率越高,表示模型认为图像与该文本标签的匹配度越高。所有的概率值都是通过softmax函数归一化后的结果,因此它们的和为1。

  • 解释

    • dog: 4.405162326293066e-05:图像与“dog”的匹配概率非常低,接近0,表示模型认为图像中没有狗。
    • a white truck: 0.8978394269943237:图像与“a white truck”的匹配概率最高,为0.8978,表示模型高度认为图像中包含白色卡车。
    • truck: 0.0647275298833847a black truck: 0.02343730442225933:这两个标签的概率也不高,但比其他的高一些,表示图像中可能有卡车,但具体是黑色的还是白色的(模型更倾向于白色)。
  • 理解

    • 概率的对比:从结果看,a white truck的概率远高于其他标签,这意味着图像最有可能是白色卡车。
    • 用途:通过这些概率,用户可以判断输入的图像更符合哪些描述,这在图像分类、内容推荐等场景非常有用。

总结

  1. 警告信息:警告提示我们参数padding=True在当前环境下无效。可以去掉或检查文档获取更多信息。
  2. 模型输出的键:提供了模型的多个输出,其中我们主要关注logits_per_image,它表示图像和文本的匹配度得分。
  3. 相似性概率:显示了每个标签与图像的匹配概率,概率最高的标签表示模型认为最符合图像内容的描述。

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

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

相关文章

从0到1,揭秘AI产品经理的高薪秘诀,转型之路与实战资源全解析

前言 随着算法模型的日益精进、计算能力的显著提升以及海量数据的积累,人工智能领域正以前所未有的速度蓬勃发展。 在国家政策的积极推动、社会资本的强劲注入下,人工智能产业正处于技术快速进步的黄金时期,其影响力广泛渗透至教育智能化、…

Day54 代码随想录打卡|二叉树篇---二叉搜索树的最近公共祖先

题目(leecode T235): 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖…

Nginx负载均衡之负载均衡策略

负载均衡技术是将大量的客户端请求通过特定的策略分配到集群中的节点,实现快速响应的应用技术。在应对高并发的应用请求时,单节点的应用服务计算能力有限,无法满足客户端的响应需求,通过负载均衡技术,可以将请求分配到…

DAY 45 企业级虚拟化技术KVM

企业级虚拟化技术KVM 1.kvm是什么 kernel virtualization machine 内核虚拟机 qemu的二次开发 软件全拼 qemu-kvm kvm virtulbox ovm vmware vsphere套件(vmawre-esxi) microsoft hyper-V 2.什么是虚拟化 资源利用 资源隔离 虚拟化管理&…

CleanMyMac X for Mac系统优化垃圾清理软件卸载 工具(小白轻松上手,简单易学)

Mac分享吧 文章目录 效果一、准备工作二、开始安装1、双击运行软件,将其从左侧拖入右侧文件夹中,等待安装完毕2、启动台显示软件图标,表示安装成功 三、运行测试1、打开软件,配置2、授权,允许完全磁盘访问 安装完成&a…

驱动、BSP、HAL三者的区别和联系

目录 引言 一、驱动(Driver) 二、板级支持包(BSP, Board Support Package) 三、硬件抽象层(HAL, Hardware Abstraction Layer) 四、区别与联系 五、总结 引言 驱动(Driver)、板…

正规式理解

正规式(Regular Expression)是一种用于描述、识别字符串集合的模式(尤其是正则语言)的序列表达式。在软件设计中,正规式被广泛用于文本处理、搜索和替换、数据验证等场景。以下是对正规式的基本理解: 1. *…

django filter 数据 Response返回

在Django中,你可以使用Django的filter()方法来筛选查询集(QuerySet),并将结果返回给客户端。以下是一个简单的例子,展示了如何在Django视图中筛选数据,并将结果以JSON的形式返回给客户端。 首先,确保你有一个Django模…

vue3 defineComponent + 渲染函数h + 全局注册​

defineComponent 是 Vue 3 中的一个函数,用于定义一个组件。它是 Vue 3 的组合式 API 的一部分,提供了一种更加灵活和组织化的方式来定义组件。在 Vue 2 中,我们通常使用一个对象来定义组件,而在 Vue 3 中,defineCompo…

赶走异味保持清香,何浩明净味爽身香体膏

夏天来了,大家都想要清清爽爽的出门,但是汗味、狐臭这些小问题都在所难免,总要想办法应对,我目前用的是一款香体膏,它不仅能赶走那些让人尴尬的异味,还能让我们享受一整天的清新自在。 我用的这款叫做何浩明…

解决接入sleuth链路追踪后xxl-job定时任务的日志无日志问题

问题背景 随着业务规模的不断的增大, 系统的复杂度也越来越高, 公司软件架构也进入到了分布式微服务的阶段, 在这样的情况下每一次请求都有可能跨越多个项目, 传统的日志监控方式无法满足调用链路追踪, 这就导致问题定位/诊断服务变得复杂。所以我们引入了sleuth这一…

STM32MP135裸机编程:配置RCC,修改主频到1GHz

0 工具准备 STM32CubeMX v6.11.1 STM32CubeIDE v1.15 STM32CubeProgrammer v2.16.0 STM32MP13xx参考手册 STM32MP13勘误手册 STM32MP135AD数据手册 正点原子stm32MP135开发板 1 确认时钟源 本例使用的时钟源均由外部晶振提供,分别是24MHz的HSE、32.768KHz的LSE。原…

重学java 74.Lombok的使用

少点心气,多点干劲 —— 24.6.18 一、lombok的安装使用 1.作用: 简化javabean开发 2.使用: a.下插件 ->如果是idea2022不用下载了,自带 b.导lombok的jar包 安装教程: http://t.csdnimg.cn/wq9MM c.修改设置 二、lombok的介绍 Lombok通过增加一…

gitlab 身份验证手机号验证没86

处理方案 在浏览器中摁 【F12】打开控制台,选择网络模块,找到手机号列表的请求,请求是 https://gitlab.com/-/countries,右击数据区域点击【替换内容】如下: ![在这里插入图片描述](https://img-blog.csdnimg.cn/di…

【信息学奥赛】CSP-J/S初赛03 计算机网络与编程语言分类

第1节 计算机网络基础 1.1 网络的定义 所谓计算机网络,就是利用通信线路和设备,把分布在不同地理位置上的多台计算机连 接起来。计算机网络是现代通信技术与计算机技术相结合的产物。 网络中计算机与计算机之间的通信依靠协议进行。协议是计算机收、发…

Linux文件与内容查阅、归档压缩

#Linux系统基础 文件与内容查找、归档压缩 find命令搜索文件 grep对文件的内容进行搜索 tar命令进行文件的压缩与解压缩 一、文件的查找 格式实例:find . -name "123.txt"说明find起始目录查找类型查找条件./ 或 .-name“123.txt”在当前目录中查找…

CIC-DDoS2019-Detection

CIC-DDoS2019 对CIC-DDoS2019数据集进行检测,本文提供了如下内容: 数据清洗与合并机器学习模型深度学习模型PCA,t-SNE分析数据,结果可视化 代码地址:[daetz-coder](https://github.com/daetz-coder/CIC-DDoS2019-Detection) 1、数据集加载…

echart在线图表demo下载直接运行

echart 全面的数据可视化图表解决方案 | 折线图、柱状图、饼图、散点图、水球图等各类图表展示 持续更新中 三色带下表题速度仪表盘 地图自定义图标 动态环形图饼状图 动态水波动圆形 多标题指针仪表盘 温度仪表盘带下标题 横向柱状图排名 环形饼状图 双折线趋势变化

排序——快速排序

目录 思想 演示 代码实现 解释 优化 三数取中 小区间优化 补充 挖坑法 双指针法 非递归实现 思想 快速排序是一种二叉树结构的交换排序方法。 基本思想为:任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列&am…

​【数据结构与算法】冒泡排序:简单易懂的排序算法解析

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《数据结构与算法》 期待您的关注 ​ 目录 一、引言 二、冒泡排序原理 🍃基本思想: 🍃算法…