關於目標檢測mAP的思考

之前看了YOLOV4的源碼,發現並沒有提供對驗證集mAP的計算,所以想先去了解一下目標檢測mAP的知識,如果能力允許,打算手撕一個mAP的代碼,下面就簡單介紹一下我對目標檢測中mAP的理解以及思考。

1 mAP

在談到目標檢測之前,我們首先需要知道目標檢測的任務以及最終的輸出結果是什麼。假設ground truth有兩類dog, cat,檢測器需要做的就是定位dog和cat在圖片中的位置(bbox)以及每個bbox的種類(定位+檢測)。檢測器的輸出形式就是下圖所示的方式,每個bbox上面都有對應的名稱以及它的置信度(比如dog 0.8)。

爲了衡量檢測器的效果,我們需要給檢測器提供一個指標,這個指標就是mAP。它能夠衡量檢測器在不同置信度下,對gt的所有種類檢測的準確度。那到底什麼是mAP呢?

mAP 英文名是mean Average Precision。雖然只有簡單的三個單詞,但是卻有複雜的三層含義。

(a)Precision: 它是衡量一個檢測器檢測某一類物體的準確度。

(b)Average Precision: 它衡量的是在不同置信度(probability)下,一個檢測器檢測某一個物體的準確度。

(c)mean Average Precision: 它衡量的在不同置信度下,一個檢測器檢測所有物體(ground truth所提供的所有物體)的準確度。

我們理解mAP也會從這三個層次由淺入深的進行理解。

(a)假設我們要求檢測器對dog的檢測效果,也就是要求檢測器對dog的Precision。但是檢測器在輸出結果的時候同時也會輸出一個置信度,這表示bbox框定dog的可能性。每個bbox的置信度都是不同的,那我們要如何取捨,還是說全部保留統一進行計算精度?我們通常會設置一個置信度閾值(threshhold),保留置信度較大的bbox,然後求不同置信度下Precison。

舉例來說,檢測器對dog的檢測效果如下。從檢測效果可以看到,檢測器對不同的dog檢測的置信度是不同的,有0.2的置信度,也有0.8的置信度。顯然那些置信度較小的說明bbox是dog的可能性比較低,我們要設置一個閾值(假設thresh = 0.5)將其排除;但是在閾值之上仍有不同的置信度,0.8和0.6等等,這些不同置信度對應的Precision該如何處理?我們不能將不同置信度的所檢測Precision相提並論,因爲這對置信度高的顯然不公平(這就像學期末不同成績的同學都有相同的獎學金一樣)。因此我們需要計算閾值之上,不同置信度的Precision。

(b)求不同閾值之上,不同置信度的Precision就是Average Precision。但是,目標檢測中檢測的物體肯定不止是一個,上面我們只衡量了檢測器對某一類物體(比如dog)的檢測效果,但是並沒有衡量檢測器對cat的檢測效果。如何衡量檢測器對不同物體的檢測效果呢?如法炮製,我們可以求檢測器對不同物體的Average Precisioin的平均值,這其實就是mean Average Precision。

2 AP

(1)要求mAP,本質上就是求檢測器檢測某類的AP值,關鍵來了,怎麼求AP值?說到這,就要簡單介紹一下混淆矩陣以及Precision和Recall。參考了這位大哥的博客。

(a)True Positive(TP): 就是指一個ground truth被正確的框定出來了,並且IOU \geqslant threshold

(b)False Positive(FP):就是指一個ground truth被框定出來了,但是IOU < threshold

(c)False Negative(FN):就是指一個ground truth並沒被框定出來,檢測器將其當作爲負樣本或者是背景。

(d)Ture Negative(TN):就是指將一個ground truth框定出來了,當時將其當做爲另外一個類別了(在這是並不適用,因爲我們一次只求一個類別的AP;再者求AP的時候,也用不到TN)

(2)Precision和Recall公式

 

3 實戰

說了這麼多廢話,我們通過一個實戰項目來計算mAP吧。參考了這位大哥的博客。

總結一句話就是:置信度閾值(probability threshold)決定了哪些bbox是有效的,IOU閾值決定了哪些bbox是TP,FP,FN

(1)求dog的AP

假設圖中是某個檢測器的檢測結果,紅色的爲prediction,青色的爲ground truth,從左到右的IOU分別是0.9, 0.8和0.3。

(a)將所有物體的置信度有高到低進行排列:0.8, 0.7, 0.4。我們設置的置信度閾值爲0.5,此時就只有0.8和0.7兩個物體要進行AP計算。

(b)當置信度設置爲0.8時,通過NMS,得到的最終結果是這樣的。

此時,檢測器只檢測出一個dog。TP = 1, FP = 0, FN = 2。帶入公式得到,Precision = \frac{TP}{TP+FP} = \frac{1}{1+0} = 1, Recall = \frac{TP}{TP+FN} = \frac{1}{1+2} =\frac{1}{3}

(c)當置信度爲0.7的時候,通過NMS,得到的最終結果是這樣的。

此時,檢測器檢測出了兩個dog。TP = 2, FP = 0, FN = 1。帶入公式得到,Precision = \frac{TP}{TP+FP} = \frac{2}{2} = 1Recall = \frac{TP}{TP+FN} = \frac{2}{2+1} =\frac{2}{3}

然後將三組P,R進行相乘,就得到AP值。AP = 1*1/3 + 1*2/3 = 1。

(2)求cat的AP值

這個檢測器對cat的檢測效果如下:

(a) 將檢測到的物體的置信度由高到低進行排序:0.8, 0.7, 0.4。假設設置的置信度閾值時0.5,那麼需要進行計算的置信度就是0.8和0.7.

(b)當置信度爲0.8的時候,通過NMS,所得到的最終的效果是這樣的:

此時,TP = 1, FP = 0, FN = 2。通過公式計算得到:Precision = \frac{TP}{TP+FP} = \frac{1}{1+0} = 1Recall = \frac{TP}{TP+FN} = \frac{1}{1+2} = \frac{1}{3}

(c)當置信度爲0.7的時候,通過NMS,所得到的最終效果是這樣的:

此時,TP = 1, FP = 1, FN = 2。通過公式可以得到Precision = \frac{TP}{TP+FP} = \frac{1}{2}Recall = \frac{TP}{TP+FN} = \frac{1}{1+2} = \frac{1}{3}

計算AP = 1 * 1/3 + 1/2 * 1/3 = 1/2

(3)計算mAP

mAP = (AP_dog + AP_cat) / 2 = (1 + 1/2) /2 =3 / 4

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章