• Yolov3 训练自己的数据集


    1. 标注工具

    1) 标注工具:Lableimg

    Lableimg软件(windows版本)下载链接:

    https://pan.baidu.com/s/1tuIQmuyedRHP1WeGVVSx_Q 提取:ejgx

    2) 给数据集图像按编号顺序命名:如000001.jpg – 000999.jpg;

    3) 标注数据:如:图像0000001.jpg, 生成对应的label为000001.xml文件;

     2. 利用VOC制作自己的数据集

      在目录下新建VOC2007,并在VOC2007下新建Annotations,ImageSets和JPEGImages三个文件夹。在ImageSets下新建Main文件夹

                            

          将自己的数据集图片拷贝到JPEGImages目录下。将数据集label文件拷贝到Annotations目录下。在VOC2007下新建test.py文件夹,将下面代码拷贝进去运行,将生成四个文件:train.txt,val.txt,test.txt和trainval.txt。

    test.py

     1 import os
     2 import random
     3 
     4 trainval_percent = 0.1
     5 train_percent = 0.9
     6 xmlfilepath = 'Annotations'
     7 txtsavepath = 'ImageSetsMain'
     8 total_xml = os.listdir(xmlfilepath)
     9 
    10 num = len(total_xml)
    11 list = range(num)
    12 tv = int(num * trainval_percent)
    13 tr = int(tv * train_percent)
    14 trainval = random.sample(list, tv)
    15 train = random.sample(trainval, tr)
    16 
    17 ftrainval = open('ImageSets/Main/trainval.txt', 'w')
    18 ftest = open('ImageSets/Main/test.txt', 'w')
    19 ftrain = open('ImageSets/Main/train.txt', 'w')
    20 fval = open('ImageSets/Main/val.txt', 'w')
    21 
    22 for i in list:
    23     name = total_xml[i][:-4] + '
    '
    24     if i in trainval:
    25         ftrainval.write(name)
    26         if i in train:
    27             ftest.write(name)
    28         else:
    29             fval.write(name)
    30     else:
    31         ftrain.write(name)
    32 
    33 ftrainval.close()
    34 ftrain.close()
    35 fval.close()
    36 ftest.close()
    View Code

    生成后的目录结构如下所示:

                                

    3. 下载并编译darknet源码

    1) 下载源码 git clone https://github.com/pjreddie/darknet

    2) 编译代码:

       YOLOV3使用一个开源的神经网络框架Darknet53,使用C和CUDA,有CPU和GPU两种模式。默认使用的是CPU模式,需要切换GPU模型的话,vim修改Makefile文件。

            cd darknet

            vim Makefile  #如果使用CPU模式。则不用修改Makefile文件

       

    注:将前面三行置1,其他不用动

     编译: make

    编译成功后,可以先下载预训练模型测试一下效果:

        wget https://pjreddie.com/media/files/yolov3.weights

       ./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg

    3) 加入自己的数据集

         在代码的darknet目录下新建VOCdevkit文件夹,然后把刚才制作的VOC2007文件夹拷贝到该文件夹下。有的读者可能了解过YOLOV3的label,YOLOV3的label标注的一行五个数分别代表类别(从 0 开始编号), BoundingBox 中心 X 坐标,中心 Y 坐标,宽,高。这些坐标都是 0~1 的相对坐标。和我们刚才标注的label不同,因此我们需要下面的py文件帮我们转换label。

       wget https://pjreddie.com/media/files/voc_label.py

       这里需要修改两个地方,sets和classes,classes根据自己需要修改(注:自己的数据集仍然是20类,防止darknet转ncnn测试时识别精度损失过大)。

           

          接下来运行该文件,我们的目录下会生成三个txt文件2007_train.txt,2007_val.txt,2007_test.txt,VOCdevkit下的VOC2007也会多生成一个labels文件夹,下面是真正会使用到的label,点开看发现已经转化成YOLOV3需要的格式了。这时候自己的数据集正式完成。

        python voc_label.py

        cat 2007_train.txt 2007_val.txt  > train.txt

    4. 局部修改

    1)  修改cfg/voc.data

     

    根据自己的路径修改。

    2)修改data/voc.names 和 coco.names

    3)  修改参数文件cfg/yolo3-voc.cfg

    ctrl+f 搜 yolo, 总共会搜出3个含有yolo的地方。

    每个地方都必须要改2处, filters:3*(5+len(classes));

    其中:classes: len(classes) = 20,这里以上述的20个类为例

      filters = 75

      classes = 20

    可修改:random = 1:原来是1,显存小改为0。(是否要多尺度输出。)

    参数文件开头的地方可以选训练的batchsize,要注意!

     5.训练数据

    1)     下载darknet53的预训练模型:

          wget https://pjreddie.com/media/files/darknet53.conv.74

    2)  开始训练:

    多GPU同时训练:

    ./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74 -gpus 0,1,2,3

    单gpu训练:

    ./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74

    注:生成的模型文件会保存在backup下

    3)  测试模型文件

    ./darknet detect cfg/yolov3-voc.cfg backup/yolov3-voc_20000.weights test_img/pen_8.jpg

    参考:https://blog.csdn.net/john_bh/article/details/80625220

          https://blog.csdn.net/qq_21578849/article/details/84980298

  • 相关阅读:
    [转]Linux FTP服务配置
    [转]手把手教你nginx下如何增加网站
    [转]linux一键安装web环境全攻略
    CentOS命令
    [转]Response对象的属性和方法
    beforeRouteLeave vue监听返回的使用方法
    ue项目浏览器出现卡顿及崩溃的原因查找与解决方案
    vue中,解决chrome下,的warning, Added nonpassive event listener to a scrollblocking ‘mousewheel‘ event 问题
    npm
    Java线程池使用案例
  • 原文地址:https://www.cnblogs.com/zhaopengpeng/p/14682606.html
Copyright © 2020-2023  润新知