news 2026/9/2 13:23:21

0 张标注跑通图像分类:CLIP 让“看一句英文就能分类“的完整落地指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
0 张标注跑通图像分类:CLIP 让“看一句英文就能分类“的完整落地指南

0 张标注跑通图像分类:CLIP 让"看一句英文就能分类"的完整落地指南

【免费下载链接】CLIPCLIP (Contrastive Language-Image Pretraining), Predict the most relevant text snippet given an image项目地址: https://gitcode.com/GitHub_Trending/cl/CLIP

标注 ImageNet 要 1.28M 张人工打标的图,而 CLIP 一张标注都不用——你只写一句a photo of a snake,它就能把 CIFAR-100 的图判成 65% 概率是蛇。核心关键词:CLIP 零样本图像分类

读完你能拿到什么

  • 实现3 行代码的零样本分类,用 1 张图实测跑出 3 个类别概率。
  • 避开重新标注数据的成本,理解"提示词"为什么能顶替标签。
  • 定位9 个可选模型(clip.available_models())里该选哪个、何时换提示词。
  • 跑通一段官方线性探针(linear probe)代码,把 CLIP 特征接上逻辑回归。

一分钟看懂它为什么行

传统 CNN 是"喂 128 万张图、学死类别编号",换类别就要重训。CLIP 换了个思路:

  1. 两个编码器一个空间:图像和文字分别被编码成同一维度的向量(clip/model.py里的encode_image/encode_text,投影到相同embed_dim)。
  2. 对比训练对齐语义:用 4 亿图文对拉近"匹配的"、推远"不匹配的",所以分类变成"图像向量 vs 候选文本向量谁更像"。
  3. 分类=匹配打分model(image, text)返回余弦相似度×温度(初始logit_scale = 1/0.07),softmax 即概率——标签只是你临时写的一句话,改句子就是改类别。

5 分钟跑通第一个结果

先装依赖,再把仓库当 Python 包装上(首次clip.load会自动下载模型到~/.cache/clip):

pip install ftfy regex tqdm pip install git+https://gitcode.com/GitHub_Trending/cl/CLIP

最小可运行片段(README.md里的官方示例,直接复现):

import torch, clip from PIL import Image device = "cuda" if torch.cuda.is_available() else "cpu" model, preprocess = clip.load("ViT-B/32", device=device) # 加载模型+预处理 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(): probs = model(image, text)[0].softmax(dim=-1).cpu().numpy() print("Label probs:", probs)

预期输出(README 实测值,不同设备略有出入):

Label probs: [[0.9927937 0.00421068 0.00299572]]

一张架构图被判成a diagram概率 0.99,另外两类几乎为 0——这就是零样本的正反馈。

效果说话:零样本 vs 传统监督

维度CLIP 零样本(ViT-B/32)传统 ResNet50 监督
标注数据量0 张(只用类别名文本)1.28M 张(ImageNet)
ImageNet 精度与 ResNet50 打平(README 原文结论)基线
CIFAR-100 零样本 top-1 示例snake 65.31%(README 可复现)需在该集上重训
新增一个类别改一句英文提示词,秒级生效采集+标注+重训,天级
依赖条件一句可描述的英文类别名该类足量标注样本

让效果再翻倍的 3 个技巧

  1. 换描述式提示词。裸类名snake不如模板a photo of a snake(README 的 CIFAR-100 例子就用a photo of a {c})。做法:给类别名套一层场景前缀,再喂clip.tokenize
  2. 多模板做集成。仓库 data/prompts.md 里 CIFAR-10 给了 18 条模板(a blurry photo of...a black and white photo of...)。做法:对每条模板算概率再平均,抗单句偏差。
  3. 有标注就接线性探针。别全量微调——冻结 CLIP,只对encode_image的特征训练逻辑回归。README 官方代码用LogisticRegression(C=0.316),少量样本即可,改动最小。

踩坑实录

