标注方案设计:选对类型,定好规矩
标注方案设计,说白了就是两件事:选什么标注类型,以及怎么定标注规则。我见过太多项目,算法模型还没跑起来,先倒在标注方案上了。嗯,这里面的坑,我踩过不少。
一、标注类型怎么选?
标注类型不是拍脑袋定的。你得先问自己三个问题:
- 业务要什么? 是识别物体存在,还是定位位置,还是理解场景?
- 模型用什么? 不同算法对标注格式要求不一样。
- 成本能接受吗? 分割标注比分类贵5-10倍,这是真金白银。
我习惯把常见标注类型分成四类,你对照着看:
| 标注类型 | 适用场景 | 典型成本(每张图) | 我的建议 |
|---|---|---|---|
| 分类 | 图片内容识别、垃圾过滤 | 0.1-0.3元 | 最简单,但信息量少 |
| 检测 | 目标定位、计数、质检 | 0.5-2元 | 性价比最高,推荐 |
| 分割 | 自动驾驶、医学影像 | 3-10元 | 精度高,但贵得肉疼 |
| OCR | 文字识别、票据录入 | 0.3-1元/字段 | 注意文字方向问题 |
核心原则:能用检测解决的,别上分割。能用分类解决的,别上检测。标注粒度越细,成本越高,但收益不一定线性增长。
举个例子。我之前做一个工业质检项目,客户上来就要做像素级分割。我一问,其实只需要知道「有没有缺陷」就行。最后改成分类+检测,成本降了70%,效果一点不差。你想想看,是不是这个理?
二、标注粒度怎么定?
标注粒度,就是「标到什么程度」。我把它拆成三个维度:
1. 空间粒度
- 粗粒度: 整图分类,比如「这张图是猫」
- 中粒度: 框出目标,比如「猫在框里」
- 细粒度: 像素级分割,比如「猫的轮廓精确到每个像素」
我个人习惯是:先粗后细。先用粗粒度跑一轮,看看模型能不能学到东西。如果不行,再逐步细化。别一上来就搞细粒度,万一模型不需要呢?
2. 语义粒度
同一个物体,可以标成「车」,也可以标成「轿车、SUV、卡车」。怎么选?
- 看下游任务:如果只是统计车流量,「车」就够了
- 看数据分布:如果某种车型特别少,合并成大类更稳妥
- 看标注员水平:太细的类别,标注员容易搞混
我的经验:类别数量控制在10-20个最舒服。少于5个,模型学不到区分能力;多于30个,标注错误率会飙升。我曾经有个项目标了50类,结果标注员把「哈士奇」和「阿拉斯加」搞混了30%——嗯,后来我合并成了「大型犬」和「小型犬」。
3. 时间粒度
视频标注里,是每帧都标,还是隔几帧标?
- 关键帧标注:只标场景变化的帧,适合动作识别
- 固定间隔标注:比如每秒标一帧,适合连续监控
- 全量标注:每帧都标,精度最高但成本爆炸
我建议先做关键帧标注。因为视频相邻帧变化很小,全量标注浪费钱。我曾经做过一个行人跟踪项目,用关键帧标注+插值算法,成本省了60%,精度只掉了2%。
三、标注规范怎么制定?
规范是标注质量的命根子。没有规范,标注员就是自由发挥。我总结了一套「三定法」:
1. 定边界
什么该标,什么不该标,必须说清楚。
- 遮挡物体标不标?——我习惯标,但加一个「遮挡」属性
- 模糊物体标不标?——不标,除非是目标本身模糊
- 边缘物体标不标?——只标完整出现在画面中的部分
避坑指南:我曾经没规定「遮挡物体」的标注规则,结果10个标注员有8种标法。有的只标可见部分,有的脑补完整轮廓,有的干脆不标。最后数据质量一塌糊涂,模型训练直接崩了。从那以后,我每条规则都写死,还配示例图。
2. 定格式
标注格式必须统一。我推荐用COCO格式或YOLO格式:
// COCO格式示例
{
"images": [{"id": 1, "file_name": "001.jpg", "width": 1920, "height": 1080}],
"annotations": [{
"id": 1,
"image_id": 1,
"category_id": 1,
"bbox": [100, 200, 300, 400],
"area": 120000
}],
"categories": [{"id": 1, "name": "car"}]
}
// YOLO格式示例
// 每行:class_id x_center y_center width height (归一化)
0 0.5 0.5 0.3 0.4
1 0.2 0.3 0.1 0.2
我个人偏爱COCO格式,因为它支持属性、分割、关键点等扩展。YOLO格式虽然简单,但扩展性差。你想想看,万一以后要加个「颜色」属性,COCO直接加字段就行,YOLO就得改解析代码。
3. 定流程
标注不是一次性工作。我习惯用「三审制」:
- 初审: 标注员自检,修正明显错误
- 复审: 质检员抽检,抽检率不低于20%
- 终审: 项目经理终检,重点检查边界案例
为什么这么麻烦?因为标注员也是人,会疲劳、会走神。我见过一个项目,标注员连续标了8小时,最后1小时的标注错误率高达15%。所以,我建议每2小时强制休息,并且每批次数据都要做质量抽检。
四、实战案例:一个OCR标注方案
说个具体的。我之前做一个发票识别项目,标注方案是这样设计的:
| 维度 | 方案 | 原因 |
|---|---|---|
| 标注类型 | OCR+检测 | 既要识别文字,也要定位位置 |
| 空间粒度 | 字段级框选 | 发票字段固定,框选效率高 |
| 语义粒度 | 按字段类型分:发票号、日期、金额、税额 | 下游需要结构化输出 |
| 规范要点 | 1. 框必须紧贴文字 2. 倾斜文字用旋转框 3. 模糊文字标「不确定」 |
保证边界一致性 |
一个小技巧:对于OCR标注,我建议先做一轮预标注。用现成的OCR引擎跑一遍,标注员只需要修正错误。这样效率能提升3-5倍。但要注意,预标注的质量不能太差,否则标注员反而更累。
嗯,标注方案设计就这些。记住一句话:标注方案不是越细越好,而是越合适越好。 选对类型、定好粒度、写死规范,你的数据质量就稳了八成。剩下的两成,靠质检和迭代来补。