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多模态模型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Windows64x下VScode下载过程

    Windows64x下VScode下载过程

    这篇文章主要介绍了Windows64x下VScode下载,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09
  • Python制作简单的剪刀石头布游戏

    Python制作简单的剪刀石头布游戏

    这篇文章主要介绍了Python制作剪刀石头布游戏的方法,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-12-12
  • 通过Python 接口使用OpenCV的方法

    通过Python 接口使用OpenCV的方法

    下面小编就为大家分享一篇通过Python 接口使用OpenCV的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • Python实现批量添加视频文本水印

    Python实现批量添加视频文本水印

    这篇文章主要为大家详细介绍了如何基于PyQt5开发一个视频水印批量添加工具,旨在为多个视频文件添加文本水印,感兴趣的小伙伴可以参考一下
    2025-02-02
  • 为什么说python更适合树莓派编程

    为什么说python更适合树莓派编程

    在本篇文章里小编给大家整理的是关于为什么说python更适合树莓派编程的相关文章,需要的朋友们可以参考学习下。
    2020-07-07
  • python打包成so文件过程解析

    python打包成so文件过程解析

    这篇文章主要介绍了python打包成so文件过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • python实现tree命令的使用示例

    python实现tree命令的使用示例

    本文主要介绍了python实现tree命令的使用示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-09-09
  • Python 网络编程之TCP客户端/服务端功能示例【基于socket套接字】

    Python 网络编程之TCP客户端/服务端功能示例【基于socket套接字】

    这篇文章主要介绍了Python 网络编程之TCP客户端/服务端功能,结合实例形式分析了Python使用socket套接字实现TCP协议下的客户端与服务器端数据传输操作技巧,需要的朋友可以参考下
    2019-10-10
  • python实现在pickling的时候压缩的方法

    python实现在pickling的时候压缩的方法

    这篇文章主要介绍了python实现在pickling的时候压缩的方法,比较具有实用价值,需要的朋友可以参考下
    2014-09-09
  • 安装conda搭建python环境保姆级教程(超详细!)

    安装conda搭建python环境保姆级教程(超详细!)

    这篇文章主要给大家介绍了关于安装conda搭建python环境保姆级教程的相关资料,conda可以理解为一个工具,也是一个可执行命令,其核心功能是包管理和环境管理,需要的朋友可以参考下
    2023-11-11

最新评论