この Tensorflow検出モデルZoo では、さまざまな検出アーキテクチャに対するCOCOmApスコアについて言及しています。彼らはまた、mApスコアが高いほど精度が高いと述べています。わからないのはこれがどのように計算されるのか?それが持つことができる最大スコアは何ですか?このmApスコアがデータセットごとに異なるのはなぜですか?
MAP(平均精度)を理解するために、最初にAP(平均精度)から始めます。
花の画像を検索していて、画像検索システムにバラのサンプル画像を提供するとします(クエリ)。ランク付けされた画像の束が返されます(最も可能性が高いものから最も低いものまで)。通常、それらのすべてが正しいわけではありません。そのため、正しく返されたすべての画像の精度を計算してから、平均を取ります。
例:
返された結果が
1, 0, 0, 1, 1, 1
であり、1
が花の画像であり、0
がそうでない場合、すべての正しいポイントでの精度は次のようになります。
Precision at each correct image = 1/1, 0, 0, 2/4, 3/5, 4/6
Summation of these precisions = 83/30
Average Precision = (Precision summation)/(total correct images) = 83/120
サイドノート:
このセクションでは、上記の分数でまだ混乱している場合に備えて、正しい各画像での精度の計算の背後にある詳細な説明を提供します。
説明のために、1, 0, 0, 1, 1, 1
を配列に格納して、results[0] = 1
、results[1] = 0
などにします。
totalCorrectImages = 0, totalImagesSeen = 0, pointPrecision = 0
pointPrecision
の式はtotalCorrectImages / totalImagesSeen
です。
results[0], totalCorrectImages = 1, totalImagesSeen = 1
で、したがってpointPrecision = 1
results[1] != 1
なので無視しますが、totalImagesSeen = 2 && totalCorrectImages = 1
results[2] != 1
なので、totalImagesSeen = 3 && totalCorrectImages = 1
results[3], totalCorrectImages = 2, totalImagesSeen = 4
で、したがってpointPrecision = 2/4
results[4], totalCorrectImages = 3, totalImagesSeen = 5
で、したがってpointPrecision = 3/5
results[5], totalCorrectImages = 4, totalImagesSeen = 6
で、したがってpointPrecision = 4/6
解釈する簡単な方法は、必要なAPを提供する0と1の組み合わせを生成することです。たとえば、APが0.5の場合、1つおきの画像が正しい
0, 1, 0, 1, 0, 1, ...
のような結果になり、0.333
のAPの場合は3つおきの画像が正しい0, 0, 1, 0, 0, 1, 0, 0, 1, ...
になります。
0.1
のAPの場合、10枚ごとの画像が正しくなります。これは間違いなく悪い検索システムです。一方、0.5
を超えるAPの場合、上位の結果で間違っているよりも正しい画像が表示されます。これは間違いなく良い兆候です。
MAPはAPの単なる拡張です。特定の数のクエリについて、すべてのAPスコアの平均をとるだけです。上記のAPスコアの解釈は、MAPにも当てはまります。 MAPの範囲は0〜100で、高いほど良いです。
ウィキペディア のAP式
ウィキペディア のMAP式
これへのクレジット ブログ
編集I:
オブジェクトの検出に関しても同じ概念が適用されます。このシナリオでは、各クラスのAPを計算します。これは、特定のクラスの適合率-再現率曲線の下の領域によって与えられます。この時点から、mAPを達成するための平均を見つけます。
詳細については、 2012 Pascal VOC Dev Kit のセクション3.4.1および4.4を参照してください。関連する論文を見つけることができます ここ 。