對於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
2. 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下的準確率。這就需要我們自己實現與具體應用相符的評判標準。
歡迎掃碼關注我的同名微信公眾號 【AI研究小院】
參考文章:
1. https:// medium.com/@jonathan_hu i/map-mean-average-precision-for-object-detection-45c121a31173
2. 目標檢測中的mAP是什麼含義?
3. https:// github.com/dmlc/gluon-c v/blob/master/gluoncv/utils/metrics/voc_detection.py
推薦閱讀: