公司动态

CLIP 零样本图像分类实战指南:0 张标注图,100 个类别里猜中蛇

📅 2026/9/2 13:35:32
CLIP 零样本图像分类实战指南:0 张标注图,100 个类别里猜中蛇
CLIP 零样本图像分类实战指南0 张标注图100 个类别里猜中蛇【免费下载链接】CLIPCLIP (Contrastive Language-Image Pretraining), Predict the most relevant text snippet given an image项目地址: https://gitcode.com/GitHub_Trending/cl/CLIP不训练、不标注、不微调OpenAI 的 CLIPContrastive Language-Image Pre-Training对比语言-图像预训练模型在 100 个类别的零样本测试里对着一张 CIFAR-100 图片直接给出「snake 65.31%、turtle 12.29%」的可读结果而且全程只用了一句提示词。这篇文章带你从零装到调优把「用文字指挥图像分类」这条能力真正跑通。本文适合谁三类人直接对号入座要给新类别打标签、又不想标注几千张图的产品工程师CLIP 让你用英文短语描述类别就能上线第一版分类器学生与独立开发者几行代码复现论文里的零样本预测不用理解反向传播细节想了解多模态对齐怎么落地的人一个双塔结构 一套提示词库就是全部家当5 分钟上手装好依赖后 8 行代码出第一个概率一条 conda 命令装 PyTorch两条 pip 命令装依赖和 CLIP 本体模型权重会在首次clip.load()时自动下载。conda install --yes -c pytorch pytorch1.7.1 torchvision cudatoolkit11.0 pip install ftfy regex tqdm pip install githttps://gitcode.com/GitHub_Trending/cl/CLIPimport torch, 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) text clip.tokenize([a diagram, a dog, a cat]).to(device) with torch.no_grad(): logits model(image, text)[0] print(logits.softmax(dim-1).cpu().numpy()) # [[0.9928 0.0042 0.003]]实测输出这张架构图拿到 99.28% 的概率给了 a diagram几乎不给 a dog 和 a cat 留任何空间。一图看懂核心机制为什么两个编码器能共享一个空间CLIP 由图像编码器和文本编码器组成图像走视觉塔文本走 GPT 风格 Transformer 塔训练时用对比损失把同一张图配对的图文向量拉近、把不配对的推远。推理时只需算两侧特征的余弦相似度代码里乘以 100 当作 logit不需要任何任务专属的分类头。再叠加 4 亿对图文的训练数据量模型天然「见过」大量概念你才敢用一句提示词就发起分类。进阶路线图从一句提示词到训练一个逻辑回归第一层直接用。官方默认模板是a photo of a {}把类别名塞进{}就能跑通 CIFAR-100 这类标准基准。第二层提示词工程。给每个类别换多种措辞再平均相似度是仓库里验证过的做法——CIFAR-10 准备了 18 种模板变体Caltech-101 更是给了 34 种完整清单见 data/prompts.md。templates [a photo of a {}., a blurry photo of a {}., a toy {}.] prompts [clip.tokenize(t.format(cls)) for t in templates] sims (model.encode_image(image) torch.cat(prompts).T / 100) # 相似度矩阵 scores sims.mean(dim0) # 同类别多模板取平均压制单次措辞波动第三层特征复用。冻结 CLIP 提特征只在上层训练一个逻辑回归官方示例里C0.316、max_iter1000代码直接抄 README.md 的 linear-probe 段落即可。真实任务演练CIFAR-100 第 3637 张图的零样本预测把第 3637 张测试图与 100 个类别的a photo of a {c}提示词逐一比对Top-5 结果如下排名类别置信度1snake65.31%2turtle12.29%3sweet_pepper3.83%4lizard1.88%5crocodile1.75%真实标签就是 snake。对照一下ImageNet 上有 1.28M 张标注图传统 ResNet50 全靠它们才学会分类而 CLIP 用 0 张标注就达到了 ResNet50 的零样本水平。想更进一步就去翻 ImageNet 的提示词集见 notebooks/Prompt_Engineering_for_ImageNet.ipynb用多模板平均替代单条提示。选型对照表8 个官方模型怎么选clip.available_models()返回 8 个模型分辨率从 224 到 336精度逐级上升推理成本也跟着上升。模型输入分辨率体量定位推荐场景RN50224小CPU 快速验证RN101224中CPU 可跑的更高精度RN50x4 / RN50x16 / RN50x64224中~超大显存充足、精度优先ViT-B/32 / ViT-B/16224中GPU 上的通用主力ViT-L/14224大追求精度的默认高端ViT-L/14336px336大精度天花板三条调优技巧CPU 或显存紧张选 RN50有 GPU 追求精度直接 ViT-B/32 起步clip.load()可以传本地 checkpoint 路径离线环境不必反复下载想自定义阈值或 top-k记得先把图像/文本特征各自 L2 归一化点积就是余弦相似度避坑清单三个新手最容易踩的坑拿中文类别名直接跑模型只在英文图文对上训练过中文描述会显著拉低相似度类别描述一律写英文超长提示词被截断clip.tokenize()的context_length默认 77 token超长的产品描述会被静默截断措辞要精简把 logit 当概率读model(image, text)返回的原始值是相似度×100 的分数不是概率必须再过一层softmax才能读百分比一句话总结与三个进阶方向CLIP 把图像分类从「先标注再训练」变成了「写提示词再推理」标注成本直接砍到零。三个值得接着挖的方向拿 data/prompts.md 的提示词库扩充你自己的类别体系对比零样本与线性探针在同一批数据上的差距判断值不值得加一层逻辑回归沿 model-card.md 的局限清单给自己的场景做一轮 in-domain 测试再决定能否上线觉得有用的话点个收藏下一篇带你把 CLIP 接进图文检索场景。【免费下载链接】CLIPCLIP (Contrastive Language-Image Pretraining), Predict the most relevant text snippet given an image项目地址: https://gitcode.com/GitHub_Trending/cl/CLIP创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考