用 open_clip 做以文搜图:零样本分类与多模态检索入门
【免费下载链接】open_clipAn open source implementation of CLIP.项目地址: https://gitcode.com/GitHub_Trending/op/open_clip
想按一句话描述从几万张图里捞出目标,但不想标注数据、更不想训练分类器?open_clip 就是干这个的:它是 CLIP 的开源实现,把图像和文本编码进同一个向量空间,装好、加载模型、跑一次推理就能用。
原理一句话:把"配对"变成"距离"
CLIP 的训练信号只有一个:匹配的图文对要在向量空间里靠得近,不匹配的推得远。推理时不需要再训练——把图片库离线编码成向量存好,查询文本编码后做相似度排序,候选就出来了。这就是零样本检索的完整链路,也是 CLIP 零样本分类的底层机制:类别名只是另一种文本。
open_clip 的训练框架:图像编码器与文本编码器共享一个对比空间
环境怎么配最快,第一版推理长什么样
安装一步到位,open_clip 会带上所需的 torch 依赖:
pip install open_clip_torch然后是最小可运行片段:
import torch, open_clip from PIL import Image model, preprocess, _ = open_clip.create_model_and_transforms('ViT-B-32') model.eval() tokenizer = open_clip.get_tokenizer('ViT-B-32') img = preprocess(Image.open('cat.jpg')).unsqueeze(0) text = tokenizer(['a photo of a cat', 'a photo of a car']) with torch.no_grad(): logits = model(img, text).logits_per_image print(logits.softmax(-1))跑完会看到 cat 的得分明显高于 car,第一版就算通了。模型名不确定时,用open_clip.list_models()打印可用清单。
不同规模模型的 ImageNet 零样本准确率与训练样本数的关系
把"以文搜图"做成能上生产的形态
以文搜图是零样本检索最典型的落地:用户输入"白底黑色运动鞋",库内商品图按余弦相似度排出前 10。工程上就三步:
- 离线:整库过一遍
model.encode_image,把向量连同图片 id 写进向量库(FAISS 或 pgvector 都行); - 在线:查询文本过
model.encode_text,取 top-k; - 调 prompt:检索的措辞直接决定召回。类别名套进 "a photo of a {}" 这类模板,比裸名字稳定得多——官方仓库在 src/open_clip/zero_shot_metadata.py 里就维护着几组模板,改几个词通常比换模型见效快。
内容审核是同一套机制的变体:预定义"违规描述"当查询文本,图片分数超阈值就拦下来转人工。阈值要拿自有违规集单独标定,不同类别的分数分布差异不小,别拿一个数通吃。
模型怎么选 & 踩坑实录
选型梯度(数字来自仓库首页的 ImageNet 零样本准确率):
- 流程验证期用 ViT-B-32:最轻,单卡显存压力小;
- 精度不够上 ViT-L-14:DataComp-1B 版本可达 79.2%;
- 显存宽裕选 ViT-H-14:LAION-2B 版本 78.0%,比 B-32 高 15 个点;
- ViT-bigG-14 精度最高(80.1%),但推理成本高,没有专门的 GPU 池别碰。
三个高频问题,结论先行:
- 相似度数值离谱?忘了 L2 归一化。编码出来的向量不归一,余弦相似度就是错的,先查这一项;
- 换模型后分数没法比?不同模型、不同训练数据的特征不共享空间,LAION-400M 的文本向量对不上 DataComp-1B 的图像向量,必须整库重算;
- 训练显存爆?用训练入口的
--precision amp降精度,或开梯度检查点换时间,细节见 docs/script_examples/stability_example.sh。
下一步
先按上面的两行代码跑通第一版,再拿 100 张自有图验证 top-5 排序是否符合直觉;排序合格了,再按 B-32 → L-14 → H-14 的梯度往生产推。
仓库内参考
- 快速上手:docs/PRETRAINED.md
- 零样本评测汇总:docs/openclip_results.csv
- 模型配置目录:src/open_clip/model_configs/
- 训练脚本示例:scripts/
- 交互教程:docs/Interacting_with_open_clip.ipynb
【免费下载链接】open_clipAn open source implementation of CLIP.项目地址: https://gitcode.com/GitHub_Trending/op/open_clip
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考