提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
本文主要介绍一下如何配置yolo3-keras环境来进行模型训练。
这方面网上乱七八糟的资料很多,如果你有这方面的需要并且恰好看到了这篇文章,请耐下性子看下去。因为这个比较靠谱。
一、所用到的版本
1、python = = 3.6
2、yolov3
3、TensorFlow-GPU = = 1.15 (这里强烈推荐GPU训练,因为要比CPU快太多太多了,况且重新安装CUDA和CUDNN并不麻烦)
4、CUDA= =10.0 CUDNN= =7.6.5
5、Keras = = 2.3.1
下载传送
(1) yolov3及官方权重文件
https://pan.baidu.com/s/1IvqfJgS1H7reYQCm3EU6Kw 提取码:6hcy
(2) Keras 和TensorFlow
直接用命令行下载即可
pip install tensorflow-gpu==1.15.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install keras ==2.3.1 -i https://pypi.tuna.tsinghua.edu.cn/simple
(3) CUDA 和CUDNN
CUDA : https://developer.nvidia.com/cuda-toolkit-archive
CUDNN: https://developer.nvidia.com/rdp/cudnn-archive
安装步骤参考 这两个
安装参考这两个,点击此处即可(1)
安装参考这两个,点击此处即可(2)
二、训练自己的模型
1.打开下载的yolo文件夹
打开界面如下:
2.建立如下目录
创建如下的目录
test.py的代码如下:
import os
import random
trainval_percent = 0.2
train_percent = 0.8
xmlfilepath = 'VOCdevkit/VOC2007/Annotations'
txtsavepath = 'VOCdevkit/VOC2007/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('VOCdevkit/VOC2007/ImageSets/Main/trainval.txt', 'w')
ftest = open('VOCdevkit/VOC2007/ImageSets/Main/test.txt', 'w')
ftrain = open('VOCdevkit/VOC2007/ImageSets/Main/train.txt', 'w')
fval = open('VOCdevkit/VOC2007/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()
这里说明一下
logs/000:用来放训练生成的权重文件
JPEGImages:用来存放拍摄目标物体的图片
Annotations:用来存放 标记后生成xml文件(下面会介绍)
ImageSets/Main:用来存放运行test.py后生成的数据文件
3.标记目标
此次用的软件为labelimg,这个很简单2分钟就可学会
具体下载和使用方法可参考这个博主写的
点击此处可跳转
4.修改配置
第一处修改
在voc_annotation.py下修改classes里的内容,我训练,想要识别的的是一个矿泉水,所以我删除了其它内容。(记得和打标签时的拼写统一)
第二处修改
按图示修改
注: 很多博客下都修改了yolo3.cfg文件,其实我们用的是keras并没有用到,所以不用修改。但是要是使用darknet就要修改了。
4.运行test.py文件
运行成功后会生成如下文件:
5.运行train.py文件
开始训练自己的数据集
标红的部分建议改为1,太高的话训练时容易显存跑满报错。
寻
这是成功训练的图
6.漫长的等待
… . … … … … … … …
… . … … … … … … …
7.把生成权重文件转化成.h5文件
在命令行下输入 python convert.py yolov3.cfg yolov3.weights model_data/ yolo.h5(这个看你生成的权重文件是什么名字)
vscode下在这输入即可
8.进行识别
打开yolo.py文件
下载的这个是不全的,在最底下要加上这段才能运行。
然后把刚才转换的.h5权重文件放到指定目录,并在yolo.py修改相关文件名。(见图片)
!!然后就可以开始识别了!!
视频的话上传太麻烦了,如果需要的再联系我吧。
我最后训练的loss值在4左右。
还有一个要注意的地方,我当时训练完以后,识别本地的图片可以但是外接摄像头就没办法识别。这可能是因为训练时是RGB,但CV里读取是按GBR。后来我在如下地方更改了一下就可以识别了。
如果大家遇到和我一样的问题,可以参考一下。
.
由于距当时实际操作有些时间,可能有些地方不是很完善。有问题的话或者操作过程中有解决不了的报错问题,大家可以在文章底下留言,我会尽全力为大家解决的。