Skip to content

如何测量边界框上的标注者间一致性

原始 IoU 不等于一致性。如何在做机遇校正的前提下衡量标注者在边界框、多边形与掩码上的一致程度,以及为什么检测、分类与定位需要各自独立的数字。

标注者之间的平均 IoU 衡量的是任务有多容易,而不是他们有多一致。在一份典型的检测语料上,即便标注者根本没看过图片,这个数字也会在 0.95 左右。 衡量空间标签上的一致性,意味着要做机遇校正,并把检测、分类与定位作为各自独立的数字来报告。

原始 IoU 为什么会误导人

设想一份语料,其中每张图片都只有一个居中的大目标。两位都在中间画框的标注者会有很高的重叠度,因此平均 IoU 会算出约 0.95。而一位看都没看就在中间画了个框的标注者,结果也是如此。

这个数字衡量的是任务,而不是标注者。这与百分比一致率在类别标签上遇到的问题完全相同——某一个占主导的类别会抬高分数——解法也相同:对该任务偶然产生的一致程度做出校正。

CVAT 的共识引擎与 V7 的共识环节都以原始 IoU 对照每个类别的阈值来比较标注者。两者都没有做机遇校正,而两者又都被广泛使用,因此从其中任何一方报出的"0.9 一致性",通常无法与任何东西作比较。

为什么不在 1 − IoU 上套用 Krippendorff's α

最显而易见的补救办法,是把 IoU 距离喂给 Krippendorff's α,它可以接受任意距离函数。但在这里效果并不好,动手实现之前值得先了解原因。

Braylan、Alonso 与 Lease(WWW 2022)以"所得分数能否正确地对标注者质量排序"为标准来评估距离函数。对于边界框,α 会把普通 L2(0.687)排在 IoU(0.505)与 GIoU(0.507)之上,这与他们基于分布的度量以及实践者的判断恰好相反。

从结构上看:IoU 距离被限制在 [0, 1] 区间内并且会饱和。随机配对的两个框几乎总是 IoU 为 0,于是期望分歧收敛到约等于 1,α 退化为 1 − 平均距离,其中已不剩任何机遇校正。IoU 还会在最关键的地方失去分辨力:两个不相交的框,无论相邻还是分处对角,得分都是 0,因此恰恰在标注者产生分歧的地方没有梯度。

应当报告什么

把问题拆成三份

组成部分问题度量
检测他们究竟有没有找到相同的对象?存在性上的名义 α
分类对已匹配的对象,他们给出的标签是否相同?标签上的名义 α
定位已匹配的对象是否位于相同位置?σ 与 KS

一位找全了所有对象却把标签全标错的标注者,和一位标签正确但框画得松垮的标注者,是两种不同的问题。一个合并后的分数无法告诉你面对的是哪一种,而两者的纠正方式并不相同。

σ,配合经验机遇基线

text
σ = 1 − 平均(同一条目内距离) / 平均(不同条目间距离)

这是把 α 的 1 − D_o/D_e 形式推广到任意距离,其中机遇基线通过比较不同条目的标注来估计。σ = 0 意味着标注者之间的一致程度,与他们在互不相关的图片上的表现无异。

不要把负值截断到零。"在同一张图上比在不同图上分歧更大"是一种真实状态,而且它几乎总是意味着规范存在歧义,而非标注者粗心。

与之并列的 KS

同一条目内与不同条目间两组距离分布之间的双样本 Kolmogorov–Smirnov 统计量。σ 比较的是两个均值,可能被少数离群值拖动;KS 比较的是整个分布。

两者都要报告。当它们互相矛盾时,说明少数条目承载了绝大部分分歧,这提示你该去看看那些条目。

掩码需要另一套工具

对于像素掩码,"该记录谁的边界"与"他们是否一致"并不是同一个问题。请使用 STAPLE(Warfield、Zou 与 Wells,2004),它在逐像素标签上运行期望最大化,并为每位标注者估计敏感度与特异度。

敏感度与特异度要分别报告,因为它们的纠正方式恰好相反:敏感度低意味着分割不足,特异度低意味着分割过度,而单一的准确率数字会把两者评成同一分。

当认真的标注者人数处于劣势时,STAPLE 也优于多数表决。两位认真的标注者对三位噪声标注者时,多数表决相对真值的 Dice 为 0.846,STAPLE 为 1.000。

三维框需要精确的带旋转 IoU

对于立方体,请使用精确的带旋转三维 IoU。只要数据具有真实的俯仰与滚转——无人机、手持与室内扫描都是如此——轴对齐的近似所报告的分歧就是度量方式的产物。

在 Potato 中如何做

yaml
agreement_metrics:
  enabled: true
 
annotation_schemes:
  - annotation_type: image_annotation
    name: objects
    description: "Draw a tight box around every vehicle."
    source_field: image
    tools: [bbox]
    labels:
      - {name: car, color: "#FF6B6B"}
      - {name: truck, color: "#4ECDC4"}
 
num_annotators_per_item:
  default: 2

报告位于 /admin/iaa。有两项特性值得知道:

  • 未定义的数值会自我说明。 在完全一致的语料上,α 确实是未定义的。直接给出 NaN 会让人以为计算出错,而给出 1.0 则是谎报。
  • 不会无声地截断。 成对比较的复杂度对标注者人数与每个条目的实例数都是平方级的,因此设有预算。触及上限时,该条目会被整体跳过而非只算一半,并且报告会说明纳入了多少条目。

检查清单

  1. 每个条目至少要有两份独立标注。只有一位标注者时,一致性是未定义的,而不是完美的。
  2. 分别报告检测、分类与定位。
  3. 对照经验估计的基线做机遇校正,而不是对照一个固定阈值。
  4. 同时报告 σ 与 KS。
  5. 掩码用 STAPLE,立方体用带旋转的三维 IoU。
  6. 说明覆盖率。一个基于抽样得出、却表现得像完整的数字,会被人当作完整的来引用。

延伸阅读