尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

如何用 CLIP 实现零样本图像分类:类名写成一句话,不标一张图也能出第一次预测

如何用 CLIP 实现零样本图像分类:类名写成一句话,不标一张图也能出第一次预测 如何用 CLIP 实现零样本图像分类类名写成一句话不标一张图也能出第一次预测【免费下载链接】CLIPCLIP (Contrastive Language-Image Pretraining), Predict the most relevant text snippet given an image项目地址: https://gitcode.com/GitHub_Trending/cl/CLIP分类需求到了标注却还没开始传统分类器要先攒几千张标好的图ImageNet 一个数据集就是 128 万张。CLIPContrastive Language-Image Pretraining不需要任何标注把每个类别写成一句英文图片过一遍直接输出各类别的概率。官方 README 给出的依据是不借助 ImageNet 任何一张标注样本它的零样本表现已对齐原版 ResNet-50。CLIP 如何做零样本图像分类机制与标注流程的差异CLIP 是一个双塔模型视觉侧支持 ResNetRN 系列与 Vision TransformerViT 系列两种骨干文本侧是 Transformer 编码器实现细节见 clip/model.py。两座塔在大规模公开图文对数据上联合训练——来源含网络爬取与 YFCC100M 等数据集model-card.md 有记载——目标是让配对图文的向量靠近、错配的远离。推理时不做任何训练图片过视觉塔得到图像向量每个类别的句子过文本塔得到文本向量两个向量的余弦相似度再乘一个可学习温度系数初始值np.log(1/0.07)就是匹配分数softmax 之后所有类别概率和为 1。所谓分类器就是你自己写的一堆文字改文字等于改分类器。对比维度传统监督分类CLIP 零样本标注成本数千到百万张标注图ImageNet 128 万张0写类别名句子即可新增类别重新采数据、重训模型换一句话立即生效任务形态固定类别集合可当以文搜图与任意句子做匹配细粒度判别数据充足时上限高官方 model card 承认细粒度分类、计数是弱项一句话定位类别集合固定、要榨 top-1 极限精度传统监督仍是主路类别少而杂、或要求新类别当天生效CLIP 的零标注是更省事的选项。如何跑通 CLIP 零样本分类从安装到第一次预测 依赖很少PyTorch 1.7.1 及以上、torchvision外加 ftfy、regex、tqdm、packaging 四个小库清单在 requirements.txt。先装好 torch 系再克隆仓库并把本仓库作为包安装-e是 editable 安装git clone https://gitcode.com/GitHub_Trending/cl/CLIP pip install -e CLIP首次推理会下载权重文件数百 MB并缓存在~/.cache/clip这一步需要联网。第一次预测直接用仓库自带的 CLIP.png 当测试图候选句子给三个看哪个概率最高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) text clip.tokenize([a diagram, a dog, a cat]).to(device) with torch.no_grad(): probs model(image, text)[0].softmax(dim-1).cpu().numpy() print(Label probs:, probs)preprocess是随模型返回的变换缩放到模型输入分辨率多数模型为 224、中心裁剪、归一化图像走它、文本走clip.tokenize记住这一条即可。跑对了会看到[[0.9927937 0.00421068 0.00299572]]a diagram拿到 99.3%——这张图本身就是一张结构图说明环境通了。想交互式把玩仓库附带 notebooks/Interacting_with_CLIP.ipynb从相似度计算到零样本分类完整演示了一遍。CLIP 核心参数怎么设load 与 tokenize 的默认值和改法实际接触的参数集中在 clip/clip.py 的available_models、load、tokenize三个函数上参数默认值作用何时改load 的name如ViT-B/32选哪套权重available_models()可列出全部 9 种从 RN50 到 ViT-L/14336px无 GPU 选 RN50ResNet 骨干GPU 有富余选 ViT-B/16 或更大load 的device自动有 cuda 用 cuda否则 cpu模型放到哪块设备CPU 会被源码自动转 float32一般不动load 的download_root~/.cache/clip权重缓存目录内网离线把name指成本地 .pt 路径load支持本地文件tokenize 的context_length77文本序列长度所有 CLIP 模型都是 77基本不用改tokenize 的truncateFalse文本超过 77 token 时直接抛 RuntimeError类名是长句时置 True可直接落地的结论默认姿势就是clip.load(ViT-B/32)一行只有没有 GPU和离线两种情况需要各改一个参数。如何验证 CLIP 零样本分类效果看哪个指标分档怎么提升用 CIFAR-100 的 100 个类别做验证场景官方 README 有现成示例100 类全部统一写成a photo of a xxx任取一张图看 top-5 概率。判断效果看两个指标top-1 是否命中真实类别、以及它的概率值高低。下面代码取第 3637 张from torchvision.datasets import CIFAR100 cifar100 CIFAR100(root~/.cache, downloadTrue, trainFalse) image, _ cifar100[3637] image_input preprocess(image).unsqueeze(0).to(device) text_inputs torch.cat([clip.tokenize(fa photo of a {c}) for c in cifar100.classes]).to(device) with torch.no_grad(): img_f model.encode_image(image_input) txt_f model.encode_text(text_inputs) img_f / img_f.norm(dim-1, keepdimTrue) txt_f / txt_f.norm(dim-1, keepdimTrue) sim (100.0 * img_f txt_f.T).softmax(dim-1) print(sim[0].topk(5))输出与 README 一致snake 65.31%、turtle 12.29%、sweet_pepper 3.83%、lizard 1.88%、crocodile 1.75%top-1 命中这张图正是蛇。不满意时按成本从低到高走三档改句子零成本所有类别共用一个模板只替换类名单类别可写 23 个模板再对概率取平均。仓库自带 data/prompts.md26 个数据集的官方提示词可直接抄。线性探针需少量标注CPU 可训冻结模型先把训练集过一遍encode_image提取特征存盘再只训一个逻辑回归头。README 的 CIFAR-100 示例用的是LogisticRegression(C0.316, max_iter1000)注释提醒 C 要用验证集调出来。换更大模型只改一个字符串ViT-B/32→ViT-B/16→ViT-L/14骨干越大算力开销越大按硬件与实测精度取舍。CLIP 报错时怎么办5 个常见现象与排查首跑卡住或报网络错误— 原因权重文件首次从 CDN 拉取源码_download会复核 SHA256不一致就抛 RuntimeError解法手动把 .pt 文件放进~/.cache/clip或把load的name参数指到本地文件源码明确支持。报 Input ... is too long for context length 77— 原因tokenize的truncate默认 False句子超过 77 个 token 直接中断解法传truncateTrue或把类别描述写短。报 Expected all tensors to be on the same device— 原因clip.tokenize返回的文本张量在 CPU 上忘了.to(device)解法图像与文本计算前移到同一设备。中文类名概率明显偏低— 原因词表按英文 BPE 构建实现见clip/simple_tokenizer.pymodel card 也声明该模型只针对英文场景解法用英文类名展示层再映射回中文标签。细粒度类别上百鸟种、车款或计数任务不准— 原因model card 明确把细粒度分类、计数列为已知短板解法先降低类别粒度或补少量标注走线性探针。下一步先复现第三节对 CLIP.png 的自我分类确认环境无误再换成自己的图像与类别句子拿到零样本基线想再提精度就照 README 的 Linear-probe evaluation 一节把 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),仅供参考
返回列表