🔲

物体検知の評価指標AP(とmAP)の算出方法について

2024/06/30に公開

はじめに

最近、「深層学習による画像認識の基礎」という本を読んで画像認識の深層学習分野について学んでいるのですが、物体検知の章でAPとmAPという評価指標を目にしました。

これらの指標を目にして、私は学生のときに調べて多少納得したもののまた忘れてしまっていたのでこれを機にまとめようと思って筆を執っています。割と昔から話ではあるので同じような記事があるとは思いますが、まあいいかなと思っています。

ちなみにこの記事はおおよそClaude 3.5 Sonnetに生成させてから修正しました。結構文章書かせるの便利ですね。

物体検知とは

物体検知(Object Detection)は、コンピュータビジョンの重要なタスクの一つです。画像や動画内の物体を特定し、その位置を示すことが主な目的です。具体的には以下の2つの処理を行います:

  1. 分類(Classification): 画像内の物体が何であるかを特定します。
  2. 局在化(Localization): 特定した物体がどこにあるかを示します。通常、バウンディングボックス(矩形の枠)で位置を表します。

この物体検知モデルの性能を正確に評価するために、AP(Average Precision)やmAP(mean Average Precision)といった指標が使用されます。meanでAverageってどういうことなの

PrecisionとRecall

物体検知アルゴリズムの性能を正確に評価するためには、適切な指標が必要です。ここでは、APとmAPの理解に不可欠な基本的な評価指標について説明します。

Precision(適合率)

Precisionは、モデルが物体として検出したものの中で、実際に正しく検出できた割合を示します。

\text{Precision} = \frac{\text{TP}}{\text{TP} + \text{FP}} = \frac{\text{TP}}{\text{Prediction}}

Recall(再現率)

Recallは、実際に画像中に存在する物体のうち、正しく検出できた割合を示します。

\text{Recall} = \frac{\text{TP}}{\text{TP} + \text{FN}} = \frac{\text{TP}}{\text{Grand Truth}}

ここで:

  • TP (True Positives): 正しく検出された物体の数
  • FP (False Positives): 誤って検出された物体の数(実際にはないのに検出してしまったもの)
  • FN (False Negatives): 検出されなかった物体の数(実際にあるのに検出できなかったもの)

IoU(Intersection over Union)

IoUは、予測されたバウンディングボックス(Prediction)と実際のバウンディングボックス(Ground Truth)の重なり具合を示す指標です。

\text{IoU} = \frac{\text{Intersection Area}}{\text{Union Area}}

以下の図はIoUの概念を視覚的に表しています:

IoU算出のイメージ図

  • 赤い四角形:Ground Truth(実際の物体の位置)
  • 青い四角形:Prediction(モデルが予測した物体の位置)
  • 紫色の領域:Intersection Area(Ground TruthとPredictionの重なり部分)
  • 斜線の領域全体:Union Area(Ground TruthとPredictionの和集合、重複を除いた全体の領域)

IoUは、Intersection Area(紫色の部分)をUnion Area(斜線の領域全体)で割ることで計算されます。

IoUの値は0から1の間になり、1に近いほど予測が正確であることを示します。一般的に、IoUが0.5以上の場合、その検出は正しいと判断されます(ただし、タスクによってはこの閾値が変わることがあります)。

AP(Average Precision)の具体的な算出方法

ここでは実際の例を見ながらAPの計算を行います。

テストデータ

以下のテストデータを使用します。IoU閾値は0.5とします。信頼度スコアは物体検知の結果がどの程度正確かというのを物体検知モデル自体が出力した値のことです。信頼度が高い順に並べておきます。

No. 信頼度 IoU 正解
1 0.95 0.88 T
2 0.88 0.76 T
3 0.84 0.69 T
4 0.77 0.81 T
5 0.72 0.54 T
6 0.65 0.48 F
7 0.61 0.62 T
8 0.53 0.51 T
9 0.44 0.39 F
10 0.38 0.46 F

総正解数(Ground Truth)は7とします。

段階的なPrecision-Recallの計算

PrecisionとRecallは、表の上から1つずつ予測を加えながら計算していきます。各ステップでの計算過程を示します。

各予測を順番に評価し、PrecisionとRecallを計算します。計算過程を詳細に示します。

  1. 予測1:

    • TP = 1, FP = 0
    • Precision = 1 / (1 + 0) = 1.0000
    • Recall = 1 / 7 = 0.1429
  2. 予測2:

    • TP = 2, FP = 0
    • Precision = 2 / (2 + 0) = 1.0000
    • Recall = 2 / 7 = 0.2857
  3. 予測3:

    • TP = 3, FP = 0
    • Precision = 3 / (3 + 0) = 1.0000
    • Recall = 3 / 7 = 0.4286

以下、同様に計算を続けます。

最終的な結果をテーブルにまとめると以下のようになります:

No. 信頼度 IoU 正解 TP FP Precision Recall
1 0.95 0.88 T 1 0 1.0000 0.1429
2 0.88 0.76 T 2 0 1.0000 0.2857
3 0.84 0.69 T 3 0 1.0000 0.4286
4 0.77 0.81 T 4 0 1.0000 0.5714
5 0.72 0.54 T 5 0 1.0000 0.7143
6 0.65 0.48 F 5 1 0.8333 0.7143
7 0.61 0.62 T 6 1 0.8571 0.8571
8 0.53 0.51 T 7 1 0.8750 1.0000
9 0.44 0.39 F 7 2 0.7778 1.0000
10 0.38 0.46 F 7 3 0.7000 1.0000

