🧠 第四章 数据标注:引导模型学习提升性能
📄 一句话概括

四个框的 IoU 是 0.800/0.736/0.341/0.627—— 3 个标对、1 个标歪。 IoU 0.5 是「算不算命中」的合格线, 两个标注员之间低于 0.7 就说明标准没对齐。

📝 本节和前面几节的关系

上一节把标签定好了。这一节真动手画框,并且给出一个能替代「人盯着看」的量化方法。

一、打标就是画框,但「画得准」不是感觉

画框这个动作很简单:从目标左上角按下,拖到右下角松开。难的是判断画到哪里算对。 包得松一点、紧一点,视觉上都像那么回事。 但模型训练时要拿这个框去算损失,框歪了,损失就一直降不下来。 所以必须有一个数来判断。 检测任务用的数是 IoU(交并比):两个框重叠的面积,除以它们合起来覆盖的面积。 完全重合是 1.0,完全不沾是 0.0。 这个数同时管两件事:评模型(预测框对真值框)、评标注(两个标注员互相之间)。

二、两条线:0.5 和 0.7

0.5 是「算不算命中」的线。 模型预测的框和真值框 IoU 不小于 0.5,这个目标就算检测到了。 低于 0.5 算漏检。 这条线是约定俗成的,也是很多检测评测标准(比如 COCO 的 AP50)用的阈值。 它衡量的是「大致框住了没有」,不衡量精度。 0.7 是「标准对齐了没有」的线。 让两个标注员标同一批图,算他们互相的 IoU。 低于 0.7 就说明手册写得不够细,这时候该去改手册,不是去骂人。 Demo 里四个框的 IoU 是 0.800/0.736/0.341/0.627:前两个合格,第三个 0.341 是明显标歪, 第四个 0.627 是「擦线合格」。 注意第三个框为什么歪:它把行人的框往左上扩了一大圈, 覆盖了旁边的空地。 这种「差不多框住」的标法最常见, 也最伤模型——因为模型会学到「行人的框应该包含周围一片地面」。

三、三个最常见的偏差

包太松。 为了「确保框住」,四周留一大圈空白。 后果是同一类目标的框大小差异巨大,模型学不准尺度。 包太紧。 只框住躯干,把手脚、头发切掉。后果是框和真实物体边界不一致,推理时框会偏小。 漏标小目标。 远处的、被遮挡的、只露出一点点的,干脆不标。 这个最隐蔽——因为漏标的框根本不在数据里,统计时看不出来。 第三条的解法是反向检查:拿训好的模型跑一遍,看它在哪里检出了目标但标注里没有。 这些「多出来的框」要么是模型误检,要么是标注漏标,逐个看一遍,能捞回不少。 还有一条操作纪律:框的两条边要紧贴目标的外轮廓,不要留空隙也不要切进去。目标被遮挡时, 框自己脑补完整形状,而不是只框可见部分。这条必须写进手册,否则十个人会标出十种。

四、在 MakeSense 里打标

📋 实操清单(要在浏览器里点): 第一步,选好任务类型(Object Detection),图片拖进页面,左侧选当前标签。 第二步,在目标上按住拖出矩形。松手即生成一个框,按住快捷键(数字键)再拖,可以直接用对应标签。 第三步,标错了点中框按 Delete 删掉;框的位置不对,拖动四角或四边调整。 第四步,A 和 D 切换上一张下一张。 标完一批先别急着导出,抽 10 张回看一遍——回看能抓出大部分手误。 🐍 沙箱等价物:IoU 的算法和半自动画框见 Demo。 沙箱里不能点鼠标,但「两个框差多少」这件事是纯几何计算, 所以标注质量检查完全可以自动化——批量算双人标注的 IoU,比人眼抽检准得多。

五、动手 Demo:四个框 3 个合格、1 个标歪:IoU 0.341 低于 0.5 那条线

造一张 320×240 的示意图,放四个目标,给每个目标一对框(真值和「标注」),逐个算 IoU, 并按 0.5 的合格线判定。

def iou(a, b):
    ax1, ay1 = max(a[0], b[0]), max(a[1], b[1])
    ax2, ay2 = min(a[2], b[2]), min(a[3], b[3])
    iw, ih = max(0, ax2 - ax1), max(0, ay2 - ay1)
    inter = iw * ih
    ua = ((a[2]-a[0]) * (a[3]-a[1])
          + (b[2]-b[0]) * (b[3]-b[1]) - inter)
    return inter / float(ua) if ua else 0.0

