news 2026/9/12 17:57:38

用 open_clip 做以文搜图:零样本分类与多模态检索入门

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用 open_clip 做以文搜图:零样本分类与多模态检索入门

用 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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/12 17:54:45

济宁壁挂炉上门维修 本地靠谱师傅 不点火、故障码、漏水维修

济宁壁挂炉上门维修 本地靠谱师傅 不点火、故障码、漏水维修家里壁挂炉突发故障?不点火、无热水、采暖不热、屏幕跳故障码、漏水异响、水压异常,不用盲目找维修。壁挂炉集成燃气、水路、电控、采暖多套系统,维修需精准检测故障根源&#xff0…

作者头像 李华
网站建设 2026/9/12 17:54:35

LeetCode hot100——189.轮转数组

题目给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。示例 1:输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3 步: [5,6,7,1,2,3,…

作者头像 李华
网站建设 2026/9/12 17:54:02

合成数据vs真实网页数据:大模型训练的博弈

摘要: 深入剖析合成数据与真实网页数据在大模型训练中的根本性博弈。本文从模型崩溃的底层机制出发,结合真实世界的商业案例与代码实践,论证为什么真实网页数据在新鲜度、多样性和事实锚定三个维度上不可替代,并探讨如何使用AntsD…

作者头像 李华
网站建设 2026/9/12 17:54:02

ToF相机全链路解析:从硬件物理层到ROS应用的深度系统工程

1. ToF 相机从底层硬件到上层应用整体链路:这不是一个“相机”,而是一套精密协同的感知系统 你手头那台标着“ToF”字样的模组,或者调试时在V4L2设备列表里看到的 /dev/video0 ,从来就不是一块简单的图像传感器。它是一条横跨物…

作者头像 李华
网站建设 2026/9/12 17:53:56

国产150V宽压DCDC芯片H6261S深度解析

1. 这颗芯片到底解决了什么实际问题?“惠海原厂 国产 DCDC:150V 耐压 H6261S 8-150V降 5V 12V 6.5A,外围精简、低纹波、动态响应优异”——光看标题,你可能第一反应是:“又一颗国产降压芯片?”但如果你真在…

作者头像 李华