CLIP零样本分类避坑指南3步跑通4个高频报错【免费下载链接】CLIPCLIP (Contrastive Language-Image Pretraining), Predict the most relevant text snippet given an image项目地址: https://gitcode.com/GitHub_Trending/cl/CLIP装好 CLIP 做零样本分类top-1 概率却不到 30%多半不是模型的问题是你漏了 a photo of a 提示模板和官方预处理——这两步决定 CLIP 零样本分类的天花板。先搞懂 CLIP 零样本的核心机制余弦相似度与温度缩放怎么算分CLIP 是双编码器图像塔和文本塔各自把输入压进同一个 512 维空间相似度用余弦算再乘可学习的温度系数 logit_scale 放大差距softmax 后取概率。零样本分类的本质就是把一批 a photo of a 标签 文本喂进文本塔当伪分类头一个权重都不用训就能预测。对照表帮你记住默认值名词含义默认值输入分辨率图像塔接受的边长224ViT-L/14336px 为 336context_length文本最大 token 数77词表大小BPE 词表见 clip/simple_tokenizer.py49152嵌入维度图文共享空间维度512logit_scale温度系数可学习exp(log(1/0.07))≈14.28预处理Resize→CenterCrop→Normalize均值 0.481/0.458/0.408方差 0.269/0.261/0.276⚙️ 3步跑通 CLIP 零样本分类的完整流程第1步装环境与下载权重需要 PyTorch 1.7.1 和 ftfy、regex、tqdm 三个小依赖pip install ftfy regex tqdm git clone https://gitcode.com/GitHub_Trending/cl/CLIP.git cd CLIP pip install -e .clip.load()会把权重下载到~/.cache/clip/并做 SHA256 校验校验失败直接抛 RuntimeError不会让你用半截文件。8GB 显存跑 ViT-B/32 够用显存更小就换 RN50模型视觉骨干备注RN50ResNet-50最小CPU 也能跑ViT-B/32ViTpatch32默认选择ViT-L/14ViTpatch14精度更高显存约翻倍第2步写一个 15 行的零样本推理循环这段代码解决一张图对 N 个候选文本打分排序的核心问题import clip from PIL import Image device cuda if torch.cuda.is_available() else cpu model, preprocess clip.load(ViT-B/32, devicedevice) text clip.tokenize([a photo of a dog, a photo of a cat, a photo of a fish]).to(device) with torch.no_grad(): image preprocess(Image.open(CLIP.png)).unsqueeze(0).to(device) img_f model.encode_image(image) txt_f model.encode_text(text) img_f / img_f.norm(dim-1, keepdimTrue) txt_f / txt_f.norm(dim-1, keepdimTrue) probs (100.0 * img_f txt_f.T).softmax(dim-1) print(probs) # 例如 [[0.01, 0.98, 0.01]]三个不能丢的细节候选文本要套 a photo of a 模板、特征必须 L2 归一化、温度系数取 100即 1/logit_scale 默认值三个数在 clip/model.py 的 forward 里都能对得上。第3步验证输出确认预处理没走样图片必须过clip.load返回的preprocess管道Resize(224)→CenterCrop(224)→RGB→归一化。这个 Normalize 的均值方差0.481/0.458/0.408是训练时定死的你自己手写一条预处理top-1 概率大概率从 60% 掉到 10% 以下。效果怎么看同一条输入两种 prompt 的概率差拿 CIFAR-100 那张狗图仓库自带的 CLIP.png跑两条不同模板其余完全不动模板top-1top-2top-3a photo of a dog0.99280.00420.0030it is a dog0.65310.12290.0383判断标准正确标签概率 0.5 且第二名 0.2说明模板与图像分布匹配如果第一名只有 0.2~0.3先换模板再怀疑模型。想批量试模板仓库里 data/prompts.md 列了上百条现成的。️ 排雷手册5个高频报错的诊断表现象原因处置tokenize 报 too long for context length 77文本超 77 token缩短文本或clip.tokenize(texts, truncateTrue)自动截断补【免费下载链接】CLIPCLIP (Contrastive Language-Image Pretraining), Predict the most relevant text snippet given an image项目地址: https://gitcode.com/GitHub_Trending/cl/CLIP创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考