标注方案设计:选对类型,定好规矩

标注方案设计,说白了就是两件事:选什么标注类型,以及怎么定标注规则。我见过太多项目,算法模型还没跑起来,先倒在标注方案上了。嗯,这里面的坑,我踩过不少。

一、标注类型怎么选?

标注类型不是拍脑袋定的。你得先问自己三个问题:

  • 业务要什么? 是识别物体存在,还是定位位置,还是理解场景?
  • 模型用什么? 不同算法对标注格式要求不一样。
  • 成本能接受吗? 分割标注比分类贵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. 定流程

标注不是一次性工作。我习惯用「三审制」:

  1. 初审: 标注员自检,修正明显错误
  2. 复审: 质检员抽检,抽检率不低于20%
  3. 终审: 项目经理终检,重点检查边界案例

为什么这么麻烦?因为标注员也是人,会疲劳、会走神。我见过一个项目,标注员连续标了8小时,最后1小时的标注错误率高达15%。所以,我建议每2小时强制休息,并且每批次数据都要做质量抽检。

四、实战案例:一个OCR标注方案

说个具体的。我之前做一个发票识别项目,标注方案是这样设计的:

维度 方案 原因
标注类型 OCR+检测 既要识别文字,也要定位位置
空间粒度 字段级框选 发票字段固定,框选效率高
语义粒度 按字段类型分:发票号、日期、金额、税额 下游需要结构化输出
规范要点 1. 框必须紧贴文字
2. 倾斜文字用旋转框
3. 模糊文字标「不确定」
保证边界一致性

一个小技巧:对于OCR标注,我建议先做一轮预标注。用现成的OCR引擎跑一遍,标注员只需要修正错误。这样效率能提升3-5倍。但要注意,预标注的质量不能太差,否则标注员反而更累。

嗯,标注方案设计就这些。记住一句话:标注方案不是越细越好,而是越合适越好。 选对类型、定好粒度、写死规范,你的数据质量就稳了八成。剩下的两成,靠质检和迭代来补。