CLIP使用教程

news/2025/3/28 23:28:13/

文章目录

  • 前言
  • 注意
  • 使用
  • 其他示例

原理篇

前言

本文主要介绍如何调用Hugging Face中openai提供的CLIP API.

注意

  1. 如果碰到模型无法自动下载,可手动下载到本地,注意本地调用路径后缀加/在这里插入图片描述

下载config.jsonpreprocessor_config.jsonpytorch_model.bintokenizer.json

在这里插入图片描述
2. 其中processor中
text表示待检索文本,支持多语句搜索
images表示输入图片,支持多张图片搜索
return_tensors表示返回结果格式,
- 'tf': Return TensorFlow tf.constant objects.
- 'pt': Return PyTorch torch.Tensor objects.
- 'np': Return NumPy np.ndarray objects.
- 'jax': Return JAX jnp.ndarray objects.

使用

准备一张图片,本示例中图片000000039769.jpg如下,
在这里插入图片描述

from PIL import Image
import requestsfrom transformers import CLIPProcessor, CLIPModelmodel = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
# model = CLIPModel.from_pretrained("./clip-vit-base-patch32/")
processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")
#  processor = CLIPProcessor.from_pretrained("./clip-vit-base-patch32/")img_path = "./data/clip/000000039769.jpg"
image = Image.open(img_path)inputs = processor(text=["a photo of a cat", "a photo of a dog"], images=image, return_tensors="pt", padding=True)outputs = model(**inputs)
logits_per_image = outputs.logits_per_image  # this is the image-text similarity score
print(logits_per_image )
probs = logits_per_image.softmax(dim=1)  # we can take the softmax to get the label probabilities
print(probs)

打印结果如下,

tensor([[24.5701, 19.3049]], grad_fn=<PermuteBackward0>)
tensor([[0.9949, 0.0051]], grad_fn=<SoftmaxBackward0>)

返回logits_per_image 并非[0,1],对于多条语句比对时,可通过softmax归一化;
但当输入一条语句(“a photo of a cat”)及一张图片时,无法获得[0,1]之间相似度,难以设定阈值过滤

tensor([[24.5701]], grad_fn=<PermuteBackward0>)
tensor([[1.]], grad_fn=<SoftmaxBackward0>)

outputs结构如下,

return CLIPOutput(loss=loss,logits_per_image=logits_per_image,logits_per_text=logits_per_text,text_embeds=text_embeds,image_embeds=image_embeds,text_model_output=text_outputs,vision_model_output=vision_outputs,)

此时可通过本地计算text_embedsimage_embeds之间余弦相似度,完整代码如下,


from PIL import Image
import torch
from transformers import CLIPProcessor, CLIPModelmodel = CLIPModel.from_pretrained("./clip-vit-base-patch32/")
processor = CLIPProcessor.from_pretrained("./clip-vit-base-patch32/")img_path = "./data/clip/000000039769.jpg"
image = Image.open(img_path)# inputs = processor(text=["a photo of a cat"], images=image, return_tensors="pt", padding=True)
inputs = processor(text=["a photo of a cat","a photo of a dog"], images=image, return_tensors="pt", padding=True)outputs = model(**inputs)
# logits_per_image = outputs.logits_per_image  # this is the image-text similarity score
# print(logits_per_image)
# probs = logits_per_image.softmax(dim=1)  # we can take the softmax to get the label probabilities
# print(probs)similarity = torch.cosine_similarity(outputs.text_embeds, outputs.image_embeds, dim=1)
print(similarity)

输出结果如下,

tensor([0.2457, 0.1930], grad_fn=<SumBackward1>)

猫相似度为0.2457,狗相似度为0.1930

其他示例

“a photo of iron man”
以下靓图similarity分别为:[0.3081, 0.2685]
在这里插入图片描述
在这里插入图片描述
可能电影相关任务,所有第二张图相似度比较高。

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

相关文章

DOUBLETROUBLE: 1

文章目录 DOUBLETROUBLE: 1实战演练一、前期准备1、相关信息 二、信息收集1、nmap探测目标靶机端口2、扫描目标网址目录3、访问网站&#xff0c;发现secret下有个图片4、将图片下载5、查看图片所含内容6、破解密码并查看7、登陆邮箱8、创建反弹shell9、上传反弹shell10、监听11…

【ChatGPT】人工智能发展的背后厉害:跌宕起伏的近百年

文章目录 前言一、麦卡洛克-皮特斯神经元二、赫布式学习三、感知机四、反向传播算法五、卷积神经网络六、递归神经网络七、通用计算GPU芯片八.生成式神经网络与大型语言模型总结 前言 今天&#xff0c;ChatGPT等大型语言预训练神经网络模型已经成为广为人知的名字&#xff0c;…

汽车最强大脑ECU和单片机是什么关系

摘要&#xff1a; 有效解决线路信息传递所带来的复杂化问题 ECU的定义 ECU原来指的是engine control unit&#xff0c;即发动机控制单元&#xff0c;特指电喷发动机的电子控制系统。但是随着汽车电子的迅速发展&#xff0c;ECU的定义也发生了巨大的变化&#xff0c;变成了elec…

[比赛简介]Predict Student Performance from Game Play

比赛链接&#xff1a;https://www.kaggle.com/competitions/predict-student-performance-from-game-play/overview 比赛简介 本次比赛的目标是实时预测学生在基于游戏的学习中的表现。您将开发一个在最大的游戏日志开放数据集之一上训练的模型。 您的工作将有助于推进对基于…

SSM框架学习-请求映射路径、请求参数、json数据传送参数以及日期型参数传递

1. 请求映射路径 在进行多人开发&#xff0c;每个人设置不同的请求路径&#xff0c;要解决冲突问题 设置模块名作为请求路径前缀 两种方式 方式一&#xff1a; public class BookController {//请求路径映射RequestMapping("/book/save")ResponseBodypublic String …

Vue Test Utils 使用教程

Vue Test Utils 是 Vue.js 的官方测试工具库&#xff0c;它提供了一些用于测试 Vue 组件的 API 和工具。本教程将介绍 Vue Test Utils 的基本用法。 安装 使用 npm 安装&#xff1a; npm install --save-dev vue/test-utils基本用法 创建 Wrapper Wrapper 是 Vue Test Utils…

ChatGpt vs 文心一言,谁更厉害

前言 ​ 当下最火的人工智能毫无疑问是大模型的聊天机器人&#xff0c;ChatGpt的出现&#xff0c;让无数人为之惊叹&#xff0c;它聪明、逻辑清晰、又什么都懂&#xff0c;甚至被人们认为是第四次工业革命的开端。AI的大模型之争&#xff0c;美国的OpenAI已经率先拔得头筹&…

pg事务:事务的处理

事务的处理 事务块 从事务形态划分可分为隐式事务和显示事务。隐式事务是一个独立的SQL语句&#xff0c;执行完成后默认提交。显示事务需要显示声明一个事务&#xff0c;多个sql语句组合到一起称为一个事务块。 事务块通过begin&#xff0c;begin transaction&#xff0c;st…