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/CLIPCLIP 把图片和文字编码进同一个向量空间你可以直接问它这张图是什么而不用为每个类别手动标数据。本文带你走三步装好环境跑通最小脚本、看懂模型在算什么、再用 CIFAR-100 复现一次零样本图像分类。CLIP 安装与首次运行从空环境到出概率值先建一个独立环境避免依赖冲突conda create -n clip-env python3.8 -y conda activate clip-env然后装 PyTorch1.7.1 及以上和 torchvision。两种机型命令不同有 CUDA GPU 的机器用 conda 装cudatoolkit版本按你本机 CUDA 对应调整conda install -y -c pytorch pytorch torchvision cudatoolkit11.0没有 GPU 的机器含 macOS直接 pip 装 CPU 版pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu再装仓库要求的其余依赖pip install ftfy regex tqdm最后克隆仓库、在根目录执行pip install .把clip模块装进环境。首次调用clip.load()时会自动把模型权重下载到~/.cache/clip/git clone https://gitcode.com/GitHub_Trending/cl/CLIP cd CLIP pip install . 保存下面的verify.py并运行python verify.py。它加载 ViT-B/32 模型、读入仓库自带的 CLIP.png、对三条文本候选做相似度打分预期打印出的一行概率中对应 a diagram 的数值第一项最高约 0.99。若三项接近均分或报错说明模型没有正确加载。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(): image_features model.encode_image(image) text_features model.encode_text(text) logits_per_image, _ model(image, text) probs logits_per_image.softmax(dim-1).cpu().numpy() print(Label probs:, probs)各环境的安装差异一张表看场景关键差异CUDA GPU用 conda 安装 PyTorch 并指定cudatoolkit版本纯 CPU / macOSpip 安装 CPU 轮子不需要 cudatoolkit离线环境先手动把对应.pt权重放到~/.cache/clip/再pip install .三个核心 API 和 CLIP 在算什么仓库只暴露三个顶层函数都在 clip/clip.pyclip.load(name, device)按名称加载模型返回模型对象和配套的图像预处理函数preprocess需要时自动下载权重clip.tokenize(text)把英文句子转成固定 77 长度的 token 张量token 即模型可处理的文本单元作为encode_text()的输入模型对象上的encode_image()/encode_text()分别输出图像向量和文本向量两者在同一空间里可直接比较。原理只用两句话说清CLIP 在海量图像-文本配对上做对比预训练让匹配的图文向量互相靠近、不匹配的互相拉远推理时把一张图和若干候选描述都编码成向量余弦相似度最高者胜出。刚才verify.py里 a diagram 独占 99% 的概率正是这一步的结果。仓库内置 9 个规格从 RN50 到 ViT-L/14336px用clip.available_models()可随时查看。显存或内存紧张时建议从 RN50、ViT-B/32 起步。实战CIFAR-100 上的零样本图像分类零样本分类zero-shot不给任何该任务的标注样本只给类别名就分类是 CLIP 最被称道的能力。下面这段代码取 CIFAR-100 测试集第 3637 张图套上 100 个英文类别名做判断全程不训练。预期 Top-1 是 snake数值随计算设备略有出入import os import clip import torch from torchvision.datasets import CIFAR100 device cpu model, preprocess clip.load(RN50, device) cifar100 CIFAR100(rootos.path.expanduser(~/.cache), downloadTrue, trainFalse) image, class_id 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(): image_features model.encode_image(image_input) text_features model.encode_text(text_inputs) image_features / image_features.norm(dim-1, keepdimTrue) text_features / text_features.norm(dim-1, keepdimTrue) similarity (100.0 * image_features text_features.T).softmax(dim-1) values, indices similarity[0].topk(5) print(Top predictions:) for value, index in zip(values, indices): print(f{cifar100.classes[index]:16s}: {100 * value.item():.2f}%)输出大致如下Top-1 为 snakesnake: 65.31% turtle: 12.29% sweet_pepper: 3.83% lizard: 1.88% crocodile: 1.75%解读一下这些数字100 个候选文本被编码后图像向量与 a photo of a snake 的方向最接近softmax 后拿走约 65% 的置信度其余概率集中在形态相近的爬行动物类说明排序合理。若想更贴近 README 示例效果显存或内存充足时把模型换成ViT-B/32再跑一遍即可。常见问题排查表错误现象原因解决方法ImportError: No module named torchPyTorch 没装进当前环境或版本冲突按上文步骤重建独立环境确认python -c import torch可用首次运行长时间无输出模型权重正在从远程下载配置网络代理加速或离线时手动放置权重到~/.cache/clip/CUDA out of memory显存不够换更轻的模型如 RN50或减少单次加载的图像数量OSError: unable to open file (CLIP.png)脚本与图片不在同一目录确认 CLIP.png 与脚本同级或改用绝对路径依赖安装报 Python 版本过低用了低于 3.6 的解释器升级到 Python 3.8 后重建环境项目地图与下一步值得细读的文件README.md用法、API 说明与完整示例本文脚本均出自此处clip/clip.py模型加载、权重下载与校验、文本分词入口clip/model.py图像/文本双编码器结构定义clip/simple_tokenizer.py简单分词器实现notebooks/Interacting_with_CLIP.ipynb可交互的图文打分 notebook适合动手换文本看排序变化tests/test_consistency.pyJIT 与标准版本输出一致性的自动化测试下一步建议先把交互 notebook 里的文本候选换成你自己的业务描述确认相似度排序符合直觉再批量替换图像源做小规模验证。【免费下载链接】CLIPCLIP (Contrastive Language-Image Pretraining), Predict the most relevant text snippet given an image项目地址: https://gitcode.com/GitHub_Trending/cl/CLIP创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表