在目標檢測任務中如何計算評價指標-Recall,Precision以及畫出PR曲線

好久沒寫博客了,最近在評價結果的時候發現目標檢測的評價結果還是比較難以考慮的,研究了好長時間終於明白了!
和單純的計算Recall和Precision相比,多類的目標檢測的Recall和Precision計算有如下幾個難度:
1,二類問題的Recall和Precision容易解決,那多類問題該怎麼辦呢
2,分類任務的評價指標還是容易計算的,那檢測任務呢,如何計算其TP以及FP?
3,網上有很多解決方案都是畫一個類別的PR曲線,如何將多類別的曲線用一條PR曲線畫出來呢?

這裏我們用一張圖片作爲例子,多張圖片道理一樣。假設一張圖片有N個需要檢測的目標,分別是object1,object2,object3共分爲三類,使用檢測器得到了M個Bounding Box(BB),每個BB裏包含BB所在的位置以及object1,object2,object3對應的分數confidence。
我把計算目標檢測評價指標歸爲一下幾步:
1,對每一類i進行如下操作:
對M個BB中每一個BB,計算其與N個GroundTruth(GT)的IoU值,且取其中的最大值MaxIoU。設定一個閾值thresh,一般設置thresh爲0.5。當MaxIoU < thresh的時候,記錄其類別i的分數confidencei以及fpi = 1,當MaxIoU>=thresh分爲以下倆種情況:
當MaxIoU對應的GT類別爲i的時候,記錄其類別i的分數以及tpi = 1。
當MaxIoU對應的GT類別不爲i的時候,記錄其類別i的分數以及fpi = 1。
2,由步驟1我們可以得到3M個分數與tp/fp的元祖,形如(confidencei,tp或者fp),對這3M個元祖按照confidence進行排序。
3,按照順序1,2,3,4。。。M截取,計算每次截取所獲得的recall和precision
recall = tp/N
precision = tp/tp+fp
這樣得到M個recall和precision點,便畫出PR曲線了~
當然AP值計算也就水到渠成了,具體就不多說了

另外代碼請參考faster-RCNN源碼
https://github.com/rbgirshick/py-faster-rcnn/blob/master/lib/datasets/voc_eval.py

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章