YOLOv3训练自己的数据集

1.机器配置

  • 系统:Ubuntu 18.04
  • 显卡:GeForce GTX 1060 6GB/PCIe/SSE2
  • CPU:Intel® Core™ i5-8400 CPU @ 2.80GHz × 6
  • 内存:15.5 GiB

2.环境配置

  • Opencv 3.4.4
  • CUDA 9.0
  • cuDNN
  • NVIDIA显卡驱动

 YOLOv3环境配置参考资料

3.制作自己的数据集(VOC格式)

(1)创建文件夹

 文件夹格式如下

  • VOC2007
    • Annotations

    • ImageSets

      • Layout
      • Main
      • Segmentation
    • JPEGImages

    • labels

其中:
Annotations文件夹中放置数据标注后的文件,也就是*.xml文件。
Main文件夹中放置test.txt 、train.txt 、trainval.txt 、val.txt文件。(文件主要是用来训练或测试的图像的名称)
JPEGImages文件夹中放置所有要训练的图片,图片按照000001.jpg、000002.jpg ······类似这种格式放置。(按照统一规则命名)

创建好文件夹后,在 scripts文件夹中创建文件夹VOCdevkit(如果有就不必创建),然后 将VOC2007文件夹整体放入VOCdevkit中,形成/darknet/scripts/VOCdevkit/VOC2007第一步就算完成了。

(2)标注图片数据集

  将所有图片数据集放到/darknet/scripts/VOCdevkit/VOC2007/JPEGImages文件夹中。(按照统一规则命名)
YOLOv3训练自己的数据集_第1张图片
  使用labelImg标注图像。(labelImg的安装与使用)
  将标注好的 .xml 文件保存到/darknet/scripts/VOCdevkit/VOC2007/Annotations文件夹中。(按照统一规则命名)
YOLOv3训练自己的数据集_第2张图片

(3)配置文件

  • /darknet/scripts/VOCdevkit/VOC2007下新建test.py文件,将下面代码拷贝进去并运行,将在/darknet/scripts/VOCdevkit/VOC2007/ImageSets/Main中生成四个文件:test.txt 、train.txt 、trainval.txt 、val.txt。
import os
import random

trainval_percent = 0.1
train_percent = 0.9
xmlfilepath = 'Annotations'
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')
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:
            ftest.write(name)
        else:
            fval.write(name)
    else:
        ftrain.write(name)

ftrainval.close()
ftrain.close()
fval.close()
ftest.close()
  • 修改/darknet/cfg/voc.data文件,class为类别数目,train为训练数据txt所放的位置,valid为validation数据txt所放的位置,names为voc.names所放的位置,backup为模型训练过程中存储模型参数的位置。
    YOLOv3训练自己的数据集_第3张图片
  • 修改/darknet/data/voc.names文件,一行一个类别标签。

在这里插入图片描述

  • 修改/darknet/cfg/yolov3-voc.cfg,用的哪个模型就修改哪个模型的.cfg文件,这边用动是yolov3-voc。

    • 修改batchsize=64和subdivisions=64,batch_size表示每一个批次用来训练的图片张数,subdivisions表示一个批分成几组导入训练。若出现GPU训练动时候提示memory_out可以修改这两个参数试试;
    • filters=75->filters=21,计算公式为filters=3x(classes数目+5);
    • [yolo]子参数下,classes大小改成你的训练数据的类别数目,这边为2,random改成0(关闭多尺度训练,如果显存足够可以置为1)

    YOLOv3训练自己的数据集_第4张图片

    (4)转换XML数据集格式

     将.xml文件转换成.txt文件
    .xml包含了图像名称、图像路径、图像size和深度、标记框的坐标信息
    .txt包含了object-class 、x、y、width、 height。
      在终端输入

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

下载python文件。下载好之后修改其中的内容。这里需要修改两个地方,sets和classes,classes根据自己需要修改。

YOLOv3训练自己的数据集_第5张图片

  接下来运行该文件,我们的目录下会生成三个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.训练及检测

  下载权重:

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

  开始训练:

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

  进行检测:(其中yolov3-voc.weights是你自己训练好的权重,在/darknet/backup

./darknet detector test cfg/voc.data cfg/yolov3-voc.cfg yolov3-voc.weights

参考资料:
https://blog.csdn.net/maozezhong0/article/details/80144641
https://blog.csdn.net/qq_21578849/article/details/84980298

   
   

   

  

你可能感兴趣的:(YOLOv3)