<
>

记Windows下用yolov3/keras/tensorflow训练自己的数据集(不涉及原理)

2020-06-28 10:02:49 来源:易采站长站 作者:易采站长站整理

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

刚接触深度学习,尝试用yolov3训练自己的数据集,查了很多有关的资料,走了一些弯路,故写一篇博客记快速上手方法,不涉及原理,抛砖引玉,供大家参考。

参考代码

qqwwee: keras-yolo3

数据集标注

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

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

在这里插入图片描述

生成训练集/验证集

运行如下代码。

import os
import random

trainval_percent = 0.8
train_percent = 1
xmlfilepath = 'Annotations'#自行修改路径(xml文件地址)
txtsavepath = 'ImageSetsMain'#自行修改路径(四个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

暂时禁止评论

微信扫一扫

易采站长站微信账号