news 2026/9/8 17:49:40

Hugging Face Transformers 零样本图像分类快速教程:不训练模型,3 步给图片打标签

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Hugging Face Transformers 零样本图像分类快速教程:不训练模型,3 步给图片打标签

Hugging Face Transformers 零样本图像分类快速教程:不训练模型,3 步给图片打标签

【免费下载链接】transformers🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training.项目地址: https://gitcode.com/GitHub_Trending/tra/transformers

你是否遇到过这样的需求:运营团队丢来一张新产品的实拍图,希望今晚就能自动归类到"食品 / 电子 / 服饰"?或者想给一批图片按自定义规则打标,却发现手头根本没有标注数据、也等不起一次模型训练?

用 Hugging Face Transformers 的零样本图像分类(zero-shot image classification),这件事可以绕开训练:你把一张图和一组"候选标签"交给它,模型直接告诉你图里是什么。无需 GPU、无需标注数据、无需改模型结构,核心代码不到 10 行。

原理速览:一张图讲清"零样本"是怎么做到的

三个要点就够了:

  • 双塔同空间:图片被 CLIP 类的双塔模型编码成向量,你写的每个标签(如"一只苹果")也编码成向量,两者落在同一个语义空间里。
  • 分类 = 相似度:对每个标签算"图向量 vs 文向量"的相似度,分数最高的标签胜出。所谓"分类",本质是文本检索。
  • 标签随你改:明天业务要多一个"家电"类目,改代码里的标签列表即可,模型一个参数都不用动——这正是"零样本"的含义。

项目里的测试样例图,就用来做后文的演示:

三步跑起来:环境、代码、调参

第 1 步:一键安装环境

# 克隆代码仓库(本文所有示例均基于本仓库代码) git clone https://gitcode.com/GitHub_Trending/tra/transformers cd transformers # 安装核心库(约 1 分钟,CPU 环境即可运行) pip install transformers

没有 PyTorch 也能跑,pipeline 会自动选择合适的推理后端;首次运行会自动下载模型权重,之后走本地缓存。

第 2 步:最小可运行代码

把下面的demo.py放到仓库根目录(直接复用仓库自带的苹果样例图):

from transformers import pipeline # 任务名 + 模型名,一步加载零样本图像分类器 classifier = pipeline("zero-shot-image-classification", model="google/siglip-so400m-patch14-384") # 传入图片路径和候选标签,立即拿到带分数的排序结果 result = classifier( "tests/fixtures/tests_samples/COCO/apple.jpg", candidate_labels=["一只苹果", "一个足球", "一碗面条"], ) print(result) # 预期:[{'score': 0.9x, 'label': '一只苹果'}, ...]

运行一次,输出是一个按相似度从高到低排序的列表,每个候选标签对应一个score

第 3 步:调参让结果更"听话"

真正用起来时,你多半要调这两处:

调什么怎么写什么时候用
返回数量top_k=2(默认返回全部候选)候选标签很多时,只看前几名
推理设备device=1(加载时传入)有 GPU 时加速,批处理尤其明显
classifier = pipeline("zero-shot-image-classification", model="google/siglip-so400m-patch14-384", device=1) # 有 GPU 才加这一行 result = classifier("xxx.jpg", candidate_labels=["苹果", "足球", "面条", "风景"], top_k=2) # 只返回最可能的 2 个

换个场景看效果,同一张图、不同标签集,结论完全不同(分数为示意值,以实际运行为准):

候选标签最可能的预测分数(示意)
苹果 / 足球 / 面条苹果约 0.95
水果 / 蔬菜 / 玩具水果约 0.8
红 / 绿 / 黄约 0.6

可以看出:模型不是"认出苹果",而是在你给的选项里挑语义最接近的。标签写得好不好,直接决定结果好不好。

进阶玩法:批量打标与文本零样本

批量处理classifier直接接受路径列表,内部一次前向算完,比逐张调用快得多:

# 列表批量推理:一次传多张图,返回按图片分组的结果 paths = [ "tests/fixtures/tests_samples/COCO/apple.jpg", "tests/fixtures/tests_samples/COCO/000000039769.png", ] results = classifier(paths, candidate_labels=["食物", "动物", "人物", "厨房"], top_k=1)

