# 使用 CLIP 模型进行图像和文本匹配的示例代码
import torch
import clip
from PIL import Image
# 加载预训练的 CLIP 模型和对应的图像处理函数
device = "cuda" if torch.cuda.is_available() else "cpu"
model, preprocess = clip.load("ViT-B/32", device=device)
# 准备输入的图像和文本
image = preprocess(Image.open("image.jpg")).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)
# 计算相似度
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)
# 输出相似度结果
probs = similarity.cpu().numpy()
print("Label probs:", probs) # 打印每个文本标签与图像的相似度概率
clip.load
函数加载预训练的 CLIP 模型(这里选择的是 ViT-B/32 模型),并指定设备(GPU 或 CPU)。preprocess
函数对输入图像进行预处理,并将文本标签转换为 tokenized 形式。model.encode_image
和 model.encode_text
分别计算图像和文本的特征向量。如果你没有安装 CLIP 库,可以通过以下命令安装:
pip install git+https://github.com/openai/CLIP.git
上一篇:python定义一个列表
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站