3、图像分类标注实战:单标签与多标签分类、数据集目录结构规范、质量检查

图像分类标注,听起来好像很简单——不就是给图片打个标签嘛?

嗯,话是这么说没错。但真正上手做过的人都知道,这里面的门道可不少。我最早做分类标注的时候,就吃过目录结构混乱的亏,后来返工改了一整天,那叫一个酸爽。

今天咱们就把这块彻底捋清楚。从单标签到多标签,从目录规范到质量检查,一步到位。

3.1 单标签分类 vs 多标签分类

先搞清楚这两个概念。说白了,区别就一句话:

  • 单标签分类:一张图片只属于一个类别。比如「这是一只猫」,那就不能同时是「狗」。
  • 多标签分类:一张图片可以同时属于多个类别。比如「这张图里有猫,也有狗」,那就两个标签都要打上。

我在项目中遇到过最典型的场景:做商品图分类时,一张图里既有「手机」又有「手机壳」。如果只用单标签,你就得纠结到底标哪个。用多标签就简单了,两个都标上,模型学得更准。

核心区别总结:

  • 单标签:互斥关系,一张图只能选一个类
  • 多标签:非互斥关系,一张图可以选多个类
  • 单标签用 softmax + 交叉熵损失
  • 多标签用 sigmoid + 二分类交叉熵损失

3.2 数据集目录结构规范

这个我必须要多说两句。目录结构乱,后面训练、评估、部署全都会出问题。我自己吃过亏,所以现在有一套固定的规范。

3.2.1 单标签分类目录结构

最常用的就是按类别分文件夹。每个文件夹名就是类别名,里面放对应的图片。

dataset/
├── train/
│   ├── cat/
│   │   ├── cat_001.jpg
│   │   ├── cat_002.jpg
│   │   └── ...
│   ├── dog/
│   │   ├── dog_001.jpg
│   │   ├── dog_002.jpg
│   │   └── ...
│   └── bird/
│       ├── bird_001.jpg
│       └── ...
├── val/
│   ├── cat/
│   ├── dog/
│   └── bird/
└── test/
    ├── cat/
    ├── dog/
    └── bird/

这种结构的好处是:PyTorch 的 ImageFolder 可以直接读,不用写额外代码。我建议你养成这个习惯。

3.2.2 多标签分类目录结构

多标签就不能用文件夹来区分了。因为一张图可能属于多个类,放哪个文件夹都不对。

我常用的做法是:所有图片放在同一个文件夹,然后用一个 CSV 或 JSON 文件记录标签。

dataset/
├── images/
│   ├── img_001.jpg
│   ├── img_002.jpg
│   └── ...
├── train.csv
├── val.csv
└── test.csv

CSV 文件格式示例:

filename,cat,dog,bird
img_001.jpg,1,0,1
img_002.jpg,0,1,0
img_003.jpg,1,1,0

每一列对应一个类别,1 表示有这个标签,0 表示没有。这样一张图可以同时有多个 1。

我的小技巧: 多标签标注时,建议用「全量标注」策略。也就是每张图都要明确每个类别的有无,不要只标正样本。否则模型容易学偏。

3.3 标注工具与流程

工具这块,我推荐几个常用的:

  • LabelImg:老牌工具,支持单标签分类,操作简单
  • CVAT:功能强大,支持多标签,适合团队协作
  • Label Studio:灵活度高,支持自定义标注界面

我个人习惯用 CVAT。为什么?因为它有「标签组」功能,可以设置互斥标签和非互斥标签,单标签和多标签都能搞定。

标注流程我一般分三步:

  1. 预标注:用已有模型跑一遍,生成初步标签,人工修正
  2. 正式标注:标注员逐张确认,打上最终标签
  3. 抽检:随机抽 10%-20% 的图,由质检员复核

我曾经试过让标注员从头标到尾,结果效率低不说,还容易疲劳出错。后来改成预标注+人工修正,效率提升了至少 3 倍。

3.4 质量检查

标注完了就完事了?当然不是。质量检查这步,我建议你花至少 20% 的时间。

3.4.1 检查什么

检查项 说明 常见问题
标签完整性 每张图是否都有标签 漏标、空标签
标签正确性 标签是否与图片内容一致 标错类别、混淆相似类
标签一致性 同一类别的标注标准是否统一 边界模糊、标准不统一
数据平衡性 各类别样本数量是否合理 类别严重不平衡

3.4.2 怎么检查

我常用的方法有三种:

  • 人工抽检:随机抽图,逐张看标签对不对。这个最费时,但最可靠。
  • 交叉验证:让两个标注员标同一批图,对比差异。不一致的地方就是问题点。
  • 自动校验:写脚本检查目录结构、文件完整性、标签格式等。

注意: 自动校验只能检查格式问题,不能检查语义正确性。比如你把「猫」标成了「狗」,脚本是查不出来的。所以人工抽检必不可少。

3.4.3 避坑指南

我曾经遇到过一个问题:标注员把「哈士奇」和「阿拉斯加」搞混了,因为长得太像。后来我加了一条规则——相似类别的图片,必须由资深标注员复核。

还有一个坑:多标签标注时,标注员容易漏标。比如一张图里有猫和狗,他只标了猫,忘了标狗。我的解决办法是:标注界面强制要求每个类别都选一次(是/否),不能跳过。

3.5 知识体系总览

下面这张图,把本章的核心内容串起来了。你可以对照着看,心里有个谱。

图像分类标注实战知识体系 图像分类标注 单标签分类 互斥关系 softmax + CE Loss 按文件夹组织 多标签分类 非互斥关系 sigmoid + BCE Loss CSV/JSON组织 目录结构规范 train/val/test 划分 命名规范统一 标注工具与流程 LabelImg / CVAT 预标注 + 人工修正 质量检查 人工抽检 交叉验证 自动校验 标注质量 = 模型效果的上限

你看,整个知识体系其实就这五大块。单标签和多标签是理论基础,目录结构是工程规范,标注工具是实操手段,质量检查是保障环节。缺一不可。

最后说一句: 标注这件事,看似简单,但做得好不好,直接决定了模型的天花板。我见过太多项目,模型调了半天效果上不去,最后发现是标注数据有问题。所以,别嫌麻烦,把标注质量抓起来,后面会省很多事。


公众号:蓝海资料掘金营,微信deep3321