ひとことで言うと
IoU は予測領域と正解領域の重なり具合、AP は検出の信頼度順位を変えたときの適合率・再現率の曲線を要約した値、mAP はクラスごとの AP を平均した値です。検出では「クラスが合っている」だけでなく、位置の重なりが指定した閾値を超えたかで正解判定が変わります。
採点を「名前が合っているか」だけでなく「答案の枠が正解の枠にどれだけ重なったか」まで見る試験だと考えます。採点の重なり基準を厳しくすれば、同じ答案でも点数が下がります。
なぜ必要か
画像分類なら、画像に対するクラスの正誤を数えられます。しかし物体検出は、クラスと位置を同時に当てるため、予測ボックスを正解ボックスと対応付けて TP(真陽性)かどうかを決める必要があります。COCO 論文でも、予測と正解のボックスの重なりが基準以上であることを検出の正解条件にしています。
ここで IoU 閾値を から に変えると、位置が少しずれた検出が TP から FP(偽陽性)へ移り、同じ検出器でも適合率・再現率・AP は変わります。したがって「mAP がいくつか」だけでは比較できず、クラス平均か、どの IoU 閾値かを併記して読みます。
| 段階 | 評価で決めること |
|---|---|
| 1 | クラス一致と IoU 閾値で TP・FP・FN を決める |
| 2 | 信頼度順に並べ、各順位の適合率・再現率を出す |
| 3 | クラスごとに AP を求め、平均して mAP にする |
仕組み
予測ボックスを 、正解ボックスを とすると、IoU(Intersection over Union)は共通部分の面積を和集合の面積で割った値です。
は領域の面積です。クラスが一致し、IoU が閾値 以上なら TP、そうでなければ FP として扱います。未検出の正解は FN です。この判定が先にあり、その後で信頼度スコアの高い順に検出を並べ、各順位で適合率 と再現率 を計算します。
AP はこの順位を端から追った PR 曲線の下の面積を、順位ごとの再現率の増分で足し上げて一つの値にまとめたものです。scikit-learn の定義では、補間した台形面積ではなくこの増分に適合率を掛ける形です。
と は 番目のスコア閾値での適合率と再現率です。mAP はクラス数を として、クラス の AP を平均します。
実務では、COCO 流に複数の IoU 閾値で AP を計算し、それらも平均する評価が使われます。単一の低い閾値だけでなく、重なりの厳しさを変えて位置精度を評価できる点が要所です。
試験でどう問われるか
| 問われ方 | 正解に寄る条件 | 引っかけ |
|---|---|---|
| IoU の定義 | 交差面積 ÷ 和集合面積 | 交差面積 ÷ 正解面積だけにする |
| 閾値を上げた影響 | 位置の甘い検出が TP になりにくく、同じ器でも値が変わる | 検出器の重みが自動で変わると考える |
| AP の意味 | 信頼度順位で得た PR 曲線を要約する | IoU の平均や単一の適合率とする |
| mAP の意味 | クラスごとの AP の平均 | 全検出の正解率、または IoU そのものとする |
| COCO 流の読み方 | 複数 IoU 閾値の AP 平均を含む設定を確認する | 「mAP」とだけ見て閾値を確認しない |
実装で確かめる
二つの矩形について IoU を計算し、閾値を変えると判定が変わる境界を確認します。座標は左上 と右下 です。
def iou(a, b):
ix1, iy1 = max(a[0], b[0]), max(a[1], b[1])
ix2, iy2 = min(a[2], b[2]), min(a[3], b[3])
inter = max(0, ix2 - ix1) * max(0, iy2 - iy1)
area_a = (a[2] - a[0]) * (a[3] - a[1])
area_b = (b[2] - b[0]) * (b[3] - b[1])
return inter / (area_a + area_b - inter)
value = iou((0, 0, 10, 10), (2, 2, 10, 10))
print(value, value >= 0.5, value >= 0.75)
出力は 0.64 True False です。同じボックス対でも、 なら TP、 なら TP になりません。実際の AP ではこの判定を検出の順位列とクラスごとに積み上げます。
取り違えやすいもの
| 用語 | IoU・AP・mAP との切り分け |
|---|---|
| 適合率・再現率 | TP・FP・FNから各順位で計算する途中の指標です |
| IoU | 2領域の幾何学的な重なりで、PR 曲線そのものではありません |
| AP | 一つのクラスと IoU 条件について、順位全体を要約します |
| mAP | 複数クラスの AP を平均します。IoU 平均を指す語ではありません |
| 信頼度閾値 | 出力を採用する境界です。AP はこの境界を動かした結果をまとめます |
想起チェック
IoU は何を何で割った値か
交差領域の面積を、二つの領域の和集合の面積で割った値です。
同じ検出器で IoU 閾値を上げると mAP が変わるのはなぜか
位置の重なりが足りない検出が TP ではなくなり、TP・FP・FNから作る PR 曲線と AP が変わるためです。
AP と mAP の平均の対象は何か
AP は一クラスの順位付き検出を要約し、mAP はその AP をクラス方向に平均します。複数 IoU 閾値を平均する設定では、その条件も別に確認します。