本代码开发环境:Keras+python+yolo3
好,下面开始进入正题,使用yolo3,训练自己的数据集进行目标检测
首先推荐一个数据集网站做前期准备:http://www.robots.ox.ac.uk/~vgg/data/
一、 创建数据集图片文件夹,格式如下,文件夹名称须一致:
二、 将所有图片复制到JPEGImage文件夹下,如图:
三、 生成Annotations下的的xml文件
所需工具:LabelImg ,链接:https://pan.baidu.com/s/1GJFYcFm5Zlb-c6tIJ2N4hw 密码:h0i5
下载文件后,修改data文件夹下的 predefined_classes.txt 可以改变标签名称。
通过Open Dir 打开图像存放的路径,即JPEGImage文件夹所在位置,按 w 键可以进行标注,标注完 Save 选择保存路径 即可。
标注完后,将标注文件,存放在Annotations文件夹下,如图:
四、 生成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值,改为自己的标签值,如图:
然后运行程序,会生成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
七、 修改model_data下的文件,改为你的类别,coco,voc这两个文件都需要修改,如图:
八、 修改train.py代码,准备训练。
因为程序中有logs/000/目录,你需要创建这样一个目录,这个目录的作用就是存放自己的数据集训练得到的模型。不然程序运行到最后会因为找不到该路径而发生错误。
1. 如果你没有GPU,可以在最前面加上这句话 os.environ["CUDA_VISIBLE_DEVICES"] = "-1" 即采用CPU进行训练
2. 从头开始训练还是在原来基础上训练 load_pretrained = Ture 时加载之前的权重,在此基础上进行训练,False时从头开始训练
3. 修改训练参数
主要参数有 batch_size 此值越大,对GPU显存要求越大,该开始一直报错就是GPU显存不够用,修改这个值就好了。
epochs 训练是周期数,肯定是越大越好。
训练完成后,训练参数存放在 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文件
2. yolo.py 文件
其他操作与上述内容相同。