Help us understand the problem. What is going on with this article?

mAP(mean Average Precision) のまとめ

More than 1 year has passed since last update.

ほぼほぼこの記事の翻訳です。

mAPは物体検知モデルに使われる評価指標です。mAPを理解するにはまずPrecision、Recall、IoUについて理解する必要があります。

Precision(適合率)

予測がどれだけ正確かを表す。

光の速さを知りたいとします。

何らかの検索システムで「光の速さ」で検索した結果、100件の文書がヒットしたとする。

その100件のうち、「光の速さ」が正しく分かる文書を正解とし、正解は60件だったとする。

すると、この場合の適合率は 60/100 = 0.60 となる。

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

Recall(再現率)

結果として出てくるべきもののうち、実際出てきたものの割合

検索システムが扱う全データ(文書)の中で、光の速さが分かるものは全部で200件だとする。

しかし、「光の速さ」と検索して、実際に得られた結果(文書)は90件だとする。

すると、この場合の再現率は 90/200 = 0.45 となる。

Recall = \frac{TP}{TP + FN}

IoU(Intersection over Union)

予測結果とGround Truthがどれだけ重なっているかを表す。

閾値(0.5など)を設定し、予測がTrue PositiveかFalse Positiveかを判断する場合もある。

AP (Average Precision、平均適合率)

上の表は、5つのりんごを各画像に含むデータセットにおいて、モデルの予測結果を予測の信頼度順で並べたものである。

2つめのカラム(Correct?)は予測が正しいかを表す(この例では$IoU\geq0.5$で正しいとされる)

まず、Rankが3の列を例に、precisionとrecallがどのように計算されているかを見てみる。

  1. Precision
    画像内のりんごの領域を3つ予測したのに対し、実際は2つしか正しく予測できていない => 2/3 = 0.67

  2. Recall
    画像内に5つりんごがあるのに対し、正しく予測できているのは2つのみ => 2/5 = 0.4

Recallは表の下に行くほど上がるが、precisionはzigzagなパターンで動く。

これを可視化するために横軸にRecall、縦軸にPrecisionをとってプロットする

APの定義は、上のprecision-recall曲線の下の部分の面積である。
$$
AP = \int_0^1p(r)dr
$$

PrecisionとRecallは常に0から1の間値を取るため、APも常に0から1の間の値をとる。

APを物体検知について計算する前に、しばしば上のzigzagパターンをなだらかにする。

各recallの値に対して、右側にある一番大きいprecisionの値をとってきてそのrecallに対するprecisionの値と置き換える。

オレンジの線は緑の線に変換され、zigzagなパターンから単調に減少するパターンになる。

この変換により計算されたAPの値はランクのわずかな変動に対して安定するようになる。

数学的には、再現率$\tilde r$に対する適合率を、$\tilde r$より右側の範囲にある最大の適合率で置き換える。

p_{interp}(r) = \max_{\tilde r \geq r}p(\tilde r)

Interpolated AP(補完適合率)

PASCAL VOC challengeにおいて、予測は$IoU \geq 0.5$のときPositiveになる。また、同じ物体に対して複数の検出がなされた場合、一番最初の検出をPositiveとし、残りをNegativeとする。

Pascal VOC2008では、11点の補完適合率の平均が計算された。

具体的には、まずrecallの値を0から1.0まで11点に分ける(0, 0.1, 0.2, ..., 0.9, 1.0)。

次に、これら11個のrecallの値に対してmaximum precision value(上の$p_{iterp}(r)$)の平均を計算する。

AP = \frac{1}{11} \sum_{r \in (0.0, \dots, 1.0)}AP_r \\
 = \frac{1}{11} \sum_{r \in (0.0, \dots, 1.0)}p_{iterp}(r) \\
 = \frac{1}{11} (AP_r(0) + AP_r(0.1) + \dots + AP_r(1.0))

$AP_r$が非常に小さい時、残りの項も0であるとみなせ、recallが100%になるまで予測をする必要がないということがわかる。

PASCAL VOCにはクラスが20個ありAPはそれぞれのクラスに対して計算され、これらの平均がmAPとして算出される。

この手法には問題点が2つある。

  1. あまり正確ではない
  2. 低いAPに対しての手法の違いを測れない

よってPASCAL VOCは2008年以降、異なるAPの計算手法が採用されている。

COCO mAP

最新の研究ではCOCO datasetに対する結果のみ示す傾向がある。

  • COCO mAPでは101点の補完適合率が計算に使われている。
  • 複数のIoUの閾値に関しての平均をAPとしている。
    • 例えばAP@[.5:.95]はステップサイズ0.05で0.5から0.95までのIoUのAPの平均をとっている。

上の図の$AP_{75}$はIoU=0.75でのAPを表す。

mAPはAPの平均である。ある文脈では各クラスのAPを計算し、それらを平均する。しかし他の文脈ではAPとmAPは同じ場合もある。

参考

mAP (mean Average Precision) for Object Detection

http://www.cse.kyoto-su.ac.jp/~g0846020/keywords/keywordsTop.html

tmtakashi_dist
音響、機械学習、Webを勉強しています。
https://tmtakashi.github.io/myportfolio/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした