yolov3计算map及召回率

一.计算单类精度及mAP

yolov3计算map及召回率_第1张图片

1.批处理测试图输出检测结果文本

./darknet detector valid cfg/voc.data cfg/yolov3-voc.cfg results/yolov3-voc_final.weights -out detect_result.txt

使用detector valid参数,具体函数是detector.c下的validate_detector函数。将训练集的检测结果保存到detect_result.txt。

其中thresh在validate_detector中默认为0.005,按需修改。

修改txt文件名为检测的类别名,我的标签是weeds,即weeds.txt

2.使用py-faster-rcnn下的voc_eval.py计算mAP

将py-faster-rcnn/lib/datasets/voc_eval.py拷贝到darknet根目录

新建compute_mAP.py

from voc_eval import voc_eval
print voc_eval(’/xxx/darknet/results/{}.txt’, ‘/xxx/darknet/scripts/VOCdevkit/VOC2007/Annotations/{}.xml’, ‘/xxx/darknet/scripts/VOCdevkit/VOC2007/ImageSets/Main/test.txt’, ‘person’, ‘.’)

重复执行需要删除 ./darknet/annots.pkl
执行python compute_mAP.py,voc_eval.py中返回的最后一个值即AP,检测单类就是mAP

如果是多类,ap相加求平均值即为map。

三、根据公式计算mAP:
以三类别检测为例:
mAP(airplane,ship,car)= [AP(airplane)+AP(ship)+AP(car)] / 3
更多类别以此类推。

注意:该程序是在基于python2.7运行的,如果默认的是python3.x的版本,直接使用下面的命令调用即可。

python2.7 compute_mAP.py

二.计算recall

yolov3计算map及召回率_第2张图片
修改detector.c下的validate_detector_recall函数

替换list *plist = get_paths(“data/coco_val_5k.list”);为list *plist=get_paths(“scripts/train.txt”);自己的训练集文本

./darknet detector recall cfg/voc.data cfg/yolov3-voc.cfg results/yolov3-voc_final.weights

最后一列为recall值。

recall出现问题:Learning Rate: 0.001, Momentum: 0.9, Decay: 0.0005

Couldn’t open file: data/coco_val_5k.list

解决:改动了darknet源码,要重新编译。在darknet目录下:

make clean
make -j8

你可能感兴趣的:(yolov3计算map及召回率)