YOLO基础教程(四):yolo v3 训练自己的数据集

本代码开发环境:Keras+python+yolo3

  • yolo3 Keras 代码地址: https://github.com/qqwweee/keras-yolo3  (请先下载此文件)
  • 论文地址:YOLO V1  https://pjreddie.com/darknet/yolov1/
  • YOLO V2  https://pjreddie.com/darknet/yolov2/
  • YOLO V3  https://pjreddie.com/media/files/papers/YOLOv3.pdf
  • YOLO V3 中文版  https://zhuanlan.zhihu.com/p/34945787

好,下面开始进入正题,使用yolo3,训练自己的数据集进行目标检测

首先推荐一个数据集网站做前期准备:http://www.robots.ox.ac.uk/~vgg/data/

一、  创建数据集图片文件夹,格式如下,文件夹名称须一致:

YOLO基础教程(四):yolo v3 训练自己的数据集_第1张图片

二、  将所有图片复制到JPEGImage文件夹下,如图:

YOLO基础教程(四):yolo v3 训练自己的数据集_第2张图片

三、  生成Annotations下的的xml文件

所需工具:LabelImg ,链接:https://pan.baidu.com/s/1GJFYcFm5Zlb-c6tIJ2N4hw  密码:h0i5

下载文件后,修改data文件夹下的 predefined_classes.txt 可以改变标签名称。

通过Open Dir 打开图像存放的路径,即JPEGImage文件夹所在位置,按 w 键可以进行标注,标注完 Save 选择保存路径 即可。

YOLO基础教程(四):yolo v3 训练自己的数据集_第3张图片

标注完后,将标注文件,存放在Annotations文件夹下,如图:

YOLO基础教程(四):yolo v3 训练自己的数据集_第4张图片

四、  生成ImageSets/Main文件夹下所需的文件

在VOC2007下建个文件 test.py,代码如下,然后运行即可

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()

五、  生成yolo3所需的 train.txt,val.txt,test.txt

打开 voc_annotation.py 文件,修改class值,改为自己的标签值,如图:

YOLO基础教程(四):yolo v3 训练自己的数据集_第5张图片

然后运行程序,会生成3个TXT文件,将前面的前缀 “2007_  ”删除

六、  修改参数文件yolo3.cfg

IDE里直接打开yolo3.cfg文件,ctrl+f搜 yolo, 总共会搜出3个含有yolo的地方,根据自己的分类数修改

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

                                    classes: len(classes) = 4,我分成了4类

                                    random:原来是1,显存小改为0

YOLO基础教程(四):yolo v3 训练自己的数据集_第6张图片

七、  修改model_data下的文件,改为你的类别,coco,voc这两个文件都需要修改,如图:

YOLO基础教程(四):yolo v3 训练自己的数据集_第7张图片

八、  修改train.py代码,准备训练。

因为程序中有logs/000/目录,你需要创建这样一个目录,这个目录的作用就是存放自己的数据集训练得到的模型。不然程序运行到最后会因为找不到该路径而发生错误。

1.  如果你没有GPU,可以在最前面加上这句话     os.environ["CUDA_VISIBLE_DEVICES"] = "-1"  即采用CPU进行训练

 

YOLO基础教程(四):yolo v3 训练自己的数据集_第8张图片

2.  从头开始训练还是在原来基础上训练   load_pretrained = Ture 时加载之前的权重,在此基础上进行训练,False时从头开始训练

3.  修改训练参数

主要参数有 batch_size 此值越大,对GPU显存要求越大,该开始一直报错就是GPU显存不够用,修改这个值就好了。

epochs 训练是周期数,肯定是越大越好。

YOLO基础教程(四):yolo v3 训练自己的数据集_第9张图片

训练完成后,训练参数存放在 logs/000 文件夹下,其中,有一个名为 trained_weights_final.h5 即为最后生成的权重文件,将此文件复制到model_data文件夹下,并命名为 yolo.h5 即完成训练。

九、  测试

创建一个 self-test.py 文件,里面内容如下:

from yolo import YOLO
from PIL import Image


def detect_image():
    yolo = YOLO()
    images = Image.open("2.jpg")
    result = yolo.detect_image(images)
    yolo.close_session()
    result.show()


detect_image()

即可显示测试结果。

十、  tiny_yolo v3模型训练

tiny_yolo 模型是小型化的 yolo模型,其运行速度较快,可达到实时性检验,修改过程和上述类似,只不过有几个需要注意的地方

1.  train.py文件 

YOLO基础教程(四):yolo v3 训练自己的数据集_第10张图片

2.  yolo.py 文件

YOLO基础教程(四):yolo v3 训练自己的数据集_第11张图片

其他操作与上述内容相同。

 

 

 

 

 

你可能感兴趣的:(YOLO)