Python中CLIP多模态模型的库的实现

 更新时间:2025年04月28日 10:52:45   作者:彬彬侠  
CLIP模型是OpenAI开发的一种语言和图像多模态表示方法,本文主要介绍了Python中CLIP多模态模型的库的实现,具有一定的参考价值,感兴趣的可以了解一下

CLIP(Contrastive Language–Image Pretraining)是 OpenAI 提出的 多模态模型,可以将图像和文本映射到同一个嵌入空间中,从而实现图文匹配、零样本分类、图文检索等任务。

虽然 OpenAI 没有单独发布一个叫 clip 的官方 Python 库,但社区版本如 open_clipCLIP from OpenAICLIP-as-service 等都被广泛使用。以下主要介绍:

1. 安装 OpenAI 官方 CLIP

pip install git+https://github.com/openai/CLIP.git

依赖:torchnumpyPIL

2. 快速使用示例

import clip
import torch
from PIL import Image

# 加载模型和预处理方法
device = "cuda" if torch.cuda.is_available() else "cpu"
model, preprocess = clip.load("ViT-B/32", device=device)

# 加载图像并预处理
image = preprocess(Image.open("cat.jpg")).unsqueeze(0).to(device)

# 编写文本描述
text = clip.tokenize(["a photo of a cat", "a photo of a dog"]).to(device)

# 提取特征并计算相似度
with torch.no_grad():
    image_features = model.encode_image(image)
    text_features = model.encode_text(text)
    logits_per_image, logits_per_text = model(image, text)
    probs = logits_per_image.softmax(dim=-1).cpu().numpy()

print("Label probabilities:", probs)

3. 模型选项

支持的模型有:

  • "ViT-B/32":最快,最常用
  • "ViT-B/16":更大更准
  • "RN50""RN101":基于 ResNet

4. 文本编码

text = ["a photo of a banana", "a dog", "a car"]
tokens = clip.tokenize(text).to(device)

with torch.no_grad():
    text_features = model.encode_text(tokens)

5. 图像编码

from PIL import Image

image = Image.open("example.jpg")
image_input = preprocess(image).unsqueeze(0).to(device)

with torch.no_grad():
    image_features = model.encode_image(image_input)

6. 相似度比较

import torch.nn.functional as F

# 余弦相似度
similarity = F.cosine_similarity(image_features, text_features)
print(similarity)

7. 零样本图像分类

labels = ["a dog", "a cat", "a car"]
text_inputs = clip.tokenize([f"a photo of {label}" for label in labels]).to(device)

with torch.no_grad():
    text_features = model.encode_text(text_inputs)
    image_features = model.encode_image(image)

# 归一化
image_features /= image_features.norm(dim=-1, keepdim=True)
text_features /= text_features.norm(dim=-1, keepdim=True)

# 相似度得分
logits = (image_features @ text_features.T)
pred = logits.argmax().item()

print(f"Predicted label: {labels[pred]}")

8. 与其他库对比

特性CLIPBLIP / FlamingoBERT / GPT
图文对齐
多模态能力强(图像 + 文本)更强(支持生成)
零样本能力
适合任务图文检索、匹配、分类生成描述、问答、VQA语言任务

9. 更强大:open_clip

open_clip 是社区支持的更强版本,支持更多预训练模型(如 LAION 提供的):

pip install open_clip_torch
import open_clip

model, preprocess, tokenizer = open_clip.create_model_and_transforms('ViT-B-32', pretrained='laion2b_s34b_b79k')

10. 总结

功能方法
加载模型clip.load()
文本编码model.encode_text()
图像编码model.encode_image()
图文相似度model(image, text) 或余弦相似度
图像分类(零样本)文本描述嵌入后选最大相似度
支持模型"ViT-B/32""ViT-B/16" 等

CLIP 是现代多模态 AI 模型的典范,可广泛应用于图像检索、图文分类、图像问答、跨模态搜索等场景。它在“零样本”条件下也能表现良好,是构建通用图文理解系统的强大工具。

到此这篇关于Python中CLIP多模态模型的库的实现的文章就介绍到这了,更多相关Python CLIP多模态模型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • pyqt5 textEdit、lineEdit操作的示例代码

    pyqt5 textEdit、lineEdit操作的示例代码

    这篇文章主要介绍了pyqt5 textEdit、lineEdit操作的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • PyQt QDoubleSpinBox控件用法示例详解

    PyQt QDoubleSpinBox控件用法示例详解

    QDoubleSpinBox 是 PyQt中用于输入浮点数的控件,支持键盘输入和上下箭头调整数值,本文给大家介绍PyQt QDoubleSpinBox控件用法,感兴趣的朋友一起看看吧
    2025-04-04
  • python数据结构之线性表的顺序存储结构

    python数据结构之线性表的顺序存储结构

    这篇文章主要为大家详细介绍了python数据结构之线性表的顺序存储结构,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • Python 模拟生成动态产生验证码图片的方法

    Python 模拟生成动态产生验证码图片的方法

    这篇文章主要介绍了Python 模拟生成动态产生验证码图片的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • Python数组与列表的区别解析

    Python数组与列表的区别解析

    列表因为其存储的类型可以是任何对象,因此列表的用处更广泛,更多样化,并且列表可以有更多的存储空间去使用,而数组使用的空间就相对较少,这篇文章主要介绍了Python数组与列表的区别,需要的朋友可以参考下
    2023-11-11
  • Python turtle编写简单的球类小游戏

    Python turtle编写简单的球类小游戏

    turtle (小海龟) 是 Python 内置的一个绘图模块,其实它不仅可以用来绘图,还可以制作简单的小游戏。本文将利用Turtle制作一个简单的球类小游戏,感兴趣的可以学习一下
    2022-03-03
  • Python保存MongoDB上的文件到本地的方法

    Python保存MongoDB上的文件到本地的方法

    这篇文章主要介绍了Python保存MongoDB上的文件到本地的方法,涉及Python调用pymongo模块的gridfs方法来操作MongoDB文件的相关技巧,需要的朋友可以参考下
    2016-03-03
  • Python处理结构化数据的12个核心模块全解析

    Python处理结构化数据的12个核心模块全解析

    ​在Python数据生态中,JSON模块因其轻量级和跨语言特性成为最常用的结构化数据处理工具,本文将深入探讨12个核心模块,覆盖表格数据、二进制序列化、配置管理、科学计算等六大场景,结合真实案例解析其技术特性,快跟随小编一起了解下吧
    2025-10-10
  • 详解Python+Matplotlib绘制面积图&热力图

    详解Python+Matplotlib绘制面积图&热力图

    这篇文章主要介绍了如何利用Python+Matplotlib绘制面积图喝热力图,文中的示例代码讲解详细,对我们学习Python有一定帮助,需要的可以参考一下
    2022-04-04
  • Python字符串中的单词反转的实现示例

    Python字符串中的单词反转的实现示例

    在Python中,要将字符串中的单词进行反转,本文主要介绍了Python字符串中的单词反转的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-04-04

最新评论