この表は、各予測結果に対するPrecisionとRecallの変化を示しています。これらの値を使用してPrecision-Recallカーブを描画し、APを計算することができます。

Precision-Recallカーブ

まず、下図のPrecision-Recallカーブをご覧ください。

このグラフには2つの重要な要素があります:

  1. 青い線(Original): これは、テストデータから直接得られたPrecision-Recall値をプロットしたものです。物体検出の閾値を変化させると、このカーブに沿って結果が変動します。

  2. 赤い線(Envelope): これは、Precision値を補間した線で、AP計算に実際に使用されるものです。各Recall値に対して、それ以降の最大Precision値を取ることで得られます。

APの計算手順

AP(Average Precision)は、Precision-Recall カーブの下の面積として定義されます。数学的には以下のように表現されます:

AP = \int_0^1 p(r) dr

ここで、p(r) はあるRecall(再現率) r におけるPrecision(適合率)を表します。

しかし、実際のAPの計算には、このEnvelopeカーブ(赤い線)を使用します。計算手順は以下の通りです:

  1. 11点補間法の適用:
    Recall値を0から1まで0.1刻みで11点サンプリングします。各点での最大Precision値(Envelopeカーブ上の値)を使用します。他にもCOCOというデータセットでは101点をサンプリングしたりするのもあります。

  2. 各Recall点での補間Precision値の取得:
    グラフから読み取ると、以下のようになります:

    Recall Precision (補間後)
    0.0 1.00
    0.1 1.00
    0.2 1.00
    0.3 1.00
    0.4 1.00
    0.5 1.00
    0.6 1.00
    0.7 1.00
    0.8 0.875
    0.9 0.875
    1.0 0.875
  3. AP値の計算:
    これら11点のPrecision値の平均を取ります。

    AP = (1.00 + 1.00 + 1.00 + 1.00 + 1.00 + 1.00 + 1.00 + 1.00 + 0.875 + 0.875 + 0.875) / 11
    ≈ 0.9659 または 96.59%

結果の解釈

このAPの値(96.59%)は、モデルが非常に高い性能を持っていることを示しています。具体的には:

  • Recallが0.7(70%)までの範囲で、Precisionが常に1.00(100%)を維持しています。これは、検出された物体の70%までは、全て正確に検出されていることを意味します。

  • カーブの形状が左上に寄っているほど、モデルの性能が高いことを示します。このカーブは理想的な形状に非常に近いと言えます。

mAP(mean Average Precision)の算出

APの概念を理解したところで、最後にmAP(mean Average Precision)について説明しましょう。物体検知は本来クラスの分類も存在するので各クラスに対してそれぞれAPが算出されます。先ほどまで説明していたのは実は単一のクラスに対してのものということです。
そして、mAPは、複数クラスの物体検出タスクにおいて、モデルの全体的な性能を評価するための指標です。

mAPの計算方法

  1. 各クラスのAP計算:
    データセット内の各クラスについて、先ほど説明したようにAPを計算します。

  2. 平均の算出:
    全クラスのAPの平均を取ります。

    mAP = (AP_class1 + AP_class2 + ... + AP_classN) / N

    ここで、Nはクラスの総数です。

仮に3クラスの物体検出タスクがあり、各クラスのAPが以下のようになったとします:

  • クラス1(車): AP = 0.92
  • クラス2(歩行者): AP = 0.85
  • クラス3(自転車): AP = 0.78

この場合、mAPは次のように計算されます:

mAP = (0.92 + 0.85 + 0.78) / 3 ≈ 0.85 または 85%

まとめ

この記事では、物体検出アルゴリズムの評価指標であるAP(Average Precision)とmAP(mean Average Precision)について詳しく説明しました。

  • APは単一クラスの検出性能を評価する指標で、Precision-Recallカーブの下の面積として計算されます。
  • 実際のAPの計算では、11点補間法などで算出されます。
  • mAPは複数クラスの検出タスクにおいて、各クラスのAPの平均を取ることで算出されます。

補足:その他の派生系?のもの

IoUごとのAP

物体検出の評価では、異なるIoU(Intersection over Union)閾値でAPを計算することがあります:

  • AP@.50 (AP50): IoU閾値0.5でのAP。
  • AP@.75 (AP75): IoU閾値0.75でのAP。
  • AP: IoU閾値を0.5から0.95まで0.05刻みで変化させたmAPの平均。

mAPやAPって記載があることが多いが、基本的に物体検知モデルの評価指標ならmAPなのかなと思っています。

COCOデータセットの物体サイズごとのmAP

COCOデータセットでは、物体のサイズに基づいて3つのカテゴリーでmAPを計算します:

  • AP small (APs): 小さい物体(面積 < 32^2 ピクセル)
  • AP medium (APm): 中程度の物体(32^2 ≤ 面積 < 96^2 ピクセル)
  • AP large (APl): 大きい物体(面積 ≥ 96^2 ピクセル)

これにより、モデルが様々なサイズの物体をどの程度正確に検出できるかを評価できます。

Discussion