yolov3损失函数详解,使用yolov3训练自己的数据集

  yolov3损失函数详解,使用yolov3训练自己的数据集

  前言中所做的所有工作都是基于darknet已经自己训练好的模型,没有提供任何与YOLO训练相关的内容(因为其他人已经送够了)。尽量写傻瓜式,一步一步不停截图,因为能看懂这类博客的基本都没有程序员基础,甚至连剧本都没听过的新手也只是跑来跑去发个水文消息,所以图片多,啰嗦警告,(图中有些路径是马赛克的,没什么效果)。

  1运行暗网官方代码中的检测器有效指令,生成测试集的检测结果。darknet检测器有效voc.data文件路径cfg文件路径权重文件路径输出

  写上面的通用格式(请不要直接复制粘贴,把文件里的内容替换成你需要的路径,这里不需要,只是用来分隔的!windows和linux下的文件路径也有不同的格式,每个参数之间需要有空格间隔)。(windows可以通过打开cmd或power shell输入指令,linux可以通过CTRL SHIFT T打开终端输入指令,记住输入指令时需要通过cd定位需要运行程序的目录)

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

  在执行之后,应该在程序的当前目录中产生一个results文件夹,在其中存储测试结果。文件名是comp4_det_test_您的测试的类名。txt,画风如下图。

  左边是执行有效指令的过程,右边是产生的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分。)

  请百度和anaconda在windows下安装python默认安装Linux,但它是默认的Python2版本。

  如果遇到缺少库的情况,请打开python文件,看看开头都有什么。一般都不算少,都是基础库。

  3使用reval_voc_py.py计算mAP值并生成pkl文件Python reval _ VOC _ py3 . py-VOC _ dir VOC文件路径- year year - image_set验证集文件名- classes类名文件路径输出文件夹名

  首先将第一部分生成的结果文件夹移动到当前脚本文件的位置,然后执行上面的指令。

  Python首先意味着运行python代码。

  Reval_voc_py3.py表示当前运行脚本的文件名,用于python3,reval_voc.py用于python2。

  voc文件路径是当时用于训练的VOC数据集的路径,比如windows下的d:darknetscriptsVOCdevkit,linux是 home XXX darknet scripts VOC devkit。这只是一个类比,请用你需要的路径来代替。

  是VOC数据集中VOC文件名中的时间,比如2007,2012。

  验证集文件名一般是VOC Dev Kit VOC 2017 image sets Main中的文件中的txt文件名,比如train.txt就把所有要测试的图片名都塞进去,没有就自己创建(但是没有怎么训练)。注意:这里只需要填写文件名,不需要txt后缀。

  文件名路径是voc.names文件的路径,可以在voc.data文件中找到,第4行有这个名称。

  输出文件夹名只是我自己写的,比如我这里写的testForCsdn。

  所有参数都被替换后,就可以运行了。关于绘画风格如下:

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

  请注意,此时已经可以看到地图值。(我这里验证集小,目标简单,所以图大,不用担心。)

  用matplotlib绘制PR曲线

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

  import _ pickle as cPickleimport matplotlib . py plot as pltfr=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 . ylabe . PLT . title( pr cruve )PLT . plot(x,y) PLT.show

  pythonPR_draw.py

  终于,结果出来了。当当当当,画风如下:

  Ps:目前为止就写这么多了。应该没有问题。我觉得自己够蠢的。有问题请私信我,我来修改。

yolov3损失函数详解,使用yolov3训练自己的数据集