前言
指標很重要,合適的指標更是重中之重。mean Average Precision, mAP是常見的評估機器學習模型性能的指標,其在物體檢測任務中也有着廣泛地應用,是諸多Object Detection任務的主要評估指標,本文總結一些關於mAP的理解。如有謬誤,請聯繫指出,本文參考[1,2]。
注: mAP或者AP在物體檢測和信息檢索中,其定義有所不同,本文特定在物體檢測場景中的定義。
精準率和召回率
我們在[3]一文中介紹過一些常見的評估指標,其中就包括了精準率(precision)和召回率(recall),這裏簡單回顧下。這兩個指標一般都是用在二分類問題,也就是隻有兩個類別需要預測,分別稱之爲正類(positive)或者負類(Negative),如果一個模型將真實標籤爲正類的樣本預測爲正類,那麼稱之爲TP,True Positive,如果將其預測爲負類,那麼稱之爲FN,False Negative;如果一個模型將真實標籤爲負類的樣本預測爲正類,那麼稱之爲FP,False Positive,如果將其預測爲負類,那麼稱之爲TN,True Negative。那麼這樣就遍歷了二分類中的所有可能情況。那麼我們接下來定義精準率和召回率,數學形式如:
其中,精準率的含義是:預測爲正類並且預測正確的樣本,佔整個預測爲正類樣本(包括預測正確和錯誤)的比例,召回率的含義是:預測爲正類且預測正確的樣本,佔整個數據集中真實標籤爲正類的比例。精準率高代表模型預測百發百中,可靠性高;召回率高表示模型不會漏了數據集中的任何一個正類。
爲什麼要引入這兩種指標呢,我們舉個例子,加入一個圖片中有10個蘋果需要被模型檢測出來,而模型只是檢測出來了其中的5個,並且都檢測對了,那麼如果單從精準率來看,這個模型的確靠譜,但是其漏掉了5個蘋果目標的檢測,這個在某些應用場景中可能就不那麼可靠了,因此我們通常需要綜合精準率和召回率來去考慮一個模型是否是靠譜的。精準率和召回率的計算可視化見Fig 1.1。
當然,考慮結合這兩種指標有很多方式,最簡單的可以考慮這兩個指標的調和平均數,這樣我們得到了F1指標,定義爲:
然而這個指標對於物體檢測來說還是過於粗糙了,比如雖然模型對於某些物體判斷類別的確錯了(也就是Top 1雖然錯了),但是其Top K可能能涵蓋我們的目標物體類別,而F1指標並沒有考慮到這種對檢測結果排序,因此對於模型的評估粒度太粗糙。我們爲了更加綜合地考慮,引入了Average Precision,AP的概念,這個也就是我們本文的重點。
注: AP的定義不止一個,我們接下來會介紹好幾類型的AP,要視不同的場景進行應用。
Average Precision
不過說到底,AP是在二分類任務中定義的,而物體檢測,我們需要對物體的圖片空間位置和物體類別進行檢測分類,乍看一下不像是一個二分類任務,那麼我們需要對其進行一定的演化。給定一個訓練樣本,我們會有其樣本中的物體檢測框的位置(我們稱之爲Ground Truth)和物體的類別信息,那麼對於一個模型的檢測輸出結果來說,其和Ground Truth之間會存在一定的重合,如圖Fig 1.2所示。我們可以求出檢測輸出結果和其Ground Truth的重合大小,我們把這個重合大小定義爲IoU (Intersection of Union),具體見Fig 1.3所示,其計算很簡單。
由此,我們可以定義TP,FP,FN了。
- TP,True Positive: 當時我們把預測稱之爲TP,其中是一個從0到1的閾值。如下圖所示。
- FP,False Positive: 當,或者出現多個重複的檢測框時,我們稱之爲FP。IoU小於閾值或者甚至我們都容易理解,但是出現重複檢測框,我們可以參考下圖中的中間圖,我們多個檢測框都包含了同一個物體,這種情況下,我們只計算其中某一個的檢測框,而其他的計算爲FP(通常這種情況下用非極大抑制進行排除)。
- FN, False Negative: FN同樣有兩種情況,第一是壓根就沒有對某個物體的檢測框,如下圖所示。
第二種情況是,雖然有檢測框而且,但是對其檢測框的分類卻錯了,這個時候同樣計爲FN。如下圖所示,把人誤認爲了馬。
那麼對於某個給定的類別(比如檢測圖像中的人),我們就可以通過TP,FP,FN去計算精準率和召回率了。我們接下來給出Average Precision的定義,不過在此之前,我們用一個簡單的例子去進行導出這個概念。
假定我們對一個圖像上的五個蘋果進行物體檢測,我們把閾值固定下來,然後對每個模型輸出的檢測框的類別可靠性(也就是模型輸出的概率值,比如softmax層輸出的概率值,具體要根據模型的特點指定)進行降序(也就是可靠性高的排前面),那麼我們就有了以下的表:
其中第二列表示這個模型輸出檢測框是否,符合條件的稱之爲預測正確,否則是錯誤。第三列表示精準率,第四列爲召回率,以第三行的結果爲例子,我們考慮在第三行之前一共有三個檢測結果,而正確了兩個,那麼其精準率爲,我們一共有五個蘋果,只檢測出來了2個,那麼召回率爲。根據這個簡單策略,我們一直計算這個表格,直到召回率出現1.0爲止(不難發現,召回率是單調遞增的,而精準率則是呈現出“之”字型的結構)。我們以召回率爲橫軸,精準率爲縱軸,繪製出曲線,稱之爲Precision-Recall曲線,簡稱爲PR曲線,如:
那麼,通常來說,我們的廣義AP(General Average Precision)定義爲這個曲線的曲線下面積,數學形式爲:
考慮到離散形式,積分形式變成求和:
因爲召回率和精準率都是0到1的值,因此AP也是0到1的值。考慮到我們這只是對某個類(比如人)進行的AP計算,如果考慮到整個數據集中的所有類別(比如人,馬,狗等等),分別對每個類別求AP,然後進行平均,我們就得到了mAP(mean Average Precision)。
Interpolated Average Precision
然而,在應用中,我們經常會對這個“之”字形的曲線進行平滑,爲的是避免因爲排序結果的細微變化帶來的AP的值的變化,爲的是更魯棒的AP結果。那麼這個平滑其實也很簡單,如Fig 3.1所示。我們取出某段曲線最右邊的最大精準率作爲之前(比如0.4-0.8段)的代表值,得到了一個遞減的綠色曲線C。這個描述過於模糊,我們用數學形式表示如:
對PR曲線進行平滑只是第一步,我們還會對這個平滑後的曲線進行插值採樣,比如在Pascal VOC 2008數據集上,我們對平滑PR曲線取了11個插值點(如下圖的紅點所示),然後我們再通過這些插值點計算AP,如:
更正規的表達如:
然而,這種策略有些缺陷,比如
- 其簡化計算的前提是缺失了原先的精度。其是對實際PR曲線的模擬近似。
- 對於某些問題,不同方法的AP可能都很小,如果用這種AP計算方式,很可能會忽略掉本應該注意的小範圍AP值。
因此,在2008年之後的Pascal VOC比賽,其採取了不同的AP計算方式。
Average Precision,計算AUC曲線下的面積
在2008年之後的VOC比賽,比如VOC2010-2012,對AP的計算方式進行了改變。此時的AP只是計算平滑後曲線的曲線下面積,如Fig 4.1所示。此時不需要任何的插值操作了。公式如:
這個定義又被稱之爲AUC,Area Under Curve。
Reference
[1]. https://medium.com/@jonathan_hui/map-mean-average-precision-for-object-detection-45c121a31173
[2]. https://towardsdatascience.com/breaking-down-mean-average-precision-map-ae462f623a52
[3]. https://blog.csdn.net/LoseInVain/article/details/78109029