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

[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,欢迎各位看官光顾!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

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

给你们,都给你们,网盘下载去,权重链接 提取码0imy

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

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,改成很大的数值就行了。

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

github github

发布了488 篇原创文章 · 获赞 474 · 访问量 36万+

猜你喜欢

转载自blog.csdn.net/Mind_programmonkey/article/details/104348106