CLIP 安装教程:一句文字匹配图片,3 条命令完成本地部署
【免费下载链接】CLIPCLIP (Contrastive Language-Image Pretraining), Predict the most relevant text snippet given an image项目地址: https://gitcode.com/GitHub_Trending/cl/CLIP
CLIP 是 OpenAI 的对比语言-图像预训练模型:给一句文字,它就帮你给每张图打"匹配分"。本文带你走一遍 CLIP 安装与本地部署的完整流程:查环境、一条命令装完、30 秒验证,最后跑通真实图片的文字匹配。无需深度学习基础,大约 10 分钟。
先查机器:一条命令自检环境
📌 装之前先花 30 秒确认两件事:Python 版本够不够、有没有 NVIDIA 显卡。
python -V # 要求 3.7 及以上 nvidia-smi # 有 NVIDIA 显卡会显示显卡与 CUDA 版本;提示"找不到命令"说明只有 CPU配置参考(官方说明见 README.md):
| 配置项 | 最低要求 | 推荐 |
|---|---|---|
| 系统 | Windows 10 / macOS 10.15 / Ubuntu 20.04 | Windows 11 / macOS 12 / Ubuntu 22.04 |
| 内存 | 4GB | 8GB 以上 |
| 显卡 | 无(CPU 可跑,只是慢) | NVIDIA 显卡 + CUDA |
| Python | 3.7+ | 3.8–3.10 |
✅ 没有独立显卡也没关系,CLIP 在 CPU 上照样工作,本教程所有代码都做了兼容,后面会自动选设备。
环境配置一锅端:3 步装完
创建独立 conda 环境,装 PyTorch,再装 CLIP 本体。Windows / macOS / Linux 通用,差异只有一处(安装 PyTorch 那一行),已用注释标明:
# 第 1 步:创建并激活独立环境,避免依赖互相污染 conda create -n clip python=3.9 -y conda activate clip # 第 2 步:安装 PyTorch(三选一,按机器情况) # 有 NVIDIA 显卡: conda install pytorch torchvision cudatoolkit=11.8 -c pytorch -y # 无显卡(Windows/macOS/Linux 通用,把上面那条换成这条): # conda install pytorch torchvision cpuonly -c pytorch -y # macOS 用户可直接用默认版: # conda install pytorch torchvision -c pytorch -y # 第 3 步:装少量依赖 + 获取 CLIP 源码并安装 pip install ftfy regex tqdm packaging git clone https://gitcode.com/GitHub_Trending/cl/CLIP cd CLIP pip install .三个小提醒:
cudatoolkit=11.8改成与你系统匹配的版本即可(nvidia-smi右上角能看到 CUDA 版本)- 依赖清单见 requirements.txt,打包配置见 setup.py,想核对装了什么可以看这两个文件
- 到这里安装动作就结束了。模型权重不会随 pip 下载,而是在你第一次
clip.load()时才拉取(ViT-B/32 约 350MB),属于正常现象
最快验证:看到 0.99 就说明装好了
在 CLIP 根目录新建一个check.py,内容如下(不足 20 行):
import torch import clip from PIL import Image # 自动选设备:有显卡用 GPU,没有就用 CPU device = "cuda" if torch.cuda.is_available() else "cpu" model, preprocess = clip.load("ViT-B/32", device) # 首次运行会下载权重,稍等 # 读一张仓库自带的示意图,配三句候选描述 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(): logits, _ = model(image, text) # 图文两两算相似度 probs = logits.softmax(dim=-1).cpu().numpy() # 归一化成概率 print(probs[0])预期输出(CPU/GPU 上可能略有出入):
[0.9927937 0.00421068 0.00299572]怎么判断成功:第一个数 0.99 对应 "a diagram"(一张示意图),而 CLIP.png 本身就是一张示意图,概率几乎拉满、另外两项接近 0——只要最高分给到了 "a diagram",说明模型、依赖、设备全链路都通了。clip.load、clip.tokenize这些接口都在 clip/clip.py 里,后面写代码可以翻它。
最容易踩的 3 个坑
症状、原因、解法都压成一行,照抄即可:
| 症状 | 原因 | 一行解法 |
|---|---|---|
ImportError: No module named 'torch'或clip | 没在 clip 环境里运行,依赖没装上 | 先conda activate clip,再在 CLIP 目录重跑pip install . |
| 首次运行时卡在模型下载、速度极慢 | ViT-B/32 权重数百 MB,走的是外网 | 给终端设http_proxy/https_proxy代理后重跑 |
| 内存不足,或 CPU 上跑一张图要等很久 | ViT-B/32 偏大、输入过大 | 把ViT-B/32换成更小的RN50,并减小图片尺寸 |
⚠️ 第 1 条是最常见的:终端里conda env list看一眼,当前环境前面要有星号。
第一个真实场景:用一句话从候选里挑出最贴的图
上面用的是仓库自带的图,现在换成你自己的照片。这就是常说的"零样本"(zero-shot)——不用任何额外训练,直接把文字描述喂进去做分类。
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) # 换成你本地任意一张图片的路径 image = preprocess(Image.open("my_photo.jpg")).unsqueeze(0).to(device) # 四句候选描述 cands = ["a photo of a cat", "a photo of a dog", "a photo of a car", "a photo of a person"] text = clip.tokenize(cands).to(device) with torch.no_grad(): logits_per_image, _ = model(image, text) # softmax 后各项之和为 100%,分越高说明越贴合这张图 probs = logits_per_image.softmax(dim=-1).cpu().numpy()[0] for name, p in zip(cands, probs): print(f"{name:>24s} {p:.2%}")如果你喂进去的是一只猫的照片,输出大概长这样:
a photo of a cat 98.71% a photo of a dog 0.61% a photo of a car 0.32% a photo of a person 0.35%✅ 分数最高的一行就是模型的答案。换描述、换图片,把四句候选扩到几十句,你就有了一个最简版的"文字搜图"。
收尾清单:你已经完成了什么
- 用
python -V和nvidia-smi确认过 Python 版本与显卡情况 - 在独立 conda 环境里装好 PyTorch 与 CLIP 全部依赖
- 跑通验证代码,看到 "a diagram" 概率接近 1
- 用自己的照片完成了一次文字匹配
想继续深入,本地就有现成资料:模型说明 model-card.md、可交互演示 notebooks/Interacting_with_CLIP.ipynb、提示词工程实例 notebooks/Prompt_Engineering_for_ImageNet.ipynb。论文《Learning Transferable Visual Models From Natural Language Supervision》可配合阅读。
下一篇我们聊聊:如何用 CLIP 把上千张图片变成可文字检索的图库,一句话就能定位。
【免费下载链接】CLIPCLIP (Contrastive Language-Image Pretraining), Predict the most relevant text snippet given an image项目地址: https://gitcode.com/GitHub_Trending/cl/CLIP
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考