恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
CLIP 零样本文本匹配完整教程:不标数据、不训模型,3 分钟让一万张图变成“文字可检索“
首页
资讯中心
/
CLIP 零样本文本匹配完整教程:不标数据、不训模型,3 分钟让一万张图变成“文字可检索“
CLIP 零样本文本匹配完整教程:不标数据、不训模型,3 分钟让一万张图变成“文字可检索“
发布时间:2026/9/3 14:10:33
CLIP 零样本文本匹配完整教程不标数据、不训模型3 分钟让一万张图变成文字可检索【免费下载链接】CLIPCLIP (Contrastive Language-Image Pretraining), Predict the most relevant text snippet given an image项目地址: https://gitcode.com/GitHub_Trending/cl/CLIP先说它跑通了是什么样子你手里有一堆图片输入一句话比如a photo of a dog模型就从你给的候选文字里挑出和图最贴的那条概率接近 1——不用标注一张数据不用训练一分钟模型。CLIPContrastive Language-Image Pretraining对比语言-图像预训练干的就是这件零样本文本匹配的事它把图片和文字放进同一个坐标系里比较距离所以用文字捞图片对它来说是基本功。这篇指南带你先搞懂它为什么能匹配再一条动线装环境、跑示例最后把候选标签换成你自己的。装之前先花 2 分钟CLIP 为什么能看图识文结论先给CLIP 能匹配靠的不是训练时见过你的图而是它把图片和文字统一编码成了同一种向量匹配就变成了比距离。打个比方。普通分类器像一台只认固定按键的机器要识别狗就得先喂它一万张贴着狗标签的图。CLIP 更像一位通情达理的图书管理员——上架时它见过海量图配文的对照样本论文里是 4 亿组网络图文对每来一对它就把配对的图片和文字往同一个位置挪近把不配对的推远。久而久之图片和文字都被翻译到同一套坐标里。到了用的时候它把你给的每条候选文字也翻译成坐标和图片坐标比远近最近的那条胜出。所以零样本不是魔法而是预训练阶段已经把活干完了。上图就是这套流程的官方示意左半边是预训练时把图文对拉近推远右半边是推理时把标签文字过一遍文本编码器、和图像向量比相似度。理解到这一层后面所有代码你都能看明白——它们都只是编码 比距离。一条动线跑通 CLIP装环境、下权重、出第一个结果整条动线只有两个真正的决定要做你机器有没有 CUDA GPU以及用哪个模型。其余都是机械操作命令里都写了注释从上到下执行即可。# 1. 独立环境防止依赖污染其他项目Python 3.8 conda create -n clip-env python3.8 -y conda activate clip-env # 2. PyTorch 1.7.1 与 torchvision # 有 CUDA GPU → 用 conda 装带 cudatoolkit 的轮子版本对齐本机 CUDA conda install -y -c pytorch pytorch torchvision cudatoolkit11.3 # 纯 CPU 或 macOS → 跳过上一行改用 pip 安装 PyTorch 官方 CPU 轮子 # 3. 文本清洗与进度条小依赖与 requirements.txt 一致缺一个都可能报错 pip install ftfy regex tqdm packaging # 4. 以包形式安装本仓库之后任意目录都能 import clip git clone https://gitcode.com/GitHub_Trending/cl/CLIP cd CLIP pip install .权重不随包安装首次clip.load时才自动下载到~/.cache/clip/ViT-B/32 约 350MB第一次会卡几分钟别中断。跑最小示例在仓库根目录下执行示例直接复用仓库自带的CLIP.pngimport torch import clip from PIL import Image device cuda if torch.cuda.is_available() else cpu model, preprocess clip.load(ViT-B/32, devicedevice) # preprocess 是模型配套的固定预处理流程缩放、裁剪、归一化图片必须走它 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_per_image, _ model(image, text) probs logits_per_image.softmax(dim-1).cpu().numpy() print(probs)跑通的样子是一行三个数[[0.9927937 0.00421068 0.00299572]]。第一个数对应 a diagram几乎为 1后两个接近 0。这说明环境、权重、推理链路全通了。如果三个数均分在 0.33 左右多半是权重没加载对回去查下载日志。CPU 机器上这次推理要几秒到几十秒正常权重下过一次后走本地缓存第二次起快很多。关于模型选择仓库里用clip.available_models()可以列出全部可用型号初学只需认识两个模型特点适合场景ViT-B/32默认示例用的型号精度高一些常规使用、单图/小批量RN50体积更小显存占用低显存吃紧、批量检索换成你自己的标签CLIP 零样本分类的最小可用示例验证通过之后才是真正的使用方式把候选文字换成你自己的标签让模型从中挑最匹配的一个。import torch import clip from PIL import Image device cuda if torch.cuda.is_available() else cpu model, preprocess clip.load(ViT-B/32, devicedevice) image preprocess(Image.open(CLIP.png)).unsqueeze(0).to(device) # 候选集换成你自己的业务标签分类任务惯用 a photo of a ... 句式 labels [a diagram, a photo of a dog, a photo of a cat, a screenshot] text torch.cat([clip.tokenize(t) for t in labels]).to(device) with torch.no_grad(): img_f model.encode_image(image) txt_f model.encode_text(text) # L2 归一化让点积等价于余弦相似度 img_f / img_f.norm(dim-1, keepdimTrue) txt_f / txt_f.norm(dim-1, keepdimTrue) # 相似度乘 100 拉大量程softmax 后得到概率分布 sim (100.0 * img_f txt_f.T).softmax(dim-1) print(labels[sim.argmax().item()], sim[0])预期 top-1 是a diagram概率接近 1。这里 a diagram 和 a screenshot 语义很接近还能选对说明区分度是真的。model(image, text)直接返回的 logits 其实就是同样的余弦相似度乘 100所以上一节这一节的写法结果一致选顺手的用。三个自然的扩展点扩候选集直接往labels里加字符串即可几百上千条标签也照常吃批量时用 DataLoader 分批喂。省资源显存不够就把ViT-B/32换成RN50改动一个字符串的事。抠提示词同样的标签a photo of a dog 和 a dog 排出来的顺序可能不同。想系统研究措辞对排序的影响看 notebooks/Prompt_Engineering_for_ImageNet.ipynb里面用 ImageNet 做了完整演示。跑挂了别慌三种最常见的翻车现场现象一首次运行长时间卡住、没有任何输出。多半是权重正在从远程下载几百 MB 不是几 KB。网络慢就配代理或者直接离线把权重文件放进~/.cache/clip/文件名和校验逻辑见 clip/clip.py 里的_download放好后再跑即可。现象二No module named clip。说明仓库没以包形式装进当前环境或者你压根没激活那个环境。确认conda activate clip-env已执行然后回到仓库目录重跑一次pip install .两条命令解决。现象三CUDA out of memory或FileNotFoundError: CLIP.png。前者是显存不够换RN50或减小每批图片数后者是因为示例用相对路径读图而你的终端不在仓库根目录——把脚本挪到根目录跑或把路径改成绝对路径。排错时如果怀疑权重本身有问题tests/test_consistency.py 提供了现成的行为基线可以参考。继续深挖源码、API 与示例入口完整 API 说明与 CIFAR-100 零样本预测案例README.mdclip.load/clip.tokenize/clip.available_models的实现clip/clip.py模型结构与权重下载、校验逻辑clip/model.py交互式图文打分输入图片 文本实时看相似度notebooks/Interacting_with_CLIP.ipynb提示词工程对分类排序的影响notebooks/Prompt_Engineering_for_ImageNet.ipynb模型选型与能力边界说明model-card.md下一步建议先照 README 里的 CIFAR-100 零样本案例复现一次 top-5 预测再把cifar100.classes换成你业务的标签看相似度排序是否符合预期——符合就说明这套流程可以直接搬进你的场景了。【免费下载链接】CLIPCLIP (Contrastive Language-Image Pretraining), Predict the most relevant text snippet given an image项目地址: https://gitcode.com/GitHub_Trending/cl/CLIP创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考