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

1 篇文章 0 订阅
1 篇文章 0 订阅

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


前言

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

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

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值