关于YOLOv3对VOC类型数据集的mAP计算与PR曲线的绘制 windows和linux均适用

前言

本文所做的工作均建立在已经已经用darknet训练好自己的模型的基础上的,不提供与YOLO训练有关的东西(因为别人已经发够多了)。尽量写得傻瓜一些,保持一步一次截图,因为能看这种博客的基本都没啥程序员基础的,连脚本都没听说的菜鸟,只是单纯跑跑发个水文的,所以多图和啰嗦警告,(图中有些路径打上马赛克了,没有影响)。

1 运行darknet官方代码中的detector valid指令,生成对测试集的检测结果。

 .\darknet detector valid   -out ""

上面写的通用格式(请不要直接复制粘贴运行,将<>里的内容替换为自己需要的路径,其中"<>"不需要,只是用来分隔的!还有windows和linux下文件路径的格式不同,并且每个参数之间都需要空格间隔)。(windows通过打开cmd或者power shell来输入指令,linux通过ctrl+shift+t打开终端来输入指令,要记住输入指令时你需要通过cd来定位到当前需要运行程序的目录里)

voc.data和cfg文件就是你当时训练用的配置文件,weights文件就是你训练出来的结果,其中需要修改的是voc.data文件,其中应该是有五行的,其中第三行是valid就是需要验证测试集的路径,其指向的txt文件格式与第二行train一致(已经训练过的应该知道是啥了),这里需要修改成你需要的,画风如下。

关于YOLOv3对VOC类型数据集的mAP计算与PR曲线的绘制 windows和linux均适用_第1张图片

执行完之后应该会在程序的当前目录生产一个results文件夹,里面存有检测结果,文件名为comp4_det_test_<你检测的类名>.txt,画风如下所示。

关于YOLOv3对VOC类型数据集的mAP计算与PR曲线的绘制 windows和linux均适用_第2张图片关于YOLOv3对VOC类型数据集的mAP计算与PR曲线的绘制 windows和linux均适用_第3张图片

左边是执行valid指令的过程,右边是生产的txt文件,其中txt中数据格式为: 文件名 置信度 x y w h。

2 下载检测用脚本文件 reval_voc_py.py和voc_eval_py.py

 

https://download.csdn.net/download/qq_33350808/10731748

(因为没在CSDN里面找到添加附件的功能,所以这里只能放个传送门了,而且需求积分最低都要1分,所以我也不能改成0分免费给你们。)

windows下python安装请百度,anaconda就可以了;linux默认就有安装的,不过是默认的Python2版本的。

如果遇到缺少库的,请打开一下python文件,看看开头那里有哪些,一般不会少的,都是些基本的库。

3 使用reval_voc_py.py计算出mAP值并且生成pkl文件

python reval_voc_py3.py --voc_dir --year <年份> --image_set <验证集文件名> --classes <类名文件路径> <输出文件夹名>

 先将第一部生成的results文件夹移动到当前脚本文件所在的位置,然后执行上述指令。

首先python表示运行python代码

reval_voc_py3.py表示当前运行的脚本文件名,python3的话就用这个,python2的话用reval_voc.py。

voc文件路径就是当时训练用的VOC数据集的路径,比如windows下 d:\darknet\scripts\VOCdevkit,linux就是 \home\xxx\darknet\scripts\VOCdevkit,这里只是打个比方,读者请替换成自己需要的路径

年份就是VOC数据集里VOC文件名里的时间,比如2007、2012这样的。

验证集文件名一般是VOCdevkit\VOC2017\ImageSets\Main中的文件中txt文件名,比如train.txt,把需要测试的图片名全部塞进去就可以了,如果没有的话自行创建(不过没有的话怎么训练的呢)。注意:这里只需要填文件名,txt后缀都不需要的。

关于YOLOv3对VOC类型数据集的mAP计算与PR曲线的绘制 windows和linux均适用_第4张图片

类名文件路径就是voc.names文件的路径,在voc.data文件里面是有的,第4行names那里。

输出文件夹名就自己随便写了,比如我这里写的testForCsdn。

参数全部替换好就可以跑了,大概画风如下所示:

关于YOLOv3对VOC类型数据集的mAP计算与PR曲线的绘制 windows和linux均适用_第5张图片

这时会在脚本当前目录生成一个存放了pkl文件的文件夹,名字就是刚才输入的输出文件夹名。(这里的名字不需要和我的一样,如果你有多个类的话,就会生成多个文件,文件名就是你的类名)

注意,这时已经能看到mAP值了。(我这里的验证集较小,目标较简单,所以mAP大了些,不用在意)

4 用matplotlib绘制PR曲线

 

 在得到pkl文件目录里直接创建一个python文件,比如PR_draw.py,内容如下,记得把第三行里的参数修改一下。

import _pickle as cPickle
import matplotlib.pyplot as plt
fr = open('apple_pr.pkl','rb')#这里open中第一个参数需要修改成自己生产的pkl文件
inf = cPickle.load(fr)
fr.close()

x=inf['rec']
y=inf['prec']
plt.figure()
plt.xlabel('recall')
plt.ylabel('precision')
plt.title('PR cruve')
plt.plot(x,y)
plt.show()

print('AP:',inf['ap'])

 然后直接运行

python PR_draw.py

最后结果就出来了,当当当当,画风如下所示:

 关于YOLOv3对VOC类型数据集的mAP计算与PR曲线的绘制 windows和linux均适用_第6张图片

Ps:目前就写这么多了,应该没啥问题,自我感觉已经够傻瓜了,有问题请私信我再修改。

你可能感兴趣的:(关于YOLOv3对VOC类型数据集的mAP计算与PR曲线的绘制 windows和linux均适用)