MAP的計算方法
在計算MAP之前,要對TP/TN/FP/FN,precision/recall的計算有一定的了解。
一句話概括AP:recall在【0-1】范圍內的平均precision值
一句話概括MAP:所有類別的平均AP
得出PR曲線
一般來說,p-r曲線是p越大,r越小;p越小,r越大,跟具體的計算方式有關。
需要的內容:預測值,標簽值
過程:
1.首先將所有的預測框按照得分從高到低排序
2.分別與同一張圖片、同一類別的所有GTs計算IOU
3.根據閾值,判斷這個預測框屬於TP或者FP
4.得出當前階段的precision和recall.(意思就是在遍歷過程中,每判斷一個預測框,就計算一次p、r)計算方法與以往有所不同:
precision = 當前遍歷所檢測的TP預測框個數 / 當前遍歷檢測到的TP和FP
recall = 當前遍歷所檢測的TP預測框個數 / 所有GT的個數
主要區別就在當前,目的是為了模仿取不同閾值每次遍歷所有框計算pr曲線,用這種方法的時間復雜度是O(n).
所以一開始recall很低,precision很高,因為precision的分母基數小。
計算AP
現在不同的數據集計算AP方式略有不同,但總體都是一個微分計算PR曲線面積的思想。
voc2007的計算方式是先平滑曲線,對於每個點取其右邊最大的precision值,連成直線。(也叫插值AP法)
然后取11個點(在recall坐標軸每個0.1取一個點),直接平均11個點的precision的和。
voc2012的方法是直接計算平滑后的曲線與recall軸圍成的面積。結果更加准確。
COCO map
coco計算ap的時候采用的是101個插值點,考慮更為精細。
並且還計算了不同iou閾值的ap,下面結果的第一行就是iou閾值在(0.5-0.95)內每個0.05取一個值計算ap,然后取平均
還計算了不同的尺度對應的 ap,下圖三行到六行是包括small 、medium 、large.
以下圖為例是coco的結果指標:
參考:
pytorch物體檢測實戰---董洪義
https://zhuanlan.zhihu.com/p/60834912