詳解object detection中的mAP

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

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

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

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

交併比IoU(Intersection over union)

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

這裏須要注意的是IoU=0.5,並不意味着每一個框恰好有50%與另一個框交叉部分,而是每一個框大約有2/3被交叉。有點反直覺。ide

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

單類別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%。測試

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

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

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

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

假如目標類別爲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曲線以下圖:

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

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

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

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

  1. VOC2010以前的方法

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

這裏則有:

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最佳結果。

摘自文章 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下的準確率。這就須要咱們本身實現與具體應用相符的評判標準。

參考文章

  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
相關文章
相關標籤/搜索