CLIP 完整上手教程:用一句文字看懂图片里的内容
【免费下载链接】CLIPCLIP (Contrastive Language-Image Pretraining), Predict the most relevant text snippet given an image项目地址: https://gitcode.com/GitHub_Trending/cl/CLIP
CLIP(Contrastive Language-Image Pretraining)是 OpenAI 开源的图文匹配模型:给它一张图片和几条文字候选,它直接告诉你哪条文字和图片最对得上,不需要针对具体任务重新训练。这篇 CLIP 安装教程面向没有机器学习背景的运营、学生和自学者,全程跟着走一遍,你就能在自己电脑上跑通第一次图片识别。
💡 一句话搞懂
把 CLIP 想成一位阅图无数的老编辑:它事先看过十几亿组"图片+配文",已经学会了把图和文字在同一个空间里"对齐"。比如你递给它一张架构图,再递上三个选项:a diagram、a dog、a cat,它会果断圈出 a diagram——而且你从没告诉过它答案。
📋 动手前自查
先花一分钟对照电脑配置,三行看够:
| 配置项 | 要求 | 说明 |
|---|---|---|
| Python | 3.8 及以上 | 用 conda 建环境时一条命令就能指定版本 |
| 内存 | 4GB 起步,推荐 8GB | 模型本身不大,主要占用在推理过程 |
| 显卡 | 可选 | 有 NVIDIA 显卡装 GPU 版 PyTorch,速度快很多 |
没有独显、只有 4GB 内存的办公本也能完整跑通本文所有例子,只是同一步推理要等几十秒而不是几秒。
🔧 安装主流程
全程 4 步,Windows、macOS、Linux 通用,只有第 2 步按显卡情况二选一。
- 用 conda 创建并激活一个独立环境(环境隔离可以避免依赖互相打架):
conda create -n clip-env python=3.8 -y conda activate clip-env- 安装 PyTorch 和 torchvision。有 NVIDIA 显卡(CUDA 11.0 环境)的机器用:
conda install --yes -c pytorch pytorch=1.7.1 torchvision cudatoolkit=11.0没有显卡的纯 CPU 机器,把cudatoolkit=11.0换成cpuonly:
conda install --yes -c pytorch pytorch=1.7.1 torchvision cpuonly- 装齐剩下的小依赖,并把 CLIP 源码下载到本地:
pip install ftfy regex tqdm packaging git clone https://gitcode.com/GitHub_Trending/cl/CLIP- 进入目录,把它安装成一个可 import 的 Python 包:
cd CLIP pip install .装完之后,在任何目录执行import clip都不报错,说明安装成功。
🏁 跑通第一次
在 clone 下来的 CLIP 目录里新建test_clip.py,粘贴下面代码,然后运行python test_clip.py:
import torch import clip from PIL import Image device = "cuda" if torch.cuda.is_available() else "cpu" model, preprocess = clip.load("ViT-B/32", device) # 首次会自动下载约 300MB 权重 image = preprocess(Image.open("CLIP.png")).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) probs = model(image, text)[0].softmax(dim=-1).cpu().numpy() print("Label probs:", probs)预期输出形如[[0.9927937 0.00421068 0.00299572]]:三个数字对应三条候选文字,第一个约 0.99,说明模型有 99% 的把握认为这张图是 a diagram(示意图),图文匹配已经生效。
ViT-B/32是默认模型名,嫌它占资源可以换成更小的RN50;拿不准还有哪些可选,运行时打印clip.available_models()就能看全部。
🩹 踩坑速查
第一次跑基本都会撞上下面这几条,对号入座:
| 报错现象 | 可能原因 | 一行解决法 |
|---|---|---|
ImportError: No module named 'torch' | PyTorch 没装或装到了别的环境 | 在 clip-env 里重装:conda install -c pytorch pytorch cpuonly |
| 首次运行卡在下载模型 | 权重约 300MB,网络慢或中断 | 直接重跑脚本即可续传 |
CUDA out of memory | 显存不够 | 把模型名换小:clip.load("RN50", device) |
ModuleNotFoundError: No module named 'ftfy' | 小依赖没装全 | pip install ftfy regex tqdm |
实战一下(2 个例子)
跑通之后,把模型用到两个真实场景里。
例子一:零样本分类——不给任何训练数据,直接用文字给 100 个候选类别排序:
import clip, torch, os from torchvision.datasets import CIFAR100 device = "cuda" if torch.cuda.is_available() else "cpu" model, preprocess = clip.load("ViT-B/32", device) data = CIFAR100(root=os.path.expanduser("~/.cache"), download=True, train=False) image, _ = data[3637] img = preprocess(image).unsqueeze(0).to(device) txt = torch.cat([clip.tokenize(f"a photo of a {c}") for c in data.classes]).to(device) with torch.no_grad(): a = model.encode_image(img) b = model.encode_text(txt) sim = 100.0 * a / a.norm(-1, keepdim=True) @ b / b.norm(-1, keepdim=True) top = sim.T.softmax(-1)[0].topk(5) print([data.classes[i] for i in top.indices]) # 最可能的 5 个类别预期输出 5 个类别名,第一个通常就是这张图(编号 3637)的真实类别,把握在 80% 上下。
例子二:文字和图片比相似度——写两句描述,看哪句更像这张图(在 CLIP 仓库目录里运行):
import clip, torch from PIL import Image device = "cuda" if torch.cuda.is_available() else "cpu" model, preprocess = clip.load("ViT-B/32", device) img = preprocess(Image.open("CLIP.png")).unsqueeze(0).to(device) txt = clip.tokenize(["a flowchart made of boxes and arrows", "a photo of a cat"]).to(device) with torch.no_grad(): a = model.encode_image(img) / model.encode_image(img).norm(-1, keepdim=True) b = model.encode_text(txt) / model.encode_text(txt).norm(-1, keepdim=True) print(100.0 * (a @ b.T).softmax(-1).cpu().numpy()) # 两条描述的匹配概率预期输出两个概率,第一句(流程图描述)会明显更高——说明 CLIP 做的是语义匹配,而不是关键词命中。
延伸入口
- 核心模型代码:clip/clip.py
- 官方文档与 API 说明:README.md
- 依赖清单:requirements.txt
- 可交互示例 notebook:notebooks/Interacting_with_CLIP.ipynb
- 模型背景介绍:model-card.md
下一步:把验证代码里的三条候选文字换成你自己的业务,比如"商品主图"对"类目名",观察概率排序会怎么变。
【免费下载链接】CLIPCLIP (Contrastive Language-Image Pretraining), Predict the most relevant text snippet given an image项目地址: https://gitcode.com/GitHub_Trending/cl/CLIP
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考