一、前言
mAP是目標檢測模型中常用的評價指標,它的英文全稱是(Mean Average Precision),翻譯過來就是平均精確率的平均。
首先我們需要知道精確率(Precision)和召回率(Recall),也稱爲查準率和查全率的定義
Precision衡量你的預測有多準確。也就是說,你的預測正確的百分比。
Recall衡量您發現所有正例的能力。 例如,我們可以在前K個預測中找到80%的正例。
下面是它們的數學定義:
如果對此不太清楚,具體介紹請看精確率和召回率的介紹。
接下來我們需要知道交併比IoU(Intersection over union)
IoU度量兩個邊界之間的重疊。我們使用它來度量我們的預測邊界與ground truth(實際對象邊界)的重疊程度。在一些數據集中,我們預先定義了一個IoU閾值(比如0.5)來分類預測是真陽性還是假陽性。
二、AP(Average Precision)
1.AP的定義及計算
首先介紹的是最簡單的AP的一般化定義和計算。我們通過舉例說明,在本例中,整個數據集僅包含5個蘋果。我們收集了所有圖片中所有對蘋果的預測,並根據預測的置信度按降序排列。第二列表示預測是否正確。在本例中,如果,則預測是正確的。
這裏略加解釋一下,以SSD模型爲例,輸入一張圖片進行預測,模型最後的輸出的形狀是(錨框數,6),6代表着每個錨框對應的類別標籤+置信度+錨框的四個座標。
上表數據集當中只有5個蘋果,但是在對數據集的預測過程中,一共得到了10個類別標籤是蘋果的錨框。那麼我們我們怎麼去獲取該錨框的真實label,或稱真實值,也就是它實際上是不是一個蘋果?
方法是計算模型預測出來的錨框和人工標註的錨框(我們稱之爲Groud truth,真實值)的交併比,如果交併比超過0.5,那麼認爲該預測是正確的,即實際上該錨框框起來的是一個蘋果。但是在實際預測當中,經常會出現多個預測錨框跟同一個GT(Groud Truth)的IoU值都大於0.5, 這個時候只將這些預測框中置信度最大的算是一個蘋果,其他不算蘋果。
上面的過程是獲取錨框的真實label,因爲目標檢測和普通的分類任務不一樣,錨框是模型生成的,而非人工輸入,我們只有一個groud truth,所以只能用groud truth去獲取錨框的真實label。
接下來就是錨框的預測值,上面我們得到了10個錨框,它們都說自己是蘋果,但是我們知道置信度很低我們很難相信它就是一個蘋果,所以需要設定一個閾值,大於等於該閾值的我們把該錨框設爲是蘋果,低於該閾值的我們把該錨框設爲不是蘋果。(模型的目的是生成一些預測值高的錨框,同時它們確實是該類別的錨框,也就是跟GT的交併比很高)。
然後回到上面關於蘋果那張表,首先我們把閾值就設定爲rank1的置信度,會得到下面這張表:
Rank | 預測值 | 真實值 |
---|---|---|
1 | 是蘋果 | 是蘋果 |
2 | 不是蘋果 | 是蘋果 |
3 | 不是蘋果 | 不是蘋果 |
4 | 不是蘋果 | 不是蘋果 |
5 | 不是蘋果 | 不是蘋果 |
6 | 不是蘋果 | 是蘋果 |
7 | 不是蘋果 | 是蘋果 |
8 | 不是蘋果 | 不是蘋果 |
9 | 不是蘋果 | 不是蘋果 |
10 | 不是蘋果 | 是蘋果 |
這裏TP+FP=計算集合的大小,FN=整個數據集中沒有被識別出來的Groud Truth。
同理,我們可以計算包括了rank1,rank2,rank3的集合的PR值。
於是通過計算每一步,我們得到了下面的PR曲線。
平均精度(AP)的廣義定義是找到上面的PR曲線下的面積。
精確度和召回率總是在0到1之間。因此,AP也在0和1之間。在計算用於目標檢測的AP之前,我們通常先將鋸齒狀的圖形平滑化。
從圖上看,在每個召回率上,我們將它的精確率替換爲該召回率右側的所有召回率對應的精確率的最大值。因此,橙色的線被轉換成綠色的線,曲線會單調地減少,而不是之字形。這時因爲一般來講PR曲線的變化情形都是下面這樣的,進行平滑是爲了讓其符合一般化規律。
所以經過平滑後召回率r對應的精確率的修正是:
好了,到這裏我們就瞭解了最一般化的AP值的計算方式,就是求PR曲線跟兩座標軸圍起來的面積,我們稱之爲PR曲線下面積 PR-AUC(Area Under Curve)。但是去做這樣的積分是很難的,因爲我們只能得到離散的點,所以只能通過離散的點去擬合AUC。下面介紹幾種擬合的方法。
2.Interpolated AP 插值AP
在Pascal VOC2008中,計算的是11點插值AP。(注:PASCAL VOC是一個流行的對象檢測數據集)
首先,我們將0到1.0的召回值分爲11個點:0、0.1、0.2、…、0.9和1.0。接下來,我們計算這11個召回值的最大精度值的平均值。
在我們的示例中,AP =(5×1.0 + 4×0.57 + 2×0.5)/ 11
以下是更精確的數學定義。
我們看到實際上11點插值法求AP就是在進行了平滑的PR曲線上取十一個點,求平均值,這跟實際我們想要求的AUC很接近了。如果求進行了平滑的PR曲線的AUC的話,應該是
這個上式上面的AP值很接近。
然而,這種插值方法是一種近似值,它存在兩個問題。
第一、它不那麼精確,上面的例子之所以感覺衡量的挺好是因爲例子中的召回率的離散值只有五個,PR曲線的褶皺最多隻有五個。我們取11個點來計算面積效果是好的,但是當召回率離散值的數量遠大於11時(現實情況往往如此),褶皺也大於11時,用11個點擬合的面積和真實情況下的面積就差很多,精確性就下降。從另外一個角度講,AP可理解成不同召回率的情況下所有精確率的平均值,當召回率的離散值個數遠大於11時,這時11個點的平均精確率無法代表所有召回值的平均精確率。
其次,它失去了測量低AP方法差異的能力,該缺點也是由低精確率引發的。
因此,2008年以後,PASCAL VOC採用了不同的AP計算方法。
3.VOC2010-2012中AP的計算方法
相對於11點採樣,在後來的Pascal VOC競賽中,AP的計算更接近AUC。
該方法中,AP的計算公式爲:
AP其實是衡量所有召回率下的平均精確率。而PR-AUC正是所有召回率下的平均精確率。
在11點插值AP當中,是用10個長爲0.1,寬爲來擬合該面積。
爲了提高精確性,在新的計算方式中,使用m個長度爲,寬爲來擬合該面積,這裏m是召回率離散值的數量。
因爲在現實情況中,所以後者的計算更精確,更接近AUC。
注意到,這裏一共是有m個矩形。m是召回率的數量,其實也是數據集中所有正例的數量。因爲召回率就是目前獲得的TP/數據集中的所有正例,它的取值就是1/m,2/m,一直到m/m。
此時每個矩形的長都是1/m,所以求曲線下面積就是把每個召回率r對應的加起來,再除以m。下面給出一個例子。
看到第六行這裏,,它實際上對應的,但修正後的,因爲它右邊的對應的比大。然後把第四列的所有p®值加起來再除以20,即可得到最終的AP值。
三、mAP
最後到我們開始談論的mAP,上面我們計算的AP都是針對一個類別而言的,如蘋果,當我們把所有類別的AP都計算出來後,再對它們求平均值,即可得到mAP。
四、總結
1.爲什麼要用AP或者mAP
我們希望一個模型的Precision和Recall都很高,所以需要綜合考慮這兩個因素,我們可以聯想到用調和平均數F1-beta值來衡量,另一種方法正是PR曲線下的面積AUC,這也就是AP。AUC面積越接近1性能越好。曲線下的面積理解爲不同召回值的情況下所有精度的平均值。
五、參考文獻
【1】https://medium.com/@jonathan_hui/map-mean-average-precision-for-object-detection-45c121a31173
【2】http://blog.sina.com.cn/s/blog_9db078090102whzw.html
【3】https://zhuanlan.zhihu.com/p/107989173?from_voters_page=true