詳解object detection中的mAP

輕墨發表於2019-02-17

mAP是mean of Average Precision的縮寫,意思是平均精確度(average precision)的平均(mean),是object detection中模型效能的衡量標準。object detection中,因為有物體定位框,分類中的accuracy並不適用,因此才提出了object detection獨有的mAP指標,但這也導致mAP沒有分類中的accuracy那麼直觀。但也沒有那麼複雜,本文將詳細解釋mAP的計算方法。首先,簡單回顧幾個基礎概念。

查準率(Precision)和查全率(recall)

查準率(Precision)是指在所有預測為正例中真正例的比率,也即預測的準確性。 查全率(Recall)是指在所有正例中被正確預測的比率,也即預測正確的覆蓋率。 一個樣本模型預測按正確與否分類如下:

詳解object detection中的mAP

則,查準率和查全率計算公式:

詳解object detection中的mAP

交併比IoU(Intersection over union)

交併比IoU衡量的是兩個區域的重疊程度,是兩個區域重疊部分面積佔二者總面積(重疊部分只計算一次)的比例。如下圖,兩個矩形框的IoU是交叉面積(中間圖片紅色部分)與合併面積(右圖紅色部分)面積之比。

詳解object detection中的mAP

這裡需要注意的是IoU=0.5,並不意味著每個框剛好有50%與另外一個框交叉部分,而是每個框大約有2/3被交叉。有點反直覺。

我當初看到IoU,非常疑惑為啥不按交叉面積佔每個框的比例(也即IoA Intersection over Area)取大值計算重疊度,更符合直覺。其實這種演算法只反應小圖片的被遮蓋度,並不能反映互相之間的重疊度,一般情況下不可取。如下圖,橙色部分較小,IoA很大,但對於藍色部分,IoA就很小,只按橙色取IoA顯然有失偏駁。

詳解object detection中的mAP

單類別AP(Average Precision)的計算

物體檢測中的每一個預測結果包含兩部分,預測框(bounding box)和置信概率(Pc)。bounding box通常以矩形預測框的左上角和右下角的座標表示,即x_min, y_min, x_max, y_max,如下圖。置信概率Pc有兩層意思,一是所預測bounding box的類別,二是這個類別的置信概率,如下圖中的P_dog=0.88,代表預測綠色框為dog,並且置信概率為88%。

詳解object detection中的mAP

那麼,怎麼才叫預測正確呢?顯而易見的,必須滿足兩個條件:

  1. 類別正確且置信度大於一定閥值(P_threshold)
  2. 預測框與真實框(ground truth)的IoU大於一定閥值(IoU_threshold) 如下圖,假如P_threshold=0.6,IoU_threshold=0.5,則綠色框預測正確,記為True Positive。

詳解object detection中的mAP

而在衡量模型效能時,IoU_threshold先取一個定值,然後綜合考慮各種P_threshold取值時的效能,進而得到一個與P_threshold選定無關的模型效能衡量標準。

AP是計算單類別的模型平均準確度。

假如目標類別為Dog,測試了5張照片後,得到了Dog的10個預測結果,選定IoU_threshold=0.5,然後按confidence從高到低排序,如下(BB表示BoundingBox序號,IoU>=0.5時GT=1):

Rank | BB  | confidence | GT
----------------------------
1    | BB1 |  0.9       | 1
----------------------------
2    | BB2 |  0.8       | 1
----------------------------
3    | BB1 |  0.8       | 1
----------------------------
4    | BB3 |  0.5       | 0
----------------------------
5    | BB4 |  0.4       | 0
----------------------------
6    | BB5 |  0.4       | 1
----------------------------
7    | BB6 |  0.3       | 0
----------------------------
8    | BB7 |  0.2       | 0
----------------------------
9    | BB8 |  0.1       | 1
----------------------------
10   | BB9 |  0.1       | 1
----------------------------
複製程式碼

因此,我們有 TP=5 (BB1, BB2, BB5, BB8, BB9),FP=5 (重複檢測到的BB1也算FP)。除了表裡檢測到的5個GT以外,我們還有2個GT沒被檢測到,因此: FN = 2,GT=7.

然後依次從上到下設定對應的rank為正反分界線,此rank之前(包含此rank)的預測為正,此rank之後的預測為反,然後計算對應的Precision和Recall:

