機械学習

IoUとmAP

検出の正解を決める IoU、適合率・再現率曲線を要約する AP、クラス平均の mAP を切り分け、IoU 閾値を変えた評価の読み方を確認します。

  • B|標準
  • 機械学習

数式の記号で止まったら 記号の読み方 (∂・⊙・転置・上付き添字を、読み方から)

ひとことで言うと

IoU は予測領域と正解領域の重なり具合、AP は検出の信頼度順位を変えたときの適合率・再現率の曲線を要約した値、mAP はクラスごとの AP を平均した値です。検出では「クラスが合っている」だけでなく、位置の重なりが指定した閾値を超えたかで正解判定が変わります。

採点を「名前が合っているか」だけでなく「答案の枠が正解の枠にどれだけ重なったか」まで見る試験だと考えます。採点の重なり基準を厳しくすれば、同じ答案でも点数が下がります。

なぜ必要か

画像分類なら、画像に対するクラスの正誤を数えられます。しかし物体検出は、クラスと位置を同時に当てるため、予測ボックスを正解ボックスと対応付けて TP(真陽性)かどうかを決める必要があります。COCO 論文でも、予測と正解のボックスの重なりが基準以上であることを検出の正解条件にしています。

ここで IoU 閾値を 0.50.5 から 0.750.75 に変えると、位置が少しずれた検出が TP から FP(偽陽性)へ移り、同じ検出器でも適合率・再現率・AP は変わります。したがって「mAP がいくつか」だけでは比較できず、クラス平均か、どの IoU 閾値かを併記して読みます。

段階評価で決めること
1クラス一致と IoU 閾値で TP・FP・FN を決める
2信頼度順に並べ、各順位の適合率・再現率を出す
3クラスごとに AP を求め、平均して mAP にする

仕組み

予測ボックスを BpB_p、正解ボックスを BgB_g とすると、IoU(Intersection over Union)は共通部分の面積を和集合の面積で割った値です。

IoU(Bp,Bg)=∣Bp∩Bg∣∣Bp∪Bg∣\mathrm{IoU}(B_p,B_g)=\frac{|B_p\cap B_g|}{|B_p\cup B_g|}

∣⋅∣|\cdot| は領域の面積です。クラスが一致し、IoU が閾値 τ\tau 以上なら TP、そうでなければ FP として扱います。未検出の正解は FN です。この判定が先にあり、その後で信頼度スコアの高い順に検出を並べ、各順位で適合率 PP と再現率 RR を計算します。

AP はこの順位を端から追った PR 曲線の下の面積を、順位ごとの再現率の増分で足し上げて一つの値にまとめたものです。scikit-learn の定義では、補間した台形面積ではなくこの増分に適合率を掛ける形です。

AP=∑n(Rn−Rn−1)Pn\mathrm{AP}=\sum_n (R_n-R_{n-1})P_n

PnP_n と RnR_n は nn 番目のスコア閾値での適合率と再現率です。mAP はクラス数を KK として、クラス kk の AP を平均します。

mAP=1K∑k=1KAPk\mathrm{mAP}=\frac{1}{K}\sum_{k=1}^{K}\mathrm{AP}_k

実務では、COCO 流に複数の IoU 閾値で AP を計算し、それらも平均する評価が使われます。単一の低い閾値だけでなく、重なりの厳しさを変えて位置精度を評価できる点が要所です。

試験でどう問われるか

問われ方正解に寄る条件引っかけ
IoU の定義交差面積 ÷ 和集合面積交差面積 ÷ 正解面積だけにする
閾値を上げた影響位置の甘い検出が TP になりにくく、同じ器でも値が変わる検出器の重みが自動で変わると考える
AP の意味信頼度順位で得た PR 曲線を要約するIoU の平均や単一の適合率とする
mAP の意味クラスごとの AP の平均全検出の正解率、または IoU そのものとする
COCO 流の読み方複数 IoU 閾値の AP 平均を含む設定を確認する「mAP」とだけ見て閾値を確認しない

実装で確かめる

二つの矩形について IoU を計算し、閾値を変えると判定が変わる境界を確認します。座標は左上 (x1,y1)(x_1,y_1) と右下 (x2,y2)(x_2,y_2) です。

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 です。同じボックス対でも、τ=0.5\tau=0.5 なら TP、τ=0.75\tau=0.75 なら TP になりません。実際の AP ではこの判定を検出の順位列とクラスごとに積み上げます。

取り違えやすいもの

用語IoU・AP・mAP との切り分け
適合率・再現率TP・FP・FNから各順位で計算する途中の指標です
IoU2領域の幾何学的な重なりで、PR 曲線そのものではありません
AP一つのクラスと IoU 条件について、順位全体を要約します
mAP複数クラスの AP を平均します。IoU 平均を指す語ではありません
信頼度閾値出力を採用する境界です。AP はこの境界を動かした結果をまとめます

想起チェック

IoU は何を何で割った値か

交差領域の面積を、二つの領域の和集合の面積で割った値です。

同じ検出器で IoU 閾値を上げると mAP が変わるのはなぜか

位置の重なりが足りない検出が TP ではなくなり、TP・FP・FNから作る PR 曲線と AP が変わるためです。

AP と mAP の平均の対象は何か

AP は一クラスの順位付き検出を要約し、mAP はその AP をクラス方向に平均します。複数 IoU 閾値を平均する設定では、その条件も別に確認します。

出典