召回率,精確率,mAP如何計算


 

首先用訓練好的模型得到所有測試樣本的confidence  score,每一類(如car)的confidence   score保存到一個文件中(如comp1_cls_test_car.txt)。假設共有20個測試樣本,每個的id,confidence  score和ground  truth  label如下:

接下來對confidence  score排序,得到:

然后計算precision和recall,這兩個標准的定義如下:

圓圈內(true   positives + false  positives)是我們選出的元素,它對應於分類任務中我們取出的結果,比如對測試樣本在訓練好的car模型上分類,我們想得到top-5的結果,即:

在這個例子中,根據ge_label真實標簽,true   positives就是指第4和第2張圖片,false   positives就是指第13,19,6張圖片。方框內圓圈外的元素(false   negatives和true  negatives)是相對於方框內的元素而言,在這個例子中,是指confidence   score排在top-5之外的元素,即:

其中,false   negatives是指第9,16,7,20張圖片,true   negatives是指第1,18,5,15,10,17,12,14,8,11,3張圖片。

那么,這個例子中Precision=2/5=40%,意思是對於car這一類別,我們選定了5個樣本,其中正確的有2個,即准確率為40%;Recall=2/6=30%,意思是在所有測試樣本中,共有6個car,但是因為我們只召回了2個,所以召回率為30%。

實際多類別分類任務中,我們通常不滿足只通過top-5來衡量一個模型的好壞,而是需要知道從top-1到top-N(N是所有測試樣本個數,本文中為20)對應的precision和recall。顯然隨着我們選定的樣本越來也多,recall一定會越來越高,而precision整體上會呈下降趨勢。把recall當成橫坐標,precision當成縱坐標,即可得到常用的precision-recall曲線。這個例子的precision-recall曲線如下:

 

接下來說說AP的計算,此處參考的是PASCAL  VOC  CHALLENGE的計算方法。首先設定一組閾值,[0, 0.1, 0.2, …, 1]。然后對於recall大於每一個閾值(比如recall>0.3),我們都會得到一個對應的最大precision。這樣,我們就計算出了11個precision。AP即為這11個precision的平均值。這種方法英文叫做11-point interpolated average precision。​

當然PASCAL VOC CHALLENGE自2010年后就換了另一種計算方法。新的計算方法假設這N個樣本中有M個正例,那么我們會得到M個recall值(1/M, 2/M, ..., M/M),對於每個recall值r,我們可以計算出對應(r' > r)的最大precision,然后對這M個precision值取平均即得到最后的AP值。計算方法如下:

相應的Precision-Recall曲線(這條曲線是單調遞減的)如下:​

對每個recall對應的precision求均值就得到所謂的average precision,即AP。這樣就得到了對應一個類(分類器)的average precision,它表示的是該模型在某個類別上的好壞,如果要求模型在所有類別上的好壞,就求所有類別對應的AP的均值,即所謂的mAP。
 

參考鏈接:http://blog.sina.com.cn/s/blog_9db078090102whzw.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM