
CLIP 图文匹配实操笔记一张图、三句话、一次打分【免费下载链接】CLIPCLIP (Contrastive Language-Image Pretraining), Predict the most relevant text snippet given an image项目地址: https://gitcode.com/GitHub_Trending/cl/CLIP把仓库自带的CLIP.png丢给 CLIP 这个图文匹配模型再附上三句候选描述 a diagram、a dog、a cat它给 a diagram 打出约 0.99 的概率另两句几乎为零。这套用文字指令认图的能力就是这次上手的起点。CLIP 是怎么看懂图片的不列功能直接顺着上面那个例子拆一遍。仓库里的CLIP.png是一张方法示意图。我们给它三句描述a diagram一张示意图、a dog一条狗、a cat一只猫。CLIP 内部有两个编码器一个看图片一个读文字各自把输入压成一个向量。判断图文是否相配就看这两个向量在同一空间里靠不靠近——和示意图的向量离得近得分就高。打个比方它像一位见过海量图描述配对的老练翻译官。你没教过它任何具体任务但训练时它反复对齐过无数图文组合所以零样本就能把图和文字配对核心实现在 clip/clip.py。上图左半边是训练阶段同一批次里只有正确配对的图文会被拉近其余的都会被推远。右半边是推理阶段把候选文字比如 A photo of a dog.过一遍文本编码器和图片向量比远近最接近的那句就是答案。所以上次运行里a diagram那列拿到 0.99 左右的概率a dog、a cat只剩零头——不是模型更懂图而是它只被训练去认配对关系。环境核对与安装CLIP 图文匹配的最小配置装之前先对一下这份清单检查项最低要求建议Python3.73.8 或更高PyTorch1.7.1有 NVIDIA 显卡就装带 CUDA 的版本GPU无硬性要求CPU 可跑有则快很多磁盘模型权重首次运行时自动下载到~/.cache/clip预留约 400MB安装走最短路径一组命令# 先装 PyTorch有 NVIDIA GPU 才需要 cudatoolkit没有就改用 cpuonly conda install --yes -c pytorch pytorch torchvision cudatoolkit11.3 # 再装仓库和其余依赖 git clone https://gitcode.com/GitHub_Trending/cl/CLIP cd CLIP pip install ftfy regex tqdm pip install .依赖完整清单见 requirements.txtpip install .会按它自动补齐。Windows 下 conda 装 PyTorch 较慢时可改用 pip 安装对应平台的 wheel其余命令不变。装完用一行确认包能导入、模型名能列出来python -c import clip; print(clip.available_models())能看到ViT-B/32、RN50等名字就通了。第一次运行如何判断 CLIP 装好了下面这段就是最小验证脚本直接复制运行假设当前目录里有CLIP.pngimport torch, clip from PIL import Image device cuda if torch.cuda.is_available() else cpu # 有 GPU 用 GPU没有就落到 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) # 三句描述转成 token 张量 with torch.no_grad(): logits_per_image, _ model(image, text) # 图、文两两打分 probs logits_per_image.softmax(dim-1).cpu().numpy() print(probs) # 期望[[0.99, 0.004, 0.003]] 左右第一列最大成功的标志只有一条打印出的概率数组里第一列a diagram接近 1其余两列接近 0。数值在不同设备上会略有浮动看量级即可。两个小实验选做接在上一节脚本后面跑。实验一换措辞看概率怎么动。做什么只改三句候选描述的其中一句改哪一行text clip.tokenize(...)那一行会看到什么概率分布随措辞轻微移动a diagram 仍排第一但具体数值变了。# 只改这一行其余不动 text clip.tokenize([a diagram of a neural network, a dog, a cat]).to(device) probs logits_per_image.softmax(dim-1).cpu().numpy() print(probs)实验一只动了嘴改文字实验二直接换任务不再人工指定三句候选而是让模型在一串类别名里自己排名。实验二四分类零样本预测。做什么把image换成你本地任意一张猫的照片让模型在 4 个类别间比较改哪一行把候选列表换成类别名列表即可会看到什么cat对应的那一项概率明显最高。classes [cat, dog, rabbit, hamster] text_inputs torch.cat([clip.tokenize(fa photo of a {c}) for c in classes]).to(device) with torch.no_grad(): img_f model.encode_image(image) txt_f model.encode_text(text_inputs) img_f img_f / img_f.norm(dim-1, keepdimTrue) txt_f txt_f / txt_f.norm(dim-1, keepdimTrue) print((100.0 * img_f txt_f.T).softmax(dim-1)) # 四个类别的概率这个套路就是 CLIP 最经典的零样本分类类别不用标注、不用训练一句fa photo of a {c}就够了。踩坑速查CLIP 图文匹配常见异常现象大概率原因处理办法首次运行卡住几分钟没输出后台正在下载模型权重到~/.cache/clip确认终端无报错即可等网络不稳就手动下载放入该目录报错Model xxx not found模型名拼写不对运行clip.available_models()查可用名如ViT-B/32CUDA out of memory显存不够换更小的模型如RN50或减小图片尺寸ModuleNotFoundError: ftfy等依赖没装全对照 requirements.txt 补装 ftfy、regex、tqdm能跑但特别慢实际走的是 CPU检查torch.cuda.is_available()是否为 True装对 PyTorch 版本继续往下玩把自己手边的照片换进第一次运行的脚本观察概率怎么变把实验二的classes换成自己的场景词模板可参考 data/prompts.md看官方提示词工程示例notebooks/Prompt_Engineering_for_ImageNet.ipynb延伸阅读模型说明见 model-card.md完整交互演示见 notebooks/Interacting_with_CLIP.ipynb。【免费下载链接】CLIPCLIP (Contrastive Language-Image Pretraining), Predict the most relevant text snippet given an image项目地址: https://gitcode.com/GitHub_Trending/cl/CLIP创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考