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手上有一批图片想给它们挑出最贴切的文字描述但不想为每个类别单独训练分类器CLIPContrastive Language-Image Pretraining把图像和文本编码到同一向量空间直接按相似度打分就能零样本地从候选文字里选出与图片最匹配的一项。本文覆盖安装、一次跑通验证和一个完整的零样本分类示例不展开模型结构细节也不涉及微调训练。两条编码器CLIP 的输入、处理与输出CLIP 用海量图像文本配对做对比预训练图像编码器与文本编码器各自把输入压成向量正对样本相互拉近、负对样本相互推远。推理时不再针对具体任务训练——把候选文字送入文本编码器与图像向量算余弦相似度得分最高者即最匹配项。对代码而言输入是 PIL 图片和字符串列表处理只有一步clip.load(ViT-B/32)它会下载权重并返回模型和配套的预处理函数preprocess输出是归一化后的相似度概率。model(image, text)直接返回 logit相似度乘 100model.encode_image/model.encode_text则返回可自己处理的特征向量。三步装好环境先确认环境里有 PyTorch1.7.1。若机器带 CUDA GPU用下面的 conda 命令安装否则纯 CPU 或 macOS 默认环境改用pip安装 CPU 版本# CUDA GPU conda install --yes -c pytorch pytorch1.7.1 torchvision cudatoolkit11.0 # 纯 CPU / macOS pip install torch torchvision其余小依赖与仓库 requirements.txt 一致一条命令装齐pip install ftfy regex tqdm packaging最后把仓库作为 Python 包安装之后任何目录都能import clipgit clone https://gitcode.com/GitHub_Trending/cl/CLIP cd CLIP pip install .环境差异CUDA GPU用 conda 装pytorchcudatoolkit版本号按本机 CUDA 调整纯 CPU / macOS用 pip 装 CPU 版 torch不需要 cudatoolkit离线环境提前把权重放到~/.cache/clip/再执行pip install .30 秒验证是否跑通把仓库根目录的CLIP.png当输入跑下面这段最短验证代码。首次运行会下载ViT-B/32权重约数百 MB属正常等待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(probs)预期输出是一个长度为 3 的概率数组例如[[0.9928 0.0042 0.003]]。判读标准第一项对应a diagram接近 1 即环境正确若三项接近均分或报FileNotFoundError检查CLIP.png是否和脚本在同一目录、权重是否下载完整。完整跑一个零样本分类在 100 个标签里挑 Top 5这是 README.md 的 CIFAR-100 示例取数据集里第 3637 张图在 100 个文本标签里选最可能的 5 个。核心就四步——加载模型、取一张图、把每个标签拼成a photo of a {class}再 tokenize、特征归一化后算相似度import os import clip import torch from torchvision.datasets import CIFAR100 device cuda if torch.cuda.is_available() else cpu model, preprocess clip.load(ViT-B/32, 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(\nTop predictions:\n) for value, index in zip(values, indices): print(f{cifar100.classes[index]:16s}: {100 * value.item():.2f}%)预期输出类似snake: 65.31%排第一其后是turtle、sweet_pepper等数值因设备略有差异。延伸方向把a photo of a {c}换成自己的业务措辞对比不同 prompt 的影响参考 notebooks/Prompt_Engineering_for_ImageNet.ipynb需要更高吞吐时换更小的RN50模型。四个高频卡点与对应解法现象原因解决ModuleNotFoundError: No module named torchPyTorch 未装或版本低于 1.7.1按上节条件分支重装torch与torchvisionclip.load长时间无响应权重正从远程下载数百 MB配代理或手动把权重放进~/.cache/clip/CUDA out of memory显存不足换RN50等更小模型或减小输入尺寸ImportError: cannot import name tokenize from clipimport clip命中的不是本仓库而是其他同名包在仓库根目录执行pip install .后重开 Python 进程相关资源与下一步官方用法与 API 说明README.md模型加载、分词与下载逻辑clip/clip.py图像/文本编码器结构clip/model.py训练数据与局限性model-card.md交互式图文打分演示notebooks/Interacting_with_CLIP.ipynb建议先复现上面的 CIFAR-100 Top-5 案例再把 100 个标签换成自己的业务文本验证相似度排序是否符合预期。【免费下载链接】CLIPCLIP (Contrastive Language-Image Pretraining), Predict the most relevant text snippet given an image项目地址: https://gitcode.com/GitHub_Trending/cl/CLIP创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表