同类能力顺手可用:同一套"文本 vs 文本"的零样本思路也支持纯文本任务,比如按自定义标签给文章分类,任务名换成zero-shot-classification即可,思路完全一致,这里不再展开。

避坑指南:新手最常问的 4 个问题

  • Q:分数 0.9 是不是"90% 确定"?不是。分数是"在本次候选标签之间"的相对占比,所有候选的分数之和恒等于 1。候选只有 2 个时分数容易偏高,候选多了分数会被摊薄——比较同一批候选内的相对大小才有意义。

  • Q:候选里根本没有正确答案怎么办?模型仍会返回最接近的那个,且可能分数不高。建议保留一个"其他/无法判断"兜底标签,低置信度结果走人工复核。

  • Q:第一次运行特别慢?首次会自动下载模型权重(CPU 上下载本身不慢,解码图 + 前向约需 1~2 秒/张,视硬件而定);第二次起读缓存,速度正常。

  • Q:标签该写中文还是英文?写模型训练时更"熟悉"的语言。多数 CLIP 系模型对英文短描述更稳,中文短标签(2~6 个字的名词)通常也可用,避免长句。

上线前 checklist

  • 候选标签控制在 10 个以内,命名与业务类目一一对应
  • 加一个兜底标签,并定好低分阈值
  • 用一批真实业务图做冒烟测试,别只用官方样例图

文档入口与社区

  • 官方文档(pipeline 总览):docs/source/en/main_classes/pipelines.md
  • 零样本图像分类源码:src/transformers/pipelines/zero_shot_image_classification.py
  • 更多可用模型与任务:浏览 src/transformers/pipelines/ 下的各任务实现

零样本图像分类的价值不在"省一次训练",而在让分类口径跟着业务走:类目表变了,改一行标签列表就行。建议收藏本文,下次接到"新图打标"需求时直接翻出来照着做。也欢迎克隆仓库动手改标签集,把结果贴到社区讨论。

【免费下载链接】transformers🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training.项目地址: https://gitcode.com/GitHub_Trending/tra/transformers

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

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

揭秘万亿参数大模型训练:Whale框架如何攻克分布式计算挑战

1. 项目概述:从“大”模型到“巨”模型的工程挑战最近几年,AI领域最激动人心的进展之一,无疑是模型规模的指数级增长。从BERT的几亿参数,到GPT-3的千亿参数,再到如今动辄万亿参数的“巨模型”,我们仿佛见证…

作者头像 李华
网站建设 2026/8/30 18:33:45

Java Stream流:函数式编程在集合处理中的核心原理与实战应用

1. 项目概述:为什么Java Stream流是开发者的“瑞士军刀”?如果你写过Java,尤其是Java 8之后的版本,却还没用过Stream流,那感觉就像厨师没用过菜刀——活儿也能干,但总有点别扭。我刚开始接触Stream时&#…

作者头像 李华
网站建设 2026/8/31 2:19:53

夹层式SBC与i.MX8M Mini:从结构设计到工程落地全解析

最近我在评估一块很有意思的板子:Sandwich-Style SBC,核心是NXP i.MX8M Mini Processor。很多朋友第一次听到“Sandwich-Style”都会愣一下,SBC怎么还跟三明治扯上关系了?其实这是单板计算机的一种结构设计思路,简单说…

作者头像 李华
网站建设 2026/8/30 19:20:51

OpenClaw 个人 AI 助手性能调优指南:三步找回流畅回复

OpenClaw 个人 AI 助手性能调优指南:三步找回流畅回复 【免费下载链接】openclaw Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞 项目地址: https://gitcode.com/GitHub_Trending/cl/openclaw 用了几个月 OpenCla…

作者头像 李华
网站建设 2026/9/1 6:44:19

从“乞丐地图”到LBS标注应用:技术栈、架构与合规设计全解析

你要问最近韩国互联网上什么最火,“乞丐地图”绝对算一个。一个标注了首尔街头流浪人员、露宿者位置信息的地图应用,在年轻群体里被大量转发和使用,甚至一度挤到服务器响应变慢。这个现象挺有意思:不是说技术门槛有多高&#xff0…

作者头像 李华