for t, p in zip(truth, pred):
    v = iou(t, p)
    print(t[4], v, u'是' if v >= 0.5 else u'否')

实跑输出:

--------------------------------------------------------------------
打标:框画得准不准,用一个数就能量
--------------------------------------------------------------------
  图像尺寸                 320 × 240
  真值框                   4 个
  预测框                   4 个

  类别     真值              预测                IoU   IoU≥0.5
  -----------------------------------------------------------
  car      40,60,120,150     46,66,118,146     0.800        是
  car      180,90,280,160    176,86,292,168    0.736        是
  person   60,170,100,230    30,150,95,240     0.341        否
  person   200,180,250,235   198,170,258,228   0.627        是

  IoU 最小                 0.341
  IoU 中位                 0.681
  IoU 最大                 0.800
  四个框里 3 个算「标对」(IoU 不小于 0.5),1 个算「标歪」。

  **IoU 就是交并比:两个框重叠的面积除以它们合起来的面积。**
  完全重合是 1.0,完全不沾是 0.0。0.5 是检测任务最常用的合格线。

  这个数为什么重要?因为它同时管两件事:
  评模型                   预测框和真值框的 IoU ≥ 0.5 才算命中
  评标注                   两个标注员画同一个目标,IoU 低于 0.7 就说明标准没对齐
  **所以标注质量可以用「双人重复标注的 IoU」来量,不用靠人盯。**
  抽一小部分图让两个人各标一遍,算平均 IoU,
  低于 0.7 就回去改手册,别急着开标。

四个 IoU:0.800、0.736、0.341、0.627。 最小值 0.341 那个就是标歪的,其余三个过 0.5 线,其中一个 0.627 是擦线。 0.341 那个为什么歪? 它的预测框是 30,150,95,240, 真值是 60,170,100,230——左边扩出去 30 像素、上边扩出去 20 像素,把旁边一大片空地框进来了。 这种错最典型:视觉上「框住了那个人」,但框的面积比真值大了将近一倍半,IoU 直接掉到 0.34。 模型学到的是「行人的框要包含周围地面」。 再看 0.627 那个:它是「稍微偏了一点」,刚好过线。 这种擦线的框最容易被放过,但批量都是这样,模型精度就会整体偏软。 要说明的是:这里的「真值」是我手写的,不是人工标出来的。 Demo 演示的是「怎么算、怎么判」,不是「这一批数据质量如何」。 真实项目里把两个人标的框批量喂进这个函数,就能得到一致性分数。

30 秒实验

  1. 把第三个框的偏移量从 30 像素改成 10 像素,看 IoU 从 0.341 涨到多少。 体会一下「偏一点」和「偏很多」在 IoU 上的差别。
  2. 把合格线从 0.5 改成 0.7,看有几个框还能过。这就是「评模型」和「评标注一致性」两条线的区别。
  3. 算一下「框大一倍」对应的 IoU 上限:如果预测框面积是真值的两倍且完全覆盖,IoU 最多是 0.5。 这说明「包太松」的错法天然过不了线。

常见误区

  1. 「框大概框住就行」。IoU 0.34 和 0.80 在视觉上都能说「框住了」,但对训练是完全不同的信号。 要有量化标准。
  2. 「IoU 0.5 就够精确了」。0.5 是「算不算命中」的线,不是精度线。 标注一致性要求更高(0.7),否则十个标注员会标出十种框。
  3. 「小目标漏标不影响」。漏标的框不在数据里,统计上完全看不出来,只能靠模型跑一遍反向找。
自测三问(点开对答案) 1. IoU 是怎么算的? —— 两个框重叠的面积,除以它们合起来覆盖的面积。完全重合是 1.0,完全不沾是 0.0。 2. 0.5 和 0.7 这两条线分别管什么? —— 0.5 是「算不算命中」的线,用来评模型; 0.7 是「标准对齐了没有」的线,用来评两个标注员之间的一致性。 3. 为什么「漏标小目标」最难发现? —— 因为漏标的框根本不在数据里,任何统计都看不出来。 只能用训好的模型跑一遍,看它检出但标注里没有的地方。

框画完了,如果中途发现标签起错名,别急着重新标。下一节讲怎么安全地改名。

相关笔记