【DeepLearning】Chapter1:一步一步Yolo3自己训练数据

一、前期准备

1、环境配置

1.1 Anaconda
1.2 Python
1.3 Pycharm

这些是需要的软件,在这里不细讲,很多博客有介绍安装教程,而且为免费软件,直接官网下载即可。
python是最基本的软件,可以直接在百度上找官网进行下载,版本选择3.7版本。
不推荐3.6版本的原因:

  • python3.6 安装tensorflow之后需要升级为3.7,否则安装失败
  • tensorflow已经支持python3.7

anaconda和pycharm可以后期再去下载,这里不影响。顺便一提,安装anaconda会顺便安装spyder和jupyter,因此最好不要在python安装jupyter,不然会重复安装。

2、库下载

2.1 Tensorflow
2.2 Keras
2.3 pytorch
2.4 pillow 图片处理模块PIL(pillow)
2.5 matplotlib 2D绘图库matplotlib
2.6 opencv-python opencv视觉库

在很多教程里,这些下载都看似简单,只需要pip install tensorflow或者conda install tensorflow,但是对于网络不好,或者没办法翻墙,这样的方式往往会因为timeout而失败。我尝试过这几种方法

  • 通过anaconda安装。失败,无法下载
  • 通过python安装。失败,timeout
  • 通过python安装,加上 --default-timeout=100,也就是延长时间。前面的小文件下载成功,下载tensorflow依旧失败
  • 使用国内源。成功
  • 使用whl下载安装。成功

这里贴出我尝试过的最好、最方便的方法,适合无法翻墙的人(如有好方法欢迎分享)
因为主要是tensorflow和keras两个下载出问题,其他都很顺利安装上,所以这里只介绍这两个的安装方法
用管理员的方式打开CMD

  • tensorflow

前往 阿里云的镜像源:此处我采用tensorflow-1.15.2-cp37-cp37m-win_amd64.whl版本
把whl下载后,比如我放在D:\download。先d:,再cd \download,接着

pip install tensorflow-1.15.2-cp37-cp37m-win_amd64.whl
  • keras (清华源)
pip install keras -i https://pypi.tuna.tsinghua.edu.cn/simple/ 

在这里插入图片描述
在这里插入图片描述
验证:
进入python–>import tensorflow/keras
出现Using Tensorflow backend,表示使用tensorflow后台,为正常。

注:安装完在python安装的地方,差不多这样子:python\python3.7.2\Lib\site-packages,会看到
在这里插入图片描述在这里插入图片描述
同理,如果是在anaconda安装,也会在保存在ANACONDA\Lib\site-packages。

补充:

在后面运行程序时,可能会出现AttributeError: module ‘keras.backend’ has no attribute to 'control_flow_ops’这样的错误,需要在python\Lib\site-package\keras\backend中,init.py文件加上

from tensorflow.python.ops import control_flow_ops 

在这里插入图片描述

3、资料下载

3.1 keras-yolo3-master百度云链接
提取码:rlkd
这里我是使用一个博主的博客的教程,将其细化,以及贴上我遇到的坑,感兴趣的可以前往:チン昶

3.2 yolo3.weights权重文件

3.3 labelImg
提取码:2gba

二、试跑程序

1、转换权重文件

  • 打开keras-yolo3-master文件,打开cmd,运行
python convert.py yolov3.cfg yolov3.weights model_data/yolo.h5
  • 打开model_data文件,可以看到里面多了个yolo.h5的文件
  • 复制yolo.h5,重命名为yolo_weights.h5

2、运行

python yolo_video.py --image

提示:Input Image Filename时,写入01.jpg
也就是文件里
在这里插入图片描述
结果
在这里插入图片描述

注:
yolo_weights.h5文件是yolo3的preweight,也就是已经经过训练后的权重文件。
打开model_data里,会发现coco_classes.txt和voc_classes.txt,这两个放着classes,一个有80种种类,一个有20种。

三、制作自己的数据

1、制作VOC文件夹

按照这样的格式在keras-yolo3-master创建一个文件夹 ,将要训练和测试的图片放入JPEGImag里面
在这里插入图片描述

2、制作标签

  • 打开labelImg文件夹 → \to data文件夹 → \to predefined_classes.txt
    重写标签(也就是分类,比如car、mirror、cat等,每写一个按enter回车)类似这样子:
    在这里插入图片描述
  • 打开labelImg.exe
  • open,导入图片
  • CreatRectBox,圈出一个矩形区域,选择标签
    在这里插入图片描述
  • Save,保存至 keras-yolo3-master\VOCdevkit\VOC2007\Annotations里面

制作出的xml文件内容入下
在这里插入图片描述

注释:
保持JPEGImag里面图片的名称和Annotatins里面的一致

3、生成索引

在VOC2007文件夹中新建一个**.py文件**
在这里插入图片描述
在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()

运行后,在Mian生成数据集
在这里插入图片描述

四、训练自己的数据

1、修改配置

1.1 修改 voc_annotation.py
把里面的classes换成之前的标签,与这个一致。
在这里插入图片描述 在这里插入图片描述
运行这个py,会产生2007_train.txt,2007_val.txt,2007_train.txt,重命名去掉2007_

1.2 修改 coco_classes.txt 和 voc_classes.txt
删除里面的内容,改成标签,与上面一致
在这里插入图片描述

注意:
这里最后一个词组前往不能加enter回车,不然classes会多出一个

1.3 修改 train.py
根据情况,修改bactch_size和epochs的数值。
在这里插入图片描述

2、运行

python train.py

3、结果

  • 查看anchor和classes是否正确
  • 查看loss有没有下降,loss的趋势
  • 找到logs文件,打开000文件,找到trained_weights_final.h5,复制到model_data里面,重命名为yolo.h5。

五、测试自己的数据

  • 在文件夹里放置要测试的图片
    在这里插入图片描述
  • 运行
python yolo_video.py --image
  • 输入图片名称
    比如我的为2.jpg

六、 优化结果

详情前往:チン昶

备注:
最近我根据チン昶这位博主的博客自己训练了yolo3的数据,根据自己的体验和遇到的问题写了这篇文章,主要在于填补原文比较粗略带过的部分和提供一些可能会遇到跟我一样的情况而耗费时间的问题的解决方法。后期再陆续补充一些内容。最后,非常感谢チン昶提供的资料!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值