ap map 脚本_关于yolov2的mAP、recall计算方法(yolov3同样适用)

1.计算mAP./darknet detector valid cfg/voc.data cfg/yolov3-voc.cfg yolo-voc_final.weights -out [类名] -gpu 0 -thresh .5

cfg文件需要自己根据改,权重数值也是自己改。类名修改成自己数据集的名字,比如我要识别orange,就写orange

输出的txt文件在results下,记得修改一下输出文件的名称,因为得到的文件名和你的类名会不一样。

我的txt文件名就是orange.txtorange.txt,这里需要修改成orange.txt。

注意:输出的文件名要求为类名,不然后面计算时会出现ap = nan。我觉得出现nan的人应该还是有的。

2.去fasterrcnn的caffe代码项目下,在faster-rcnn/lib/datasets/文件夹下,下载voc_eval.py文件,不过这个文件有点问题,我给稍微修改了下,文件我放到网盘里了,地址为https://pan.baidu.com/s/1ARsLRaKSaTRYI7lyo-4WUQ

如果文件报错:write() argument must be str, not bytes,就把

with open(cachefile, 'w')as f:

cPickle.dump(recs, f)

中的'w‘改成'wb’即可。

之后自己写一个脚本文件:

可以命名为compute_mAP.py,内容如下:from voc_eval import voc_evalrec,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', 'orange')

print('rec',rec)

print('prec',prec)

print('ap',ap)

运行结果如下:

('rec', array([0.00163132, 0.00326264, 0.00489396, ..., 0.92169657, 0.92169657,

0.92169657]))

('prec', array([1.        , 1.        , 1.        , ..., 0.05681818, 0.05681247,

0.05680676]))

('ap', '0.8525477095943402')

其中的ap就是我们要的mAP了

2.计算recall值

修改detector.c下的validate_detector_recall函数

替换list *plist = get_paths("data/coco_val_5k.list");为list *plist=get_paths("scripts/2007_test.txt");自己的测试集文本

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

最后一列为recall值。

另外修改一个bug,不然IOU会逐渐变小,直至出现大批量的nan:

38f125d05d27

修改完之后make一下就可以了

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值