linux下yolov3学习(三):计算map,绘制precision-recall

1输出记录目标位置信息的txt文件

可以使用valid命令,如下:

./darknet detector valid cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_900.weights

其中voc.data内容如下:记得修改val

    classes= 1 #classes为训练样本集的类别总数
    train  = /home/zbb/darknet/scripts/2007_train.txt #train的路径为训练样本集所在的路径
    valid  = /home/zbb/darknet/scripts/2007_test.txt #valid的路径变为测试样本集所在的路径
    names  = data/voc.names #names的路径为data/voc.names文件所在的路径
    backup = backup

执行完在./results/comp4_det_test_[类名].txt里会保存测试结果

linux下yolov3学习(三):计算map,绘制precision-recall_第1张图片

txt内容为:按列,分别为:图像名称 | 置信度 | xmin,ymin,xmax,ymax

2.准备所需文件

这里,你需要准备:

  •     测试图像
  •     测试图像所对应的VOC格式的标记文件(xml)
  •     测试图像文件列表的txt文件
  •     yolo3批量测试所输出的对测试图像测试的结果文件(txt),其中包含模型所预测的位置信息。*注意:*这里的txt文件的命名,应当与xml文件中所标记的类别名称相同,如:handbag.txt, person.txt etc.
  •     下载fasterrcnn的eval_voc.py,我放在./results目录下
    前三个都在voc数据集里

3.计算map,绘制pre-rec

新建一个compute_mAP.py,和eval_voc.py一个目录下:

from voc_eval import voc_eval
import _pickle as cPickle
import numpy as np
import matplotlib.pyplot as plt

rec,prec,ap = voc_eval('/home/zbb/darknet/results/{}.txt', '/home/zbb/darknet/scripts/VOCdevkit/VOC2007/Annotations/{}.xml', '/home/zbb/darknet/scripts/VOCdevkit/VOC2007/ImageSets/Main/test.txt', 'airplane', '.')

print('rec',rec)
print('prec',prec)
print('ap',ap)

'''
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.plot(prec, rec, label='plane')
plt.grid()
ax.legend(loc = 'best')
ax.set_title('precion_recall')
ax.set_xlabel('recall')
ax.set_ylabel('precion')
fig.savefig('prec_recall.JPG',transparent=True,pad_inches=0,dpi=300,bbox_inches='tight')
'''

#开始画图
plt.title('Result Analysis')
#rec,prec反了
plt.plot(prec-0.1, rec, color='green', label='person')
plt.plot(prec-0.15, rec, color='red', label='cat')
plt.plot(prec-0.25, rec,  color='skyblue', label='PN')
plt.plot(prec, rec, color='blue', label='plane')
plt.legend() # 显示图例
plt.xlabel('recall')
plt.ylabel('precion')
plt.savefig('test.JPG',transparent=True,pad_inches=0,dpi=300,bbox_inches='tight')
plt.show()

运行python compute_mAP.py 计算出单类别的AP

这里我只有一类,就模拟了其它数据:

linux下yolov3学习(三):计算map,绘制precision-recall_第2张图片

map=ap之和/n

keyerror:每次运行前记得删掉annots.pkl,不然会报错

限制画图间隔,参考文献:https://blog.csdn.net/weixin_44520259/article/details/89917026

参考文献https://blog.csdn.net/yinhuan1649/article/details/82258703

你可能感兴趣的:(深度学习)