博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[YoLoV3目标检测实战] keras+yolov3训练自身口罩检测数据集
阅读量:1888 次
发布时间:2019-04-26

本文共 3802 字,大约阅读时间需要 12 分钟。

[YoLoV3目标检测实战] keras+yolov3训练自身的数据集

本文用keras版本的yolov3来训练人脸口罩数据集,从而完成一个简单的目标检测。

在这里插入图片描述

首先先上目标检测效果,准备好了吗? go!go!go!

看到 目标检测的效果之后,你心动了吗?心动不如行动,让我们放手去干!撸起袖子加油干!

一、环境要求

  • Python: 3.7.4
  • Tensorflow-GPU 1.14.0
  • Keras: 2.2.4

古人云:“工欲善其事必先利其器”。

我们首先要搭建好GPU的环境。有了GPU的环境,才能跑得快!!!

这里为了方便,就用anaconda的conda命令来搭建环境,执行以下几条命令

conda creat -n tensorflow python=3.7

activate tensorflow

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple tensorflow-gpu==1.14.0

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple keras==2.2.4

验证一下是否可以正常使用gpu加速:

python

import tensorflow as tf

sess = tf.Session()

看到下面的画面,即正常加载gpu了,环境搭建就差不多完成了!

二、数据集

我们既然要做目标检测,怎么能没有数据集呢?数据集是驱动模型的动力,就像这样!

这里利用labelImg工具来标注图片,生成对应的xml文件,具体详情看图。

标记好的xml会保存你的矩形框位置,以及类别。

接下来,你就是工具人,请疯狂标注你的数据吧。

三、YoLoV3讲解

在正式开始源码之前,还是稍微讲解一下YoLov3。虽然可能一遍看不懂,两遍看不懂,三遍看不懂,只要你不放弃,总会有看懂的一天的。

其实,你要读懂YoLov3,你就要去了解目标检测的发展史,去看one-stage,two-stage算法。去看YoLov3的前辈们。这里我相信你们都看过,没看过也不怕,光脚的不怕穿鞋的!

直接放YoLoV3的网络结构图,让我们稍微看一下YoLov3的网络结构。

YoLoV3网络主要分成两大部分:

  • 1.主干网络 DarkNet53

  • 2.多尺度预测

1.主干网络DarkNet53

首先是主干网络DarkNet53,结合网络图我们看到它主要是使用了残差块Residual block,这里残差块就是进行一次3X3、步长为2的卷积,然后保存该卷积layer,再进行一次1X1的卷积和一次3X3的卷积,并把这个结果加上layer作为最后的结果.

此外,主干网络DarkNet53每一个卷积使用了特有的DarkNetConv2D结构,这里的DarkNetConv2D是指每一次卷积的时候进行l2正则化,完成卷积后进行BatchNormalization标准化与LeakyReLU。

2.多尺度预测

在多尺度预测部分,可以从网络结构图中看到yolov3提取了3个特征层,这3个特征层分别位于中间层、中下层和底层。

这3个特征层会进行5次卷积,处理完一部分用于输出该特征层对应的预测结果,一部分用于进行反卷积UmSampling2d后与其它特征层进行结合。

输出层的shape分别为(13,13,75),(26,26,75),(52,52,75),最后一个维度为75是因为该图是基于voc数据集的,它的类为20种,即25=(四个坐标+1个置信度+20个类别)。 yolo3针对每一个特征层存在3个先验框,所以最后维度为3x25=75;

至于别的分析,这里就不多说了,直接实战部分了,我知道你们已经迫不及待了!

四、YoLoV3口罩检测实战

写代码,是不可能写代码的!先去github把代码给clone下来,原版的话就是qqwwee的,当然这里也给出我的github,欢迎各位看官光顾!

接下来,就看我的表演了。

1.快速使用篇

首先,我们需要下载yolov3事先已经训练好的权重,yolov3.weights 。然而由于我们用的keras框架,所以我们需要把它给转换一下,执行如下命令将darknet下的yolov3配置文件转换成keras适用的h5文件

python convert.py yolov3.cfg yolov3.weights model_data/yolo.h5

python convert.py yolov3-tiny.cfg yolov3-tiny.weights model_data/yolov3-tiny.h5

但是权重文件这玩意,因为这个墙的问题,时快时慢,我知道你们肯定是这样的:

给你们,都给你们,网盘下载去,

有了权重之后,我们直接运行一下,看一下效果,

python yolo_video.py --image

在命令行输入图片地址img/street.jpg,即可预测

怎么样,效果还是不错的。我知道你要说,可是我要训练我自己的数据集呀,我不要官方的。我知道,我知道,不要急。

