当前位置:   article > 正文

yolo3训练自己的模型 基于TensorFlow-keras( python)_自己训练yolov3的h5模型

自己训练yolov3的h5模型

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

本文主要介绍一下如何配置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()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

这里说明一下
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。后来我在如下地方更改了一下就可以识别了。
如果大家遇到和我一样的问题,可以参考一下。
在这里插入图片描述

.
由于距当时实际操作有些时间,可能有些地方不是很完善。有问题的话或者操作过程中有解决不了的报错问题,大家可以在文章底下留言,我会尽全力为大家解决的。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/387786
推荐阅读
相关标签
  

闽ICP备14008679号