YOLOv4画PR曲线
YOLOv4使用自己的数据集画PR曲线
前言:本文是在yolov4训练和测试结束之后进行的。训练及测试过程不做阐述。
1.使用官方命令生成results文件
darknet.exe detector valid data/obj.data yolov4-first.cfg backup/yolov4-first_last.weights
其中,".data"、".cfg"文件是训练时用到的。权重是训练之后得到的。训练中的样子:
结束后会在所在目录下的results文件中生成你所训练的每一类的txt文件。这里要注意,在开始前目录下一定要有results文件,否则会报错。生成的结果如下:
这是其中一类的样子。
2.生成pkl文件
python reval_voc_py3.py --voc_dir D:\darknet-master\build\darknet\x64\data\VOCdevkit --year 2018 --image_set test --classes data/obj.names testfor
reval_voc_py3.py是官方darknet-master下x64文件中就有的,我在网上找了好久画pr曲线的程序,结果大部分都不好用,结果官方下就有,不需要下载。
可能由于我的标注软件的问题,所有标注后的xml都是"DIfficult",所以可能会出现这样的错误:
这个时候根据提示把"difficult"改为"DIfficult"即可。
所有的数据命名不要有空格,要不会报错,这真的是个巨坑。。
还有一个可能遇到的错误就是:
R = [obj for obj in recs[imagename] if obj[‘name’] == classname] KeyError:‘1’
这个时候要把annotations_cache的缓存删掉,删掉后即可正常运行。
classes训练过程中有用到。
testfor是自己为生成的pkl文件夹起个名字。
image_set test不需要加".txt"。
voc dir 是指你的数据所在的文件夹,因为训练的是自己的数据集,在data文件夹下新建VOCdevkit文件夹,这里年份我是随便写的,VOCdevkit下新建VOC2018,然后VOC2018中包括以下几个文件夹:
把训练时用到的数据集都放在里面。
其中ImagesSets下有一个Main文件夹中要有test.txt。这里的test.txt文件只包含测试集的名字,没有后缀,具体长这个样子:
生成test文件代码如下:
import os
import randomtrainval_percent = 1 # 训练数据和交叉验证数据占的比例,自己根据实际调节
train_percent = 1 # 训练数据占trainval的比例,即用来训练的数据
xmlfilepath = 'testxml'
txtsavepath = 'ImageSets\Main'
total_xml = os.listdir(xmlfilepath)num = len(total_xml)
list = range(num)
tv = int(num * trainval_percent)
tr = int(tv * train_percent)
trainval = random.sample(list, tv)
train = random.sample(trainval, tr)ftrainval = open('ImageSets/Main/trainval.txt', 'w') # 需要提前建立Main文件
ftest = open('ImageSets/Main/test.txt', 'w')
ftrain = open('ImageSets/Main/train.txt', 'w')
fval = open('ImageSets/Main/val.txt', 'w')for i in list:name = total_xml[i][:-4] + '\n'if i in trainval:ftrainval.write(name)if i in train:ftrain.write(name)else:fval.write(name)else:ftest.write(name)ftrainval.close()
ftrain.close()
fval.close()
ftest.close()
3.画PR曲线
针对不同的权重得到不同的pkl文件之后,把他们画在同一张图中,具体代码如下:
import _pickle as cPickle
import matplotlib.pyplot as pltfr1= open('C:/Users/officer/Desktop/pkl/yolov4_fire_pr.pkl', 'rb') # 这里open中第一个参数需要修改成自己生产的pkl文件
inf1 = cPickle.load(fr1)
fr1.close()x1= inf1['rec']
y1= inf1['prec']fr2= open('C:/Users/officer/Desktop/pkl/v3sppfire_pr.pkl', 'rb') # 这里open中第一个参数需要修改成自己生产的pkl文件
inf2 = cPickle.load(fr2)
fr2.close()x2= inf2['rec']
y2= inf2['prec']fr3= open('C:/Users/officer/Desktop/pkl/v3fire_pr.pkl', 'rb') # 这里open中第一个参数需要修改成自己生产的pkl文件
inf3 = cPickle.load(fr3)
fr3.close()x3= inf3['rec']
y3= inf3['prec']fr4= open('C:/Users/officer/Desktop/pkl/v2fire_pr.pkl', 'rb') # 这里open中第一个参数需要修改成自己生产的pkl文件
inf4 = cPickle.load(fr4)
fr4.close()x4= inf4['rec']
y4= inf4['prec']fr5= open('C:/Users/officer/Desktop/pkl/oursfire_pr.pkl', 'rb') # 这里open中第一个参数需要修改成自己生产的pkl文件
inf5 = cPickle.load(fr5)
fr5.close()x5= inf5['rec']
y5= inf5['prec']plt.figure()
plt.xlabel('recall')
plt.ylabel('precision')
plt.title('PR cruve')plt.plot(x5, y5, color="red")
plt.plot(x1, y1, color="purple")
plt.plot(x2, y2, color="blue")
plt.plot(x3, y3, color="green")
plt.plot(x4, y4, color="orange")plt.show()
到这里就大功告成啦!
有问题可以互相探讨。
如果对大家有帮助记得关注点赞哦~
参考链接:
https://blog.csdn.net/qq_33350808/article/details/83178002
YOLOv4画PR曲线相关推荐
- python脚本——图片重命名、图片合成视频、faster-rcnn画P-R曲线
调试faster rcnn算法实用的python脚本 目录 调试faster rcnn算法实用的python脚本 一.前言 二.常用python脚本 三.后记 一.前言 最近在做关于目标检测算法的研究 ...
- python怎么画出圆润的曲线_Python如何画P-R曲线
Python如何画P-R曲线 Python生成P-R图需要安装第三方库matplotlib.numpy及sklearn. 推荐学习<Python教程>. P-R曲线的生成方法: 根据学习器 ...
- python 画pr曲线
roc曲线: python 画roc曲线_jacke121的专栏-CSDN博客 import _pickle as cPickle import matplotlib.pyplot as pltxxx ...
- python画pr曲线_python 画函数曲线示例
python 画函数曲线示例 如下所示: import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 2 * np.pi ...
- yoloV3测试map和画PR曲线
参考1:https://blog.csdn.net/qq_33350808/article/details/83178002 2:https://blog.csdn.net/weixin_437175 ...
- python画pr曲线代码_利用Python中的numpy包实现PR曲线和ROC曲线的计算
闲来无事,边理解PR曲线和ROC曲线,边写了一下计算两个指标的代码.在 python 环境下,sklearn里有现成的函数计算ROC曲线坐标点,这里为了深入理解这两个指标,写代码的时候只用到numpy ...
- python画PR曲线(precision-recall曲线)
使用python画precision-recall曲线的代码是: sklearn.metrics.precision_recall_curve(y_true, probas_pred, pos_lab ...
- python画pr曲线代码_Yolov3测试图及绘制PR曲线,yoloV3,map,和,画
训练指令:./darknet.exe detector train data/obj.data yolo-obj.cfg darknet53.conv.74 | tee train_yolov3.lo ...
- Faster R-CNN画PR曲线
参考:https://github.com/rbgirshick/py-faster-rcnn/issues/670 原地址https://blog.csdn.net/hongxingabc/arti ...
- 关于Mask R-CNN 画PR曲线
最近太多人问我如何绘制PR曲线了,我又很少及时看到你们的消息,在这里跟大家道个歉,我直接把代码贴出来,你们看着改参数就好. ################ 导入相关包 ############### ...
最新文章
- org.apache.ibatis.binding.BindingException: Mapper method 'com.wdg.person.api.IPerson.insertPerson'
- GPT-4前奏?OpenAI发布120亿参数图像版GPT-3
- 详解APNS苹果消息推送通知
- [Android Pro] ant 编译android工程
- C++输入cin详解
- jenkins即将重启问题
- [转载]手工安全测试方法修改建议
- 大型企业网络配置系列课程详解(八) --VoIP的配置与相关概念的理解
- AT2364 Colorful Balls
- STM32F407 独立看门狗 个人笔记
- MySQL定义异常和异常处理方法
- C++之安装boost库
- E4/EAS/Eventing System 事件系统
- c++ STL之queue
- MATLAB建模与仿真(第一章基础--第四章画图)
- html登陆滑动验证,js实现登录时的滑动验证【原创】
- 打印机服务器总是自动停止,win7系统print spooler服务总是自动停止怎么办
- 十大OpenGL教程
- 着色Shading(2)(着色的继续、管线和纹理映射)(笔记)
- OpenCVSharp 分水岭算法