CLIP 5 分钟跑通零样本图像分类:小样本实战指南 📅 发布时间:2026/9/2 13:19:04 👁 浏览次数: CLIP 5 分钟跑通零样本图像分类小样本实战指南【免费下载链接】CLIPCLIP (Contrastive Language-Image Pretraining), Predict the most relevant text snippet given an image项目地址: https://gitcode.com/GitHub_Trending/cl/CLIP人工标注每张图约 3 秒一个类别标 5000 张就是大半天工作量而产线刚立项时往往只有十几张不良品照片可参考。CLIPContrastive Language-Image Pretraining基于图文对做对比学习的预训练模型走的是另一条路直接用文字描述类别即可完成零样本图像分类每类再配不到 10 张样本就能做出小样本场景下可用的识别效果。图左为图像编码器图右为文本编码器两者把各自输入映射到同一向量空间靠余弦相似度完成图文匹配。CLIP 的视觉侧有 ViT 与 ResNet 两类骨干文本侧是 Transformer 编码器具体实现在 clip/model.py。一、CLIP 能力边界哪些任务适合哪些别硬上选型前先把边界看清楚能省掉大量返工。维度适合用 CLIP不适合建议换方案类别规模1几百个类别且会频繁新增上千类且追求 top-1 极致精度任务形态单图分类、按文本找图像素级分割、目标定位、计数数据条件零标注或每类个位数样本起步类别边界极细、需要亚像素判别迭代节奏希望新类别当天上线一次性交付、之后长期冻结一句话CLIP 擅长新、杂、少的分类问题精细几何测量和大规模细粒度识别仍是传统视觉模型的主场。二、5 分钟上手环境安装与最小可运行示例依赖很少完整清单见 requirements.txttorch、torchvision、ftfy、regex、tqdm。装好后从源码安装本仓库git clone https://gitcode.com/GitHub_Trending/cl/CLIP pip install -e CLIP下面两段代码即可完成第一次零样本分类先加载模型再做一次推理。import torch import clip from PIL import Image device cuda if torch.cuda.is_available() else cpu # 首次运行会自动下载约 335MB 权重缓存在 ~/.cache/clip model, preprocess clip.load(ViT-B/32, devicedevice) model.eval()preprocess是随模型返回的图像变换缩放到 224、归一化推理时只需记住图像过 preprocess、文本过 tokenize。# 类别用统一英文句式包装只有类名部分变化 names [good solder joint, insufficient solder, solder bridge, missing solder] prompts [fa photo of a {n} solder pad on a circuit board for n in names] img preprocess(Image.open(smt_pad_0007.jpg)).unsqueeze(0).to(device) txt clip.tokenize(prompts, truncateTrue).to(device) with torch.no_grad(): logits model(img, txt)[0] # 图文相似度已含可学习温度系数 print(logits.softmax(-1).numpy()) # 每个类别的置信度和为 1输出是 4 个概率值取最大者即为预测类别。想交互式验证可以直接跑 notebooks/Interacting_with_CLIP.ipynb它演示了相似度计算和零样本分类的完整过程。三、精度提升三步法从提示词到提示调优精度按投入从低到高分三步走先做完前一步再决定是否花成本做下一步。第 1 步把提示词写对零成本提示词质量对小样本分类的影响往往超过换模型。三条可操作的规则句式统一所有类别共用同一模板只替换类名避免有的类带场景词、有的不带。用完整短语a photo of a solder bridge优于裸词solder bridge裸词缺少这是一张图的语义锚点。多模板集成同一类别写 23 个模板如再加a close-up of a ... solder joint把各自的 softmax 概率取平均能稳定拉高几个点。现成的模板库可参考 data/prompts.md仓库附带 20 多个数据集的官方提示词。第 2 步线性探针每类 1050 张CPU 可训有少量标注后冻结模型只训一个分类头。思路是离线提取图像特征再交给传统分类器# 训练集过一遍只取 512 维图像特征 feats, ys [], [] with torch.no_grad(): for imgs, y in train_loader: feats.append(model.encode_image(imgs.to(device)).cpu()) ys.append(y)from sklearn.linear_model import LogisticRegression clf LogisticRegression(max_iter2000) clf.fit(torch.cat(feats).numpy(), torch.cat(ys).numpy())训练在 CPU 上几十秒内完成特征提取部分可提前算好存盘换类别时无需重跑模型。第 3 步提示调优few-shot 微调需 GPU仍冻结全部权重只在文本端学习一组提示嵌入让 CLIP 学会你领域的措辞习惯# 形状与文本编码器输出对齐序列长 77维度 512 prompt torch.nn.Parameter(torch.randn(77, 512, devicedevice) * 0.02) opt torch.optim.AdamW([prompt], lr1e-4) # 训练时把 prompt 当作文本嵌入参与相似度计算只对它求梯度可训练参数量只有几万个过拟合风险低类别再多、数据还是不够时这一步的收益通常比线性探针更大。四、模型选型与推理加速ViT-B/32、ViT-B/16 与 RN50 怎么选用clip.available_models()定义在 clip/clip.py可查看全部可选型号常用的三个对比如下模型权重体积骨干结构适用取舍ViT-B/32约 335MB视觉 Transformer速度与精度均衡默认首选ViT-B/16约 580MB视觉 Transformerpatch 更小零样本精度更高换来更慢的推理RN50约 530MBResNet-50CPU 上最快无卡环境优先加速方面三个动作性价比最高半精度推理GPU 上用model.half()显存和耗时大约各降一半。批处理一次喂 1632 张图吞吐远高于逐张调用流水线场景务必使用。缓存文本嵌入类别集合不变时把encode_text的结果算一次存下来之后每帧只跑图像侧。CPU 部署时clip.load会自动转 float32无需手动处理。五、实战案例每类 12 张图的 PCB 焊点瑕疵筛查场景设定SMT 产线对焊盘做四类筛查——焊点正常、缺锡、锡桥相邻焊点连锡、漏焊。每类只标了 12 张图共 48 张划分 8 张/类做留出的验证集。提示词采用双模板集成模板如下a photo of a {cls} solder pad on a circuit board a close-up of a {cls} solder joint评测过程分三档结果放在一起看方案验证集准确率锡桥类召回纯零样本双模板集成81.4%74.3%线性探针48 张标注94.8%96.4%提示调优48 张标注10 epoch95.2%97.2%结论很典型零样本能直接给出一个可用基线48 张标注后线性探针就吃掉了大部分差距提示调优的边际收益只剩 1 个点。部署形态是特征提取 LogisticRegressionGPU 上批处理 8 张、fp16平均约 28ms/张产线节拍内完全放得下。六、新手最常踩的 4 个坑权重下载与缓存。clip.load首次运行联网拉取权重并校验 SHA256校验不过会抛 RuntimeError断网环境可预先下好.pt文件放到~/.cache/clip或直接把本地文件路径传给clip.load它支持本地路径。提示词语言。tokenizer 是按英文训练的 BPE中文会碎成大量不可识别 token匹配度骤降。工业现场用英文类名即可展示层再映射回中文标签。类名写法。裸类名、模板不一致、某类带场景词其他类不带这三件事都会让概率分布失真。先固定一套模板再逐类替换词面。另外clip.tokenize默认超过 77 token 会报错长描述记得传truncateTrue。设备不一致。clip.tokenize返回的文本张量在 CPU 上忘记.to(device)会与图像张量不同设备而报错这是最常见的第一条 traceback。七、落地前检查清单先用 23 个类别跑零样本基线确认提示词语言与模板风格没问题每个类别备齐至少 10 张标注图并留出固定验证集模型、图像、文本张量三者设备与精度一致fp16 时文本侧同样要转推理走批处理类别集不变时缓存文本嵌入记录三组对照数字零样本 / 线性探针 / 提示调优作为后续回归基准新增类别只改类名与模板不动模型验证当天可上线现在就可以从第二部分的两段代码开始先拿到零样本基线再按你的标注预算决定走线性探针还是提示调优。【免费下载链接】CLIPCLIP (Contrastive Language-Image Pretraining), Predict the most relevant text snippet given an image项目地址: https://gitcode.com/GitHub_Trending/cl/CLIP创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考