1.下载源码
git clone https://github.com/qqwweee/keras-yolo3.git
2.下载预训练的yolov3权重
官网:https://pjreddie.com/darknet/yolo/
下载好后,放在项目主文件夹下
运行 convert.py
python convert.py yolov3.cfg yolov3.weights model_data/yolo.h5
运行完后会在model_data/文件夹下生成yolo.h5
------------------------------
或者...
转化好的yolo.h5文件可在百度网盘链接直接下载 下载后放在model_data
百度网盘:https://pan.baidu.com/s/18KibISOlIVYpNctgcKI9XA 提取码:mfsm
3 简单测试一下
修改yolo.py文件,
修改加载的路径
在最后加上以下代码
测试图片 :
#测试图片
if __name__ == '__main__':
import cv2
img=cv2.imread('1.png')#图片路径
img = Image.fromarray(img[..., ::-1]) # bgr to rgb
yolo=YOLO()
img = yolo.detect_image(img)
img=np.asarray(img)
cv2.imshow('1',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
可在第四行修改图片路径
若测试视频,则在最后加上以下代码:
if __name__ == '__main__':
import cv2
vdo=cv2.VideoCapture(0)
yolo=YOLO()
while 1:
ret,frame=vdo.read()
if ret:
frame = Image.fromarray(frame[..., ::-1]) # bgr to rgb
frame = yolo.detect_image(frame)
frame=np.asarray(frame)
cv2.imshow('1', frame[...,::-1])
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cv2.destroyAllWindows()
第三行修改视频路径
测试结果:
4.制作voc格式数据集
尽量有几百张图像才能做训练集
(1)安装labelimg
方法1:pip install labelImg
然后直接cmd输入lableimg即可运行
方法2:git clone https://github.com/tzutalin/labelImg
运行labelimg.py
(2)快捷键
常用:ctrl+u 打开目录 ctrl+s保存 w创建矩形框 d、a上一张下一张
(3)整理格式、创建训练文件夹路径
labelimg默认将标注的xml文件保存在图像文件夹下,可以在所有图像标注完成过后一起把xml复制出来
创建voc格式的目录:
在keras—yolo项目目录下创建文件夹结构如下
--VOCdevkit
|----VOC2007
|-------Annotations
|-------ImageSets
|-------Main
|-------JPEGImages
|-------make_text.py
Annotations:用于存放labelimg保存的所有xml文件
ImageSets/Main:存放训练集、测试集、验收集的文件列表的txt
JPEGImages:用于存放所有原始图像,文件名跟Annotations对应
make_text.py代码如下
import os
import random
trainval_percent = 0.8
train_percent = 0.75
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:
ftrain.write(name)
else:
fval.write(name)
else:
ftest.write(name)
ftrainval.close()
ftrain.close()
fval.close()
ftest .close()
第三行 trainval_percent 为train+val占全部图片的比例 ,若不需要test集则改为1
第四行 train_percent 为 train集占train+val的比例,可自行调整。
运行后在Main文件夹下生成4个txt文件
总体结构如下
(4)VOC转YOLOv3训练文件
打开voc_annotation.py
将classes改为自己标记的类别
运行,会生成三个txt文件
(5)修改cfg文件
打开yolov3.cfg
修改这两个地方
classes改为你需要的类别数量
filter : filters=3*(cls+5) 计算方法见https://blog.csdn.net/davidlee8086/article/details/79693079
训练----------------------------------------------------------------------
在model_data/文件夹下创建my_classes.txt
按行输入你的检测类别
如:
打开train.py
修改
两个txt文件的路径
log_dir为保存训练模型的路径
从52行开始,先冻结最后三层之外的所有层来训练最后三层,
57行修改batch size 电脑配置配置低可以改小,
epochs根据自己经验来修改
从68行开始 ,释放所有冻结层的参数开始训练 显存不够batchsize可改为1
训练好的h5文件 回到yolo修改加载模型路径就可以拿来用了 大概loss到15左右