ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

5 分钟跑通 CLIP 零样本文本匹配:一句话按文字筛图片

5 分钟跑通 CLIP 零样本文本匹配:一句话按文字筛图片 5 分钟跑通 CLIP 零样本文本匹配一句话按文字筛图片【免费下载链接】CLIPCLIP (Contrastive Language-Image Pretraining), Predict the most relevant text snippet given an image项目地址: https://gitcode.com/GitHub_Trending/cl/CLIP手边有一堆图片想按文字描述筛选又不想标数据、不想训模型CLIP 的零样本文本匹配就是干这个的。这篇 CLIP 上手指南交付三件事装好环境、跑通第一个图文匹配、说清它为什么能匹配。全程约 10 分钟示例全部用仓库自带图片素材零准备。 5 分钟装好环境准备与版本对齐版本要求一句话带过Python 3.8、PyTorch 1.7.1过高或过低都可能出兼容问题。全程约 5 分钟带 CUDA 的机器装 PyTorch 要占几个 G耐心点。命令都放在一个代码块里从上到下依次执行# 1. 独立环境避免依赖互相污染 conda create -n clip-env python3.8 -y conda activate clip-env # 2. 有 CUDA GPU 则用 conda 装带 cudatoolkit 的轮子版本与本机 CUDA 对齐 conda install -c pytorch pytorch torchvision cudatoolkit11.3 -y # 纯 CPU 或 macOS注释掉上一行改用下面这行 # pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu # 3. 其余依赖与 requirements.txt 一致 pip install ftfy regex tqdm packaging # 4. 克隆仓库并以包形式安装 git clone https://gitcode.com/GitHub_Trending/cl/CLIP cd CLIP pip install .逐条说清为什么这么做不做会怎样conda create建隔离环境防止 CLIP 的依赖污染其他项目。不建的话ftfy、regex 这类依赖可能和你现有环境里的版本打架报错还很难定位。PyTorch 这一步按设备分支有 CUDA GPU 就用 conda 装带cudatoolkit的轮子纯 CPU 或 macOS 改用pip装cpu轮子见代码块内注释。没有 conda 时用python -m venv clip-env替代后续步骤不变。四个pip install是文本清洗和进度条类小库与 requirements.txt 一致装多装少都会出问题。pip install .把本地仓库装成 Python 包之后任意目录都能import clip。跳过这步直接跑脚本就是最常见的No module named clip。模型权重不随包安装首次clip.load时才自动下载到~/.cache/clip/。三类场景的差异对照下表收敛注意别把 PyTorch 装两遍场景差异对应操作CUDA GPU走 conda 通道装 PyTorch保留步骤 2 的conda install行纯 CPU / macOS不需要 cudatoolkit步骤 2 改用pip install的cpu轮子离线环境权重无法在线下载先把权重文件放到~/.cache/clip/再执行安装装完了下一步确认环境真的通了。 20 行最小验证看三个数判断环境通没通先提醒首次clip.load会下载 ViT-B/32 权重约 350MB会卡几分钟别手动中断。下面是最小验证代码读仓库根目录的CLIP.png让它对 a diagram、a dog、a cat 三条文字打分输出概率分布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) # 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 最典型的用法从一组候选标签里挑最匹配的那个。下面演示encode_image/encode_text这两个基础 API 和相似度计算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) labels [a diagram, a photo of a dog, a photo of a cat, a screenshot] # 每条标签单独 tokenize 再拼接一批文本一次送入模型 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 语义很像还能选对的话说明区分度是真实的。为什么全程不用标数据因为 CLIP 预训练阶段就在海量图像文本配对上做对比学习简单说就是对的拉近、错的推远图像编码器和文本编码器的输出被压进同一个向量空间。推理时每条候选标签过一遍文本编码器与图像向量距离最近的那条就是最相关的。model(image, text)返回的 logits 就是这个余弦相似度乘 100所以上面两种写法结果一致想扩候选集直接改labels批量检索可以换RN50这类小模型省显存。改完标签集再跑一遍排序变化是否符合直觉就是你对这个模型校准的第一步。 报错速查5 个高频问题加 3 条能力边界以下问题集中在首次安装和首次运行阶段按出现顺序排好了照查即可错误现象大概率原因处理办法No module named clip没以包形式安装或环境没激活重跑pip install .确认已conda activate clip-env首次运行长时间卡住无输出权重正在从远程下载配置网络代理或手动把权重放到~/.cache/clip/CUDA out of memory显存不足换RN50等更小模型或减小批大小FileNotFoundError: CLIP.png图片与脚本不同目录在仓库根目录执行脚本或改绝对路径pip install .报依赖缺失基础依赖没装全先执行pip install ftfy regex tqdm packaging再说三条能力边界知道什么时候该换方案候选文本有 77 token 上限clip.tokenize默认context_length77超长的文字描述会被截断长描述场景别指望它逐字理解。以英文为中心内置分词器基于英文 BPE中文标签会损失信息跨语言业务先小规模验证再上量。细粒度判别做不了区分相似型号、读图中文字、数物体个数这些 CLIP 干不了该换 OCR 或检测类模型。排完坑最后给你几条深入的路。延伸路径4 个仓库内文件由浅入深完整 API 说明与 CIFAR-100 零样本预测案例README.md模型加载、权重下载与分词实现clip/clip.py、clip/model.py图文打分交互示例notebooks/Interacting_with_CLIP.ipynb提示词措辞对排序影响的对照实验notebooks/Prompt_Engineering_for_ImageNet.ipynb建议先复现 README 里的 CIFAR-100 零样本预测案例再换成你自己的业务标签看相似度排序是否符合预期——这一步通了剩下的都是业务细节。【免费下载链接】CLIPCLIP (Contrastive Language-Image Pretraining), Predict the most relevant text snippet given an image项目地址: https://gitcode.com/GitHub_Trending/cl/CLIP创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表