目標檢測中對mAP的理解

版權聲明:本文爲CSDN博主「飯後吃西瓜」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/hsqyc/article/details/81702437
—————————————————————————————————

我們在評價一個目標檢測算法的“好壞”程度的時候,往往採用的是pascal voc 2012的評價標準mAP。

網上一些資料博客參差不齊,缺乏直觀易懂的正確說明。希望這篇博文能夠給大家一點幫助。

 

mAP歷史

目標檢測的mAP計算方式在2010年的voc上發生過變化,目前基本都是採用新的mAP評價標準。(我有個小疑問就是明明是2010年修改的,但是貌似現在大家都稱這種計算方式爲2012)所以你查到的有一些博客上記錄的是之前的mAP評價標準。

但是,知乎上有一個回答,是完全錯誤的。而且很多評論已經指出來了,但是回答者一直沒有修改。這個回答也曾經誤導過我。目標檢測中的mAP是什麼含義? - 許博雅的回答 - 知乎 https://www.zhihu.com/question/53405779/answer/382974995

下面也放出官方論文裏的定義,但是我光看這個感覺還是有點抽象

The computation of the average precision (AP) measure was changed in 2010 to improve precision and ability to measure differences between methods with low AP. It is computed as follows:

1. Compute a version of the measured precision/recall curve with precision monotonically decreasing, by setting the precision for recall r to the maximum precision obtained for any recall r′ ≥ r.

2. Compute the AP as the area under this curve by numerical integration. No approximation is involved since the curve is piecewise constant.

Note that prior to 2010 the AP is computed by sampling the monotonically

decreasing curve at a fixed set of uniformly-spaced recall values 0, 0.1, 0.2, . . . , 1. By contrast, VOC2010–2012 effectively samples the curve at all unique recall values.

準備知識(爲新人準備)

1.IOU的概念

IOU的概念應該比較簡單,就是衡量監測框和標籤框的重合程度。一張圖就能解釋,做目標檢測小夥伴應該都清楚,我這裏不贅述。

 

2.TP TN FP FN的概念

T或者N代表的是該樣本是否被分類分對,P或者N代表的是該樣本被分爲什麼

TP(True Positives)意思我們倒着來翻譯就是“被分爲正樣本,並且分對了”,TN(True Negatives)意思是“被分爲負樣本,而且分對了”,FP(False Positives)意思是“被分爲正樣本,但是分錯了”,FN(False Negatives)意思是“被分爲負樣本,但是分錯了”。

按下圖來解釋,左半矩形是正樣本,右半矩形是負樣本。一個2分類器,在圖上畫了個圓,分類器認爲圓內是正樣本,圓外是負樣本。那麼左半圓分類器認爲是正樣本,同時它確實是正樣本,那麼就是“被分爲正樣本,並且分對了”即TP,左半矩形扣除左半圓的部分就是分類器認爲它是負樣本,但是它本身卻是正樣本,就是“被分爲負樣本,但是分錯了”即FN。右半圓分類器認爲它是正樣本,但是本身卻是負樣本,那麼就是“被分爲正樣本,但是分錯了”即FP。右半矩形扣除右半圓的部分就是分類器認爲它是負樣本,同時它本身確實是負樣本,那麼就是“被分爲負樣本,而且分對了”即TN

 

3.Precision(精度)和Recall(召回率)的概念

有了上面TP TN FP FN的概念,這個Precision和Recall的概念一張圖就能說明。

Precision =\frac{TP}{TP+FP},翻譯成中文就是“分類器認爲是正類並且確實是正類的部分佔所有分類器認爲是正類的比例”,衡量的是一個分類器分出來的正類的確是正類的概率。兩種極端情況就是,如果精度是100%,就代表所有分類器分出來的正類確實都是正類。如果精度是0%,就代表分類器分出來的正類沒一個是正類。光是精度還不能衡量分類器的好壞程度,比如50個正樣本和50個負樣本,我的分類器把49個正樣本和50個負樣本都分爲負樣本,剩下一個正樣本分爲正樣本,這樣我的精度也是100%,但是傻子也知道這個分類器很垃圾。

Recall =\frac{TP}{TP+FN},翻譯成中文就是“分類器認爲是正類並且確實是正類的部分佔所有確實是正類的比例”,衡量的是一個分類能把所有的正類都找出來的能力。兩種極端情況,如果召回率是100%,就代表所有的正類都被分類器分爲正類。如果召回率是0%,就代表沒一個正類被分爲正類。

 

舉例計算mAP

有3張圖如下,要求算法找出face。藍色框代表標籤label,綠色框代表算法給出的結果pre,旁邊的紅色小字代表置信度。設定第一張圖的檢出框叫pre1,第一張的標籤框叫label1。第二張、第三張同理。

1.根據IOU計算TP,FP

首先我們計算每張圖的pre和label的IOU,根據IOU是否大於0.5來判斷該pre是屬於TP還是屬於FP。顯而易見,pre1是TP,pre2是FP,pre3是TP。

 

2.排序

根據每個pre的置信度進行從高到低排序,這裏pre1、pre2、pre3置信度剛好就是從高到低。

3.在不同置信度閾值下獲得Precision和Recall

首先,設置閾值爲0.9,無視所有小於0.9的pre。那麼檢測器檢出的所有框pre即TP+FP=1,並且pre1是TP,那麼Precision=1/1。因爲所有的label=3,所以Recall=1/3。這樣就得到一組P、R值。

然後,設置閾值爲0.8,無視所有小於0.8的pre。那麼檢測器檢出的所有框pre即TP+FP=2,因爲pre1是TP,pre2是FP,那麼Precision=1/2=0.5。因爲所有的label=3,所以Recall=1/3=0.33。這樣就又得到一組P、R值。

再然後,設置閾值爲0.7,無視所有小於0.7的pre。那麼檢測器檢出的所有框pre即TP+FP=3,因爲pre1是TP,pre2是FP,pre3是TP,那麼Precision=2/3=0.67。因爲所有的label=3,所以Recall=2/3=0.67。這樣就又得到一組P、R值。

4.繪製PR曲線並計算AP值

根據上面3組PR值繪製PR曲線如下。然後每個“峯值點”往左畫一條線段直到與上一個峯值點的垂直線相交。這樣畫出來的紅色線段與座標軸圍起來的面積就是AP值。

在這裏AP=1*0.33+0.67*0.33\approx 0.55

5.計算mAP

AP衡量的是對一個類檢測好壞,mAP就是對多個類的檢測好壞。就是簡單粗暴的把所有類的AP值取平均就好了。比如有兩類,類A的AP值是0.5,類B的AP值是0.2,那麼mAP=(0.5+0.2)/2=0.35

 

Github

在這裏提供一個計算mAP的github地址,上面那張AP圖就是它生成的。我覺得還蠻好用的。但是不知道爲什麼star有點少。。。

https://github.com/Cartucho/mAP

 

—————————————————————————————————
總結: 首先理解了iou和置信度,這連個概念是完全不同的。
iou用來決定TP,FP, TN,FN等值,比如一般取iou>0.5爲TP,<0.5爲FP,FN表示沒有檢測到的GT的數量,TP+FN則爲實際的正例樣本個數。
置信度閾值p則表示,當預測閾值>p值時,才考慮計算TP、FP等指標,否則不予考慮計算,所以當閾值不同時,計算的指標precison與recall指標有所不同。Ap指標簡單來說就是在不同recall下計算R-P曲線的面積的均值,mAp則爲多個類Ap指標的均值。

iou閾值和置信度閾值的改變都會使precision和recall產生相應的變化,由此可以求出mAP的值。

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