qqwwee: keras-yolo3
使用labelimage标注工具,自行百度即可,如果遇到闪退情况,亲测可通过pip安装解决,自行百度。
运行如下代码。
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()
上面已经完成了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()
咱们使用pycharm或者记事本直接打开yolov3.cfg,Ctrl+F直接搜关键词yolo,全文共有3个yolo关键词,都按照下图格式修改。
下面直接运行train.py文件
训练完成之后,会在logs/000目录之下生成一个名为trained_weights_final.h5的h5文件。打开yolo.py文件,修改其中的如下参数
在yolo_video.py文件所在目录,即以下目录打开命令行窗口
键入python yolo_video.py -h 以查看帮助
预测图片为例,命令为:python yolo_video.py --image
会看到提示输入文件名,键入文件地址回车即可