Windows下用keras-yolov3训练自己的数据集

记yolov3快速上手

    • 参考代码
    • 数据集标注
    • 使用VOC2007数据集,新建如下文件夹
    • 生成训练集/验证集
    • 生成yolo3所需训练集/验证集
    • 修改参数文件yolov3.cfg
    • 修改voc_classes.txt文件
    • 修改train.py文件
    • 开始训练自己的模型
    • 等待训练
    • 修改模型位置
    • 预测数据

参考代码

qqwwee: keras-yolo3

数据集标注

使用labelimage标注工具,自行百度即可,如果遇到闪退情况,亲测可通过pip安装解决,自行百度。

使用VOC2007数据集,新建如下文件夹

Windows下用keras-yolov3训练自己的数据集_第1张图片

生成训练集/验证集

运行如下代码。

import os
import random

trainval_percent = 0.8
train_percent = 1
xmlfilepath = 'Annotations'#自行修改路径(xml文件地址)
txtsavepath = 'ImageSets\Main'#自行修改路径(四个txt文件所在地址)
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所需训练集/验证集

上面已经完成了voc2007数据集的制作,但是yolov3并不能直接使用这些数据集,所以我们要生成yolov3可以使用的数据集
运行keras-yolov3目录中的voc_annotation.py文件。
注:需要将原有的类别修改成自己的类别(代码以cat/dog为例)

import xml.etree.ElementTree as ET
from os import getcwd

sets=[('2007', 'train'), ('2007', 'val'), ('2007', 'test')]

classes = ["cat","dog"]


def convert_annotation(image_id, list_file):
    in_file = open('../VOCdevkit/VOC2007/Annotations/%s.xml'%(image_id),encoding='utf-8')
    tree=ET.parse(in_file)
    root = tree.getroot()

    for obj in root.iter('object'):
        difficult = obj.find('difficult').text
        cls = obj.find('name').text
        if cls not in classes or int(difficult)==1:
            continue
        cls_id = classes.index(cls)
        xmlbox = obj.find('bndbox')
        b = (int(xmlbox.find('xmin').text), int(xmlbox.find('ymin').text), int(xmlbox.find('xmax').text), int(xmlbox.find('ymax').text))
        list_file.write(" " + ",".join([str(a) for a in b]) + ',' + str(cls_id))

wd = getcwd()

for year, image_set in sets:
    image_ids = open('../VOCdevkit/VOC%s/ImageSets/Main/%s.txt'%(year, image_set)).read().strip().split()
    list_file = open('%s_%s.txt'%(year, image_set), 'w')
    for image_id in image_ids:
        list_file.write('../VOCdevkit/VOC2007/JPEGImages/%s.jpg'%(image_id))
        convert_annotation(image_id, list_file)
        list_file.write('\n')
    list_file.close()

运行完之后,会生成如下三个txt文件
在这里插入图片描述
手动删除2007_
Windows下用keras-yolov3训练自己的数据集_第2张图片

修改参数文件yolov3.cfg

咱们使用pycharm或者记事本直接打开yolov3.cfg,Ctrl+F直接搜关键词yolo,全文共有3个yolo关键词,都按照下图格式修改。
Windows下用keras-yolov3训练自己的数据集_第3张图片

修改voc_classes.txt文件

将其中的类别改成自己的标注的类别,以cat/dog为例
Windows下用keras-yolov3训练自己的数据集_第4张图片
Windows下用keras-yolov3训练自己的数据集_第5张图片

修改train.py文件

直接找到这个函数,修改这个箭头所指参数为false
Windows下用keras-yolov3训练自己的数据集_第6张图片

开始训练自己的模型

下面直接运行train.py文件

等待训练

出现以下界面即开始训练,等待即可
Windows下用keras-yolov3训练自己的数据集_第7张图片

修改模型位置

训练完成之后,会在logs/000目录之下生成一个名为trained_weights_final.h5的h5文件。打开yolo.py文件,修改其中的如下参数
Windows下用keras-yolov3训练自己的数据集_第8张图片

预测数据

yolo_video.py文件所在目录,即以下目录打开命令行窗口
Windows下用keras-yolov3训练自己的数据集_第9张图片
键入python yolo_video.py -h 以查看帮助
Windows下用keras-yolov3训练自己的数据集_第10张图片
预测图片为例,命令为:python yolo_video.py --image
Windows下用keras-yolov3训练自己的数据集_第11张图片
会看到提示输入文件名,键入文件地址回车即可
Windows下用keras-yolov3训练自己的数据集_第12张图片

你可能感兴趣的:(机器学习,深度学习,tensorflow,机器学习)