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曲线相关推荐

  1. python脚本——图片重命名、图片合成视频、faster-rcnn画P-R曲线

    调试faster rcnn算法实用的python脚本 目录 调试faster rcnn算法实用的python脚本 一.前言 二.常用python脚本 三.后记 一.前言 最近在做关于目标检测算法的研究 ...

  2. python怎么画出圆润的曲线_Python如何画P-R曲线

    Python如何画P-R曲线 Python生成P-R图需要安装第三方库matplotlib.numpy及sklearn. 推荐学习<Python教程>. P-R曲线的生成方法: 根据学习器 ...

  3. python 画pr曲线

    roc曲线: python 画roc曲线_jacke121的专栏-CSDN博客 import _pickle as cPickle import matplotlib.pyplot as pltxxx ...

  4. python画pr曲线_python 画函数曲线示例

    python 画函数曲线示例 如下所示: import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 2 * np.pi ...

  5. yoloV3测试map和画PR曲线

    参考1:https://blog.csdn.net/qq_33350808/article/details/83178002 2:https://blog.csdn.net/weixin_437175 ...

  6. python画pr曲线代码_利用Python中的numpy包实现PR曲线和ROC曲线的计算

    闲来无事,边理解PR曲线和ROC曲线,边写了一下计算两个指标的代码.在 python 环境下,sklearn里有现成的函数计算ROC曲线坐标点,这里为了深入理解这两个指标,写代码的时候只用到numpy ...

  7. python画PR曲线(precision-recall曲线)

    使用python画precision-recall曲线的代码是: sklearn.metrics.precision_recall_curve(y_true, probas_pred, pos_lab ...

  8. python画pr曲线代码_Yolov3测试图及绘制PR曲线,yoloV3,map,和,画

    训练指令:./darknet.exe detector train data/obj.data yolo-obj.cfg darknet53.conv.74 | tee train_yolov3.lo ...

  9. Faster R-CNN画PR曲线

    参考:https://github.com/rbgirshick/py-faster-rcnn/issues/670 原地址https://blog.csdn.net/hongxingabc/arti ...

  10. 关于Mask R-CNN 画PR曲线

    最近太多人问我如何绘制PR曲线了,我又很少及时看到你们的消息,在这里跟大家道个歉,我直接把代码贴出来,你们看着改参数就好. ################ 导入相关包 ############### ...

最新文章

  1. org.apache.ibatis.binding.BindingException: Mapper method 'com.wdg.person.api.IPerson.insertPerson'
  2. GPT-4前奏?OpenAI发布120亿参数图像版GPT-3
  3. 详解APNS苹果消息推送通知
  4. [Android Pro] ant 编译android工程
  5. C++输入cin详解
  6. jenkins即将重启问题
  7. [转载]手工安全测试方法修改建议
  8. 大型企业网络配置系列课程详解(八) --VoIP的配置与相关概念的理解
  9. AT2364 Colorful Balls
  10. STM32F407 独立看门狗 个人笔记
  11. MySQL定义异常和异常处理方法
  12. C++之安装boost库
  13. E4/EAS/Eventing System 事件系统
  14. c++ STL之queue
  15. MATLAB建模与仿真(第一章基础--第四章画图)
  16. html登陆滑动验证,js实现登录时的滑动验证【原创】
  17. 打印机服务器总是自动停止,win7系统print spooler服务总是自动停止怎么办
  18. 十大OpenGL教程
  19. 着色Shading(2)(着色的继续、管线和纹理映射)(笔记)
  20. OpenCVSharp 分水岭算法

热门文章

  1. 传奇3便捷架设管理工具-BY来世今生
  2. HDLBits学习------Problem 106~114
  3. tkinter显示rtf文件
  4. 华为存储更换故障硬盘
  5. python实现word批量转pdf
  6. PMP知识点总结-自由时差与总时差
  7. TMK2SLNO TMK1SLNO 华为OSN1800 2路STM-16,8路STM-4或8路STM-1光接口板
  8. javascript页面刷新的几种方法
  9. coap 返回版本信息_CoAP协议学习笔记——CoAP格式详解
  10. Naive-UI,尤大推荐的Vue组件库