Skip to content

バウンディングボックスのアノテーター間一致度を測る方法

生の IoU は一致度ではありません。バウンディングボックス、ポリゴン、マスクについて偶然一致を補正して一致度を測る方法と、検出・分類・位置決めに別々の数値が必要な理由。

アノテーター間の平均 IoU が測っているのは課題の簡単さであって、彼らがどれだけ一致しているかではありません。典型的な検出コーパスでは、画像を一度も見ていないアノテーターでも 0.95 前後になります。 空間ラベルの一致度を測るとは、偶然一致を補正し、検出・分類・位置決めを別々の数値として報告することです。

なぜ生の IoU は誤解を招くのか

各画像に大きな対象が一つ中央に写っているコーパスを考えてください。二人のアノテーターがどちらも中央にボックスを描けば大きく重なるので、平均 IoU は 0.95 前後になります。画像を見ずに中央へボックスを描いたアノテーターでも同じです。

この数値が測っているのはアノテーターではなく課題です。これはカテゴリラベルにおける一致率が抱える問題とまったく同じで、支配的なクラスが一つあるとスコアが膨らみます。そして解決策も同じです。その課題が偶然どれだけの一致を生むかを補正するのです。

CVAT の合意エンジンと V7 の合意ステージは、どちらもクラスごとの閾値に対する生の IoU でアノテーターを比較します。いずれも偶然一致補正を行っておらず、しかも両方とも広く使われているため、どちらから報告された「一致度 0.9」も、通常は何とも比較できません。

1 − IoU 上の Krippendorff's α ではだめな理由

素直な解決策は、任意の距離関数を受け付ける Krippendorff's α に IoU 距離を渡すことです。ここではうまく機能せず、その理由は実装する前に知っておく価値があります。

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 − mean(within-item distance) / mean(between-item distance)

これは α の 1 − D_o/D_e の形を任意の距離に一般化したもので、偶然ベースラインは異なる項目のアノテーションを比較して推定します。σ = 0 は、無関係な画像の場合と変わらない程度にしか一致していないという意味です。

負の値を丸め上げてはいけません。「同じ画像上のほうが別々の画像上より離れている」は実在する状態であり、ほとんどの場合、アノテーターが不注意なのではなくガイドラインが曖昧だということを意味します。

KS を併記する

項目内距離と項目間距離の分布同士の二標本コルモゴロフ–スミルノフ統計量です。σ は二つの平均を比較するため少数の外れ値に引きずられますが、KS は分布全体を比較します。

両方を報告してください。両者が食い違うときは、一部の項目が不一致の大半を担っているということであり、その項目を見に行くべきだと分かります。

マスクには別の道具が要る

ピクセルマスクでは、「誰の境界を記録するか」は「彼らが一致しているか」とは別の問いです。STAPLE(Warfield、Zou、Wells、2004)を使ってください。ピクセルごとのラベルに期待値最大化法を回し、アノテーターごとに感度と特異度を推定します。

感度と特異度を別々に報告するのは、修正の方向が正反対だからです。感度が低ければ過小分割、特異度が低ければ過大分割であり、単一の精度値は両者を同じに採点してしまいます。

STAPLE は、丁寧なアノテーターが数で劣る場合にも多数決を上回ります。丁寧な二人が雑な三人に対したとき、多数決は正解に対して Dice 0.846、STAPLE は 1.000 でした。

3D ボックスには厳密な回転 IoU が要る

直方体には厳密な回転 3D 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 を、直方体には回転 3D IoU を使うこと。
  6. カバー率を明示すること。標本上で計算された数値が完全なものとして提示されれば、完全なものとして引用されます。

参考文献