今天跑了以下YOLOv2,发现竟然没有计算mAP的,这样怎么和其他模型对比呢?
于是乎,百度了一下,折腾了好几下,我发现,有些人不知道是不是故意的,竟给别人出馊主意。方法绕来绕去(虽然也能计算,但让人觉得不知所云)。我竟无言以对。
幸好,有一篇比较良心:我的参考文献,本文也只是对这篇博客更细致的解释。
为了避免大家踩坑,觉得写一篇这个很有必要。
一、生成检测结果文件
./darknet detector valid cfg/voc.data cfg/yolo-voc.2.0.cfg results/yolo-voc_final.weights -out [类名] -gpu 0 -thresh .5
输出文件在results下。
注意:输出的文件名要求为类名,不然后面计算时会出现ap = nan。我觉得出现nan的人应该还是有的。
二、新建一个.py文件
在faster-rcnn/lib/datasets/ 下,新建一个compute_mAP.py文件:
from voc_eval import voc_eval
print voc_eval('/home/mckee/darknet/results/{}.txt', '/home/mckee/darknet/scripts/VOCdevkit/VOC2007/Annotations/{}.xml', '/home/mckee/darknet/scripts/VOCdevkit/VOC2007/ImageSets/Main/test.txt', '1', '.')
第1项:表示检测结果文件路径
第2项:表示标签文件的路径
第3项:表示测试文件路径
第4项:类名
三、运行compute_mAP.py
最后一项就是AP,由于我只有1类,所以就是mAP。
出现nan的可能就是第一步的问题了。
说明一下:这只是AP的,至于mAP我暂时还没涉及检测多类,目前也不知道怎么检测多类。