オブジェクト検出の平均精度


8

APやmAPの値をどのように計算できるかについてはかなり混乱しています。特に、オブジェクト検出のためにAP / mAP値を取得したいと考えています。

私が確実に知っているのは、

リコール= TP /(TP + FN)、精度= TP /(TP + FP)

たとえば、評価するクラスが1つだけで、500のテスト画像があるとします。各テスト画像には異なる数の予測(境界ボックス提案)が含まれる場合がありますが、各画像には1つのグラウンドトゥルース境界ボックスしかありません。

画像1:[クラス、確率、x1、y1、x2、y2]、[クラス、確率、x3、y3、x4、y4]、[クラス、確率、x5、y5、x6、y6]、[クラス、確率、 x7、y7、x8、y8]、...

画像2:[クラス、確率、x1、y1、x2、y2]、[クラス、確率、x3、y3、x4、y4]、...

。。。(等々)

*ほんの一例で、私はこれを作りました

TPを取得するには、各予測のIOUを見つけて、選択したしきい値(0.5など)を超えるものをカウントする必要があることを知っています(しきい値を超えるIOUを持つ複数の予測がある場合、1回だけカウントして他を処理しますか? FPとして?)

これは私を困惑させるところです:

  1. TP + FP =各画像に対して行われた予測の数でしょうか?

  2. すべてのテスト画像にネガがないため、TP + FN = 500?

  3. 画像ごと、またはクラスごとに計算されますか?

  4. 私の例に基づいてAP / mAPを取得するためのステップバイステップガイドを誰かに教えてもらえますか?最も曖昧な部分は、画像ごとに行うのか、クラスごとに行うのか(つまり、一度に500枚の画像を処理する場合)です。

私が見つけたほとんどのガイド/論文は、情報検索を対象としています。これでいくつかの助けをいただければ幸いです。

*注:一部のカスタムデータセットでテストしています。PASCAL VOCにはそれを行うためのコードがいくつかあることは知っていますが、自分のデータに合わせてカスタマイズしたコードを自分で記述したいと思っています。


私のgithubリポジトリには、IOU、Precision、Recall、Average Precision、およびmAPの説明があります。また、オブジェクト検出器を評価するコードもあります。
Rafael Padilla

回答:


7

受け入れられた答えは、mAPを計算する間違った方法を指示していると思います。なぜなら、どのクラスでも、APは平均的な製品だからです。私の答えにはIOUの解釈を含めますので、初心者はそれを理解するのが難しいでしょう。

オブジェクト検出の特定のタスクでは、参加者は各クラスの信頼度(予測確率)を含む境界ボックスのリストを送信します。有効な検出と見なされるには、予測される境界ボックスと地面の真の境界間のオーバーラップ領域の全領域に対する割合が0.5を超える必要があります。対応する式は次のようになります: BのPのB T A O = A R E A B 、PB Taobpbt

ao=Area(bpbt)Area(bpbt)

有効な予測バウンディングボックスのリストを選別した後、各クラスを2クラスの問題として個別に評価します。したがって、「人間」クラスの典型的な評価プロセスの場合。最初にこれらのバウンディングボックスを次のようにリストします。MMM

オブジェクトのインデックス、信頼度、グラウンドトゥルース

境界ボックス1、0.8、1

境界ボックス1、0.7、1

バウンディングボックス2、0.1、0

境界ボックス3、0.9、1

次に、信頼度の高い順にランク付けする必要があります。その後、通常どおりにPR曲線を計算し、これらの11点の再現率が[0、0.1、...、1]に等しい11の補間精度結果を計算する必要があります(詳細な計算方法はここにあります)。単一のバウンディングボックス(私の例ではバウンディングボックス1)を複数検出する場合、最大で1回、他のすべてはFalseとしてカウントされます。次に、20のクラスを反復処理し、それらの平均を計算します。次に、mAPを取得します。

また、今のところ、この方法を少しひねってmAPを見つけます。再現の10の破壊点を使用する代わりに、特定のクラスの真の数Kを使用して、補間された精度を計算します。つまり、[0,1 / K、2 / K ...]



6

これは、PASCOL-VOC 2012およびMS-COCOが次のようにmAP、疑似コードを計算する方法です。

For each single class of object,

iterate through entire list of predictions for all images

TP = [0] * number of predictions
NP = [0] * number of predictions

for i, prediction in enumerate(predictions): # sorted by prediction confidence, descended

    try to find the ground truth with same class and largest IoU:

        if IoU > threshold(0.5 in PASCOL VOC 2012)

            if ground truth has not been assigned yet:

                assign this ground truth to the prediction
                TP[i] = 1      

        else: # corresponding ground truth has been assigned or IoU < threshold
            FP[i] = 1

    not find:
        FP[i] = 1

then calculate FN = number of unassigned ground truth

Precision = TP/(TP+FP)
Recall = TP/(TP+FN)

APを取得するには、まずPR曲線を滑らかにし、次に曲線の下の面積を計算します。mAPを取得するには、すべてのクラスについて上記の手順を繰り返し、それらを平均します。

参照:

PASCOL VOC 2012評価指標のPythonバージョン:https : //github.com/Cartucho/mAP

元のPASCOL VOC 2012ツールキット(MATLAB):https : //github.com/Cartucho/mAP

元のMSCOCO:http ://cocodataset.org/#detection-eval


予測されたボックスが2つのグラウンドトゥルースオブジェクトと重なっている場合、どのオブジェクトについて重複をテストしますか?
好奇心が

1
AP = TP/(TP+FP)間違っている。代わりに、Precision = TP/(TP+FP)
フランクDernoncourt

これは完全に誤りです。平均精度ではなく、このように計算されます。medium.com/@jonathan_hui/...
おさるの

3

ビクターラヴレンコの「評価12:平均平均精度」の講義には、ドキュメント検索の場合の平均精度(AP)と平均平均精度(mAP)が非常に明確に説明するスライドが含まれています。

ここに画像の説明を入力してください

スライドをオブジェクト検出に適用するには:関連ドキュメント= IoUが特定のしきい値(通常0.5)以上の予測境界ボックス。

IoU =ユニオン上の交差、視覚的な定義については以下の画像を参照してください:

ここに画像の説明を入力してください

実際の画像でのIoU計算の例:

ここに画像の説明を入力してください

画像ソース

FYI:平均平均精度と平均相互順位


0

@ User1915は自分で答えを見つけましたが、興味のある人のために残したいと思います。

上記の質問に対する私の答えは次のとおりです。

Q1:TP + FP =各画像に対して行われた予測の数はどうなりますか?

はい。(TPの数は限られているため、予測が多ければ多いほど、精度が低くなります。

Q2:すべてのテスト画像にネガがないため、TP + FN = 500?

はい。(画像ごとにグラウンドトゥルースボックスが1つしかないため

Q3:画像ごと、またはクラスごとに計算されますか?

クラスごと。

Q4:私の例に基づいてAP / mAPを取得するためのステップバイステップガイドを誰かに教えてもらえますか?最も曖昧な部分は、画像ごとに行うのか、クラスごとに行うのか(つまり、一度に500枚の画像を処理する場合)です。

上記の@ User1915の投稿を参照してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.