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。为什么?因为它有「标签组」功能,可以设置互斥标签和非互斥标签,单标签和多标签都能搞定。
标注流程我一般分三步:
- 预标注:用已有模型跑一遍,生成初步标签,人工修正
- 正式标注:标注员逐张确认,打上最终标签
- 抽检:随机抽 10%-20% 的图,由质检员复核
我曾经试过让标注员从头标到尾,结果效率低不说,还容易疲劳出错。后来改成预标注+人工修正,效率提升了至少 3 倍。
3.4 质量检查
标注完了就完事了?当然不是。质量检查这步,我建议你花至少 20% 的时间。
3.4.1 检查什么
| 检查项 | 说明 | 常见问题 |
|---|---|---|
| 标签完整性 | 每张图是否都有标签 | 漏标、空标签 |
| 标签正确性 | 标签是否与图片内容一致 | 标错类别、混淆相似类 |
| 标签一致性 | 同一类别的标注标准是否统一 | 边界模糊、标准不统一 |
| 数据平衡性 | 各类别样本数量是否合理 | 类别严重不平衡 |
3.4.2 怎么检查
我常用的方法有三种:
- 人工抽检:随机抽图,逐张看标签对不对。这个最费时,但最可靠。
- 交叉验证:让两个标注员标同一批图,对比差异。不一致的地方就是问题点。
- 自动校验:写脚本检查目录结构、文件完整性、标签格式等。
注意: 自动校验只能检查格式问题,不能检查语义正确性。比如你把「猫」标成了「狗」,脚本是查不出来的。所以人工抽检必不可少。
3.4.3 避坑指南
我曾经遇到过一个问题:标注员把「哈士奇」和「阿拉斯加」搞混了,因为长得太像。后来我加了一条规则——相似类别的图片,必须由资深标注员复核。
还有一个坑:多标签标注时,标注员容易漏标。比如一张图里有猫和狗,他只标了猫,忘了标狗。我的解决办法是:标注界面强制要求每个类别都选一次(是/否),不能跳过。
3.5 知识体系总览
下面这张图,把本章的核心内容串起来了。你可以对照着看,心里有个谱。
你看,整个知识体系其实就这五大块。单标签和多标签是理论基础,目录结构是工程规范,标注工具是实操手段,质量检查是保障环节。缺一不可。
最后说一句: 标注这件事,看似简单,但做得好不好,直接决定了模型的天花板。我见过太多项目,模型调了半天效果上不去,最后发现是标注数据有问题。所以,别嫌麻烦,把标注质量抓起来,后面会省很多事。
公众号:蓝海资料掘金营,微信deep3321