2.训练自身数据集

首先在第二部分的时候我们已经准备好了数据集,那让我们继续吧。

将标签文件放在VOCdevkit文件夹下的VOC2007文件夹下的Annotation中。

将图片文件放在VOCdevkit文件夹下的VOC2007文件夹下的JPEGImages中。

之后利用voc2yolo3.py文件生成对应的txt。

VOCdevkit	-VOC2007		├─ImageSets    # 存放数据集列表文件,由voc2yolo3.py文件生成		├─Annotations  # 存放数据集中图片文件		├─JPEGImages   # 存放图片标签,xml 格式		└─voc2yolo3.py # 用来生成数据集列表文件

运行voc2yolo3.py之后会在ImageSets/Main生成如下txt文件

在txt里面存放了图片的名称,这里就不放代码了,我知道放了代码你们也不看,直接去我github里面白嫖就行

但是YoLov3处理的并不是这样的文件,所以我们还需要生成YOLOV3所需数据

再运行根目录voc_annotation.py,运行前需要将voc_annotation文件中classes改成你自己的classes。

我们就会生成这样的一个文件,2007_train.txt,这里面 每一行对应其图片位置及其真实框的位置

好了,让我们中场休息一下!!!

接下来,我准备采取yolov3_tiny架构,当然你也可以用yolov3架构。主要是yolov3-tiny收敛快,而我用的笔记本GPU,跑的速度太慢了~~~

在训练前我们可根据自身需要修改model_data里面的yolo_anchors.txttiny_yolo_anchors.txt,中的先验框的值,这里我们利用kmeans.py来生成。

k=9,生成yolo_anchors;k=6,生成tiny_yolo_anchors。

接着我们来到model_data里面的voc_classes.txt文件中需要将classes改成你自己的classes

然后来到train.py中,通过修改anchor_path,从而选择使用yolov3训练还是yolov3-tiny训练

运行train.py 即可开始训练,训练好的模型会存放在logs下。

你以为大功告成了么,不不不,接下来就是炼丹了,慢慢调参!

四、测试

测试一下,就可以开溜了~~~

修改根目录下yolo.py文件,修改model_path,anchors_path,classes_path替换成·自己的路径`

  • 1.单张图片测试

python yolo_video.py --image,输入图片名称即可

  • 2.电脑摄像头实时检测

python yolo_video.py --input

此外对应的yolo.py文件174行改为vid = cv2.VideoCapture(0)

  • 3.测试本地视频

python yolo_video.py --input

此外对应的yolo.py文件174行改为vid = cv2.VideoCapture(“视频路径+视频名+视频后缀名”);

  • 4.测试本地视频并且保存视频效果

python yolo_video.py --output

此外对应的yolo.py文件184行改为out = cv2.VideoWriter(“视频路径+视频名+视频后缀名”, video_FourCC, video_fps, video_size);

好了,应该差不多快结束了,最后再测试一下,你看。

五、注意:

一张图片最多只能识别20个对象的问题:

  • 1.训练时,要在yolo3文件夹下面的utils.py里,修改get_random_data()函数,有一个默认参数是max_boxes=20,改成很大的数值就行了。

  • 2.检测时,要在yolo3文件夹下面的model.py里,修改yolo_eval()函数,有一个默认参数是max_boxes=20,改成很大的数值就行了。

好了,结束了,欢迎大家留言!!!

转载地址:http://begbf.baihongyu.com/

你可能感兴趣的文章
Kafka主题体系架构-复制、故障转移和并行处理
查看>>
怎么进行负载测试?
查看>>
很全!浅谈几种常用负载均衡架构
查看>>
软件开发人员维护代码指南
查看>>
2019年一线大厂20个长问mongo面试题和答案
查看>>
你写的代码好像一条虫啊!
查看>>
这54个docker命令!你必须懂!
查看>>
2019阿里巴巴面试题+答案
查看>>
30张地图看懂世界格局,用大数据说话
查看>>
性能调优思路
查看>>
腾讯离职,迪士尼给发了offer
查看>>
震惊了!关于JAVA复习的最佳敏捷实践!进BAT就是个毛毛雨!
查看>>
Java自动驾驶:汽车检测
查看>>
百度程序员:经理让背一个绩效4的名额,才批准离职!
查看>>
美团Java面试154道题分享!
查看>>
花了一个星期,我终于把RPC框架整明白了!
查看>>
什么是容器云?
查看>>
大数据告诉你80、90后的真实负债
查看>>
Java 性能调优的 11 个实用技巧
查看>>
HR问“你目前有几个offer”,聪明人会怎么说?
查看>>