rank=1  precision=1.00 and recall=0.14
--------------------------------------
rank=2  precision=1.00 and recall=0.29
--------------------------------------
rank=3  precision=0.66 and recall=0.29
--------------------------------------
rank=4  precision=0.50 and recall=0.29
--------------------------------------
rank=5  precision=0.40 and recall=0.29
--------------------------------------
rank=6  precision=0.50 and recall=0.43
--------------------------------------
rank=7  precision=0.43 and recall=0.43
--------------------------------------
rank=8  precision=0.38 and recall=0.43
--------------------------------------
rank=9  precision=0.44 and recall=0.57
--------------------------------------
rank=10 precision=0.50 and recall=0.71
--------------------------------------
複製程式碼

比如rank=4時,TP=2 (BB1, BB2),則

Precision=2/4=0.5,Recall=TP/GT=2/7=0.29
複製程式碼

可以看出,隨著預測正反分割線的向下移動,Recall穩步變大,Precision整體減小,區域性上下跳動,PR曲線如下圖:

詳解object detection中的mAP

AP(Average Precision)的計算基本等同於計算PR曲線下的面積,但略有不同。需要先將PR曲線平滑化。

方法是,查全率r對應的查準率p,取查全率大於等於r時最大的查準率p。即,

詳解object detection中的mAP

平滑後的曲線如下圖中的綠色曲線:

詳解object detection中的mAP

對於AP(Average Precision)的計算有兩種方法:

  1. VOC2010之前的方法

AP =(平滑後PR曲線上,Recall分別等於0,0.1,0.2,… , 1.0等11處Precision的平均值)。

詳解object detection中的mAP

這裡則有:

AP=(1 + 1 + 1 + 0.5 + 0.5 + 0.5 + 0.5 + 0.5 + 0 + 0 + 0) / 11 = 0.5
複製程式碼
  1. VOC2010及以後的方法

AP=平滑後PR曲線下包圍的面積 這裡則有:

AP = (0.14-0) * 1 + (0.29-0.14) * 1 + (0.43-0.29) * 0.5 + (0.57-0.43) * 0.5 + (0.71-0.57) * 0.5 + (1-0.71) * 0 = 0.5
複製程式碼

這裡兩種方案得出的AP值相同,但通常是不同的。

需要注意的是上述AP的計算並沒有顯式設定P_threshold,而是通過從上到下依次指定每一個rank為正反分界線來變相的反映P_threshold不同取值。

mAP的計算

上述計算的AP只是針對dog這個類別,物體檢測通常有多個類別,模型效能肯定是多個類別準度的綜合度量。

  1. VOC資料集中的mAP VOC資料集中的mAP計算的是IoU_threshold=0.5時各個類別AP的均值。
  2. COCO資料集中的mAP 檢測是否正確有兩個超引數,P_threshold和IoU_threshold。AP是固定了IoU_threshold,再綜合考慮各個P_threshold下的模型平均準確度。 VOC認為IoU_threshold固定一個單值0.5即可,COCO則認為固定了IoU_threshold的取值,無法衡量IoU_threshold對模型效能的影響。

比如, A模型在IoU_threshold=0.5時,mAP=0.4。 B模型在IoU_threshold=0.7時,mAP同樣為0.4。 依據VOC的標準,AB模型的效能一樣,但顯然B模型的框更準,效能更優。 COCO在VOC標準的基礎上,取IoU_threshold=0.5,0.55, 0.6,… , 0.95時各個mAP的均值。

下圖給出了當前mAP最佳結果。

詳解object detection中的mAP
摘自文章Bottom-up Object Detection by Grouping Extreme and Center Points

mAP的不足

mAP雖然綜合考慮了P_threshold和IoU_threshold各個取值時的平均模型準確度,使得模型優劣的評判標準不隨P_threshold和IoU_threshold取值變化而變化,但在工程應用中,物體是否被正確檢測到,還是需要具體的P_threshold和IoU_threshold,工程上更關心在固定的P_threshold和IoU_threshold下的準確率。這就需要我們自己實現與具體應用相符的評判標準。

詳解object detection中的mAP

參考文章

  1. mAP (mean Average Precision) for Object Detection – Jonathan Hui – Medium
  2. 目標檢測中的mAP是什麼含義? - 知乎
  3. gluon-cv/voc_detection.py at master · dmlc/gluon-cv · GitHub

相關文章