现象RuntimeError: Input ... is too long for context length 77→ 原因:提示词超过 77 token(clip/clip.pytokenize)。 → 解法:缩短描述,或clip.tokenize(texts, truncate=True)自动截断。

现象RuntimeError: Model xxx not found; available models = [...]→ 原因:clip.load传了不存在的模型名。 → 解法:先print(clip.available_models())查表,共 9 个,从RN50ViT-L/14@336px

现象 无 GPU 时 CPU 上ViT-L/14慢到怀疑人生→ 原因:模型越大 CPU 推理越慢,且默认会尝试cuda。 → 解法:CPU 环境显式device="cpu",起步选ViT-B/32RN50;另确认torch>=1.7.1(否则clip.py顶部会发版本警告)。

落地清单

  • 明天先做:pip install装好,跑通上面 3 行零样本片段,拿到Label probs正反馈。
  • 确认clip.available_models(),按有无 GPU 选定起点模型(有卡用 ViT-B/16,无卡用 RN50)。
  • 把你的类别名改写成a photo of a {class}形式,跑一版看概率分布是否合理。
  • 若手里有几十~几百张标注:照 README "Linear-probe" 示例接LogisticRegression,别直接微调整网。
  • 需要更稳的分类时,翻 data/prompts.md 做多模板集成。

结尾

CLIP 把图像分类从"堆标注样本"变成"写一句英文提示词",零样本即可上手、少量标注即可接线性探针微调。想继续深入,读 notebooks/Interacting_with_CLIP.ipynb 里完整的交互式分类示例,或把 data/prompts.md 的提示词库接到你的领域里试。

【免费下载链接】CLIPCLIP (Contrastive Language-Image Pretraining), Predict the most relevant text snippet given an image项目地址: https://gitcode.com/GitHub_Trending/cl/CLIP

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

2PSK与2DPSK调制解调:Simulink仿真原理、实现与性能对比

简介:本资源是西安电子科技大学通信工程专业‘B测’实验配套的2PSK与2DPSK调制解调完整实现包,面向通信原理课程学习者、数字通信实验课学生及无线通信方向初学者,聚焦相位调制核心概念的理解、建模仿真与工程实现。资源共62个文件&#xff0…

作者头像 李华
网站建设 2026/9/2 13:23:07

基于肤色分割与特征提取的传统人脸识别方案详解与Matlab实现

简介:本资源是一个可直接运行的MATLAB人脸检测与识别系统实现,面向图像处理初学者、计算机视觉课程学习者及算法实践者,解决从肤色分割定位人脸区域到特征提取与身份判别的一整套技术闭环问题。压缩包共151个文件,含131张PNG格式测…

作者头像 李华
网站建设 2026/9/2 13:17:48

yuzu 模拟器:Switch 游戏上 PC 的 30 分钟上手与调优指南

yuzu 模拟器:Switch 游戏上 PC 的 30 分钟上手与调优指南 【免费下载链接】yuzu 任天堂 Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/yu/yuzu yuzu 是一款用 C 编写的开源 Switch 模拟器,由 Citra 开发团队延续开发&#xff0c…

作者头像 李华
网站建设 2026/9/2 13:13:08

Rust浏览器自动化:chromiumoxide库入门与实践指南

这次我们来看一个 Rust 生态下的浏览器自动化工具: chromiumoxide 。这个库的核心目标很直接——让你能用 Rust 代码像 Puppeteer 或 Playwright 那样,全功能地控制一个无头或有头的 Chrome/Chromium 浏览器。对于需要在 Rust 项目中集成网页截图、PDF…

作者头像 李华
网站建设 2026/9/2 13:11:28

TA-Lib量化分析实战:从安装到多指标策略的完整指南

简介:本资源是一份面向金融量化开发者、AI交易学习者及A股技术分析从业者的超详细中文TA-Lib库实战指南,旨在系统解决该主流技术分析库在国内因缺乏中文文档而导致的入门难、调用难、落地难问题。压缩包共154个文件,含92篇Markdown详解文档&a…

作者头像 李华