深度學習系列之YOLOv3 mAP計算
阿新 • • 發佈:2019-01-06
今天跑了以下YOLOv2,發現竟然沒有計算mAP的,這樣怎麼和其他模型對比呢?
於是乎,百度了一下,折騰了好幾下,我發現,有些人不知道是不是故意的,竟給別人出餿主意。方法繞來繞去(雖然也能計算,但讓人覺得不知所云)。我竟無言以對。
幸好,有一篇比較良心:我的參考文獻,本文也只是對這篇部落格更細緻的解釋。
為了避免大家踩坑,覺得寫一篇這個很有必要。
YOLOv3同樣適用!
一、生成檢測結果檔案
./darknet detector valid cfg/voc.data cfg/yolov3-voc.cfg results/yolo-voc_final.weights -out [類名] -gpu 0 -thresh .5
輸出的txt檔案在results下,記得修改一下輸出檔案的名稱,因為得到的檔名和你的類名會不一樣。
注意:輸出的檔名要求為類名,不然後面計算時會出現ap = nan。我覺得出現nan的人應該還是有的。
權重檔案(.weights)在backup裡也有。
二、新建一個.py檔案
在faster-rcnn/lib/datasets/ 下,新建一個compute_mAP.py檔案。(或者將faster-rcnn/lib/datasets/ 下的voc_eval.py複製到darknet目錄下,新建一個compute_mAP.py檔案):
from voc_eval import voc_eval
rec,prec,ap = voc_eval('/home/liwanzhi/YOLO/darknet/results/{}.txt', '/home/liwanzhi/YOLO/darknet/scripts/VOCdevkit/VOC2007/Annotations/{}.xml', '/home/liwanzhi/YOLO/darknet/scripts/VOCdevkit/VOC2007/ImageSets/Main/test.txt', '1', '.')
print('rec',rec)
print('prec',prec)
print('ap',ap)
第1項:表示檢測結果檔案路徑
第2項:表示標籤檔案的路徑
第3項:表示測試檔案路徑
第4項:類名
三、執行compute_mAP.py
最後一項就是AP,由於我只有1類,所以就是mAP。
出現nan的可能就是第一步的問題了。