基于Keras+YOLOv3的口罩佩戴情况检测系统【超详细!!!保姆级教程】
基于Keras+YOLOv3的⼝罩佩戴情况检测系统【超详细保姆级教程】
⽬录
1. 开发环境
硬件环境(个⼈笔记本电脑)
处理器:Inter(R)Core(TM)i7-9750H CPU
内存:8.00GB
显卡:NVDIA GeForce GTX 1650
硬盘:可⽤空间300GB以上
高情商生日句子软件环境
win10 64位
python3.7.0
TensorFlow-GPU 1.13.1
Keras2.2.4
OpenCV4.2.0
PyQt5
当然还有很多python的模块包,但是我这⾥记不清啦~如果有需要pip install就可以~
关于开发环境稍后我会专门写⼀篇博客详细介绍,帮助⼤家避雷。很多⼩⽩可能还没机会感受AI的快乐就被配置环境劝退了哈哈哈,想当初我也是踩了很多很多坑,说多了都是泪啊 ~
YOLOv3的原理不和⼤家讲了,毕竟不是⼀句两句话能说清的,对于初学者来说肯定有些难理解,不过没关系,⼤家⼀开始都是初学者,慢慢来别放弃,总有⼀天⼤家都能看懂原理 ~
但是要和⼤家展⽰⼀下下载下来的yolov3⽂件夹结构,为了⽅便描述,博主就称它为根⽬录吧 ~
就是下图,有⼀个⼤概的印象,便于后⾯我们复现。这个⽂件夹我在评论区给到⼤家 ~~
2. 制作数据集
配置好环境后,我们要准备⾃⼰的⼈脸⼝罩数据集了!
要检测⼝罩佩戴情况,就要先获取⼀定数量的相关图⽚,放⼊设计好的神经⽹络中训练(本⽂是YOLOv3),这些相关图⽚就叫做数据集,啊当然不只是单纯的图⽚,我们还要对这些图⽚做⼀些处理,也就是本章内容。
笔者的数据集是从⼀位⽼前辈那⾥求来的,是⼀个⾮常完美⾮常OK的数据集,省的⼤家⾃⼰去爬⾍了。
数据集包含6366张⾼质量图⽚,有戴⼝罩的⼈、不戴⼝罩的⼈、⽤⼿或其他物品遮挡脸的⼈等多种情况,确保样本的多样性和全⾯性。
数据集⽂件夹VOCdevkit在根⽬录⾥,结构见下图。其中,
JPEGImages⽂件夹存放收集到的原始图⽚,依次以1-6366命名;
Annotations⽂件夹存放使⽤labelImg⼯具⽣成的含有所有⽬标位置和类别信息的图⽚标签,每个⽂件对应⼀张图⽚(具体怎么⽣成下⾯马上讲到);
ImageSets⽂件夹存放数据集列表⽂件,通常为、等,分类并保存不同⽤途的图像(听不懂没关系下⾯都会讲到)。
1. 制作图像的.xml⽂件
我们使⽤labelImg⼿动标注,如下图:选择界⾯左侧的“Open”打开图像后,点击“Create RectBox”画框,就可以画矩形框并标记(类别会在画好⽬标框后⾃动弹出以供选择)。
labelimg这个⼯具能够在⼀张图⽚中标注多个⽬标,⾮常⽅便。关于labelimg的详细使⽤⽅法。
不过我知道你们都懒得亲⾃动⼿做,所以我把我的数据集分享给你们。
将所有⽣成的标签⽂件放⼊Annotations⽂件夹中,便完成了数据集制作的第⼀步,每个图⽚和⽣成的xml⽂件是⼀⼀对应的。
2. 将.xml⽂件转换成.txt⽂件
上⼀步制作出原始图像的.xml⽂件后,还需要将所有图像分类。
运⾏VOCdevkit->VOC2007下的voc2yolo3.py⽂件,记得检查⼀下其中的xmlfilepath和saveBasePath路径,xmlfilepath对应Annotations,saveBasePath对应ImageSets/Main
多说⼏句,下图是voc2yolo3.py中的主要代码,它的⽤途是:⼀般我们设训练验证集 : 训练集 = 1 : 9,训练验证集中10%⽤作验证集,90%⽤作测试集。
运⾏完voc2yolo3.py这个神奇的⽂件后,我们就得到了, , 和这四个⽂件(在
VOCdevkit\VOC2007\ImageSets\Main⽂件夹下),分类保存不同⽤途的图⽚名称。
3. 将.jpg⽂件转换成.txt⽂件
完成训练集的划分之后,我们运⾏voc_annotation.py⽂件(⽂件位置在根⽬录)。这样⼀来,可以⽣成, 和三个⽂件(也在根⽬录),分别保存着训练、验证和测试集的路径。
我随便打开⼀个⽐如train⽂件给⼤家瞅⼀眼,这些⽂本⽂档中每⼀⾏为⼀张图⽚的信息,依次是图⽚的路径、名称、尺⼨和⽬标框的坐标及类别标签(0表⽰没⼝罩,1表⽰有⼝罩)。
如果⼀张图中有多个对象,则依次罗列各个对象的位置信息和类别。
怎样提高成绩还要再强调⼀下,路径问题是导致出错的主要原因,咱们⼤家每个⼈电脑的情况都不同,所以⼀定要仔细检查核对⾃⼰的路径哈 ~~
3. 修改配置⽂件
1. 下载YOLOv3预训练权重——yolov3.weights.然后执⾏如下命令将darknet下的yolov3配置⽂件转换成keras适⽤的h5⽂件:
10部值得看10遍小说
两⾏命令,其中上⾯⼀⾏是yolov3,下⾯⼀⾏是tiny轻量版yolov3。tiny yolo⽹络结构⽐yolo简单⼀些,训练得⽐较快,因为我笔记本配置⼀般,所以我就选择tiny版来进⾏训练的,效果也OK。
2. 修改model_data⾥⾯和tiny_中的先验框的值,这⾥我们利⽤kmeans.py(在根⽬录下)来⽣
成。
⽣成先验框的时候注意:打开kmeans.py翻到最下⾯第98⾏,
如果是标准版yolov3,则修改为cluster_number = 9,对应第 61 ⾏ f = open(“”, ‘w’),
如果是轻量版yolov3,则修改为cluster_number = 6,对应第 61 ⾏ f = open(“tiny_”, ‘w’)。
3. 接着我们来到model_data⽂件夹,将⾥⾯的⽂件中的classes改成⾃⼰的classes。
这个要和voc_annotation.py⽂件第7⾏对应,⽐如我第7⾏是classes = [“face”, “face_mask”],那么我⽂件中就应该是face(此处省略回车换⾏)face_mask。
⾄此,我们的⼈脸⼝罩数据集和基本配置⽂件就已经准备完毕了,然后我们可以去睡觉了 ~ 其他的就听天命吧 ~
4. 训练数据集
啊睡觉之前还有最后⼀步:在根⽬录下新建⼀个logs⽂件夹,然后运⾏train.py,再然后就是漫长的训练过程,训练好的模型存放在logs 下。
博主第⼀次训练时batchsize设置为2,⼤概训练了五六个⼩时,效果⽐较差,于是把batchsize调整到10⼜训练了⼤概⼀天吧(害⽐较久远了我也记不太清,反正就是训练了很久很久),最后得到的模型效果就⽐较好了。如果⼤家有什么提⾼模型精度和速度的⽅法也欢迎分享~
这次真的可以去睡觉/吃⽕锅/吃⽠/玩耍了!
5. 检测效果
耍完了睡饱了,电脑也训练好了,接下来就是见证奇迹的时刻,鸡不鸡冻?超级鸡冻的!
好了淡定⼀下,然后去logs⽂件夹下,把“trained_weights_final.h5”⽂件名复制⼀下,是的没错它就是我们最终训练出的最优的模型(笑
复制了之后打开根⽬录下yolo.py⽂件,把第23⾏model_path改为logs/trained_weights_final.h5
然后第24⾏如果你想⽤轻量版那就model_data/tiny_,标准版就model_data/
改好之后保存。
然后正式开始检测。敲键盘win+r,如下图
输⼊cmd,点击确定,进⼊命令⾏
⽤“cd”命令切换到根⽬录下,⽐如在我的电脑上,这套代码的位置是
C:\Users\13262\Desktop\graduationProject\yolov3_keras_GUI\yolov3_keras_GUI,那就在命令⾏中输⼊“cd
C:\Users\13262\Desktop\graduationProject\yolov3_keras_GUI\yolov3_keras_GUI”如下图
然后运⾏yolo_video.py程序,分为以下3种情况 :
1. 如果想开启摄像头实时检测,则输⼊“python yolo_video.py --input",回车后程序启动,不附图了。
2. 如果想上传本地图⽚检测,则输⼊"python yolo_video.py --image",回车后程序启动,如下图
红框处输⼊图⽚路径和名称,如果图⽚在当前⽂件夹下(如我给的代码中图⽚保存在img⽂件夹下),则直接输⼊“.\img\XXX".
举个栗⼦:,回车后变成这样
顺便弹出来图⽚,哈哈,⼤功告成了~
3. 如果想上传本地视频检测,则先将yolo.py第174⾏vid = cv2.VideoCapture(0)改为
国外洗碗机vid = cv2.VideoCapture(video_path),然后在命令⾏输⼊“python yolo_video.py --input xxx”,xxx表⽰上传的视频的路径和名称,回车后程序启动。
4. 如果想上传本地视频检测并保存,那么除了第3点的步骤之外,还要在yolo.py第172⾏
def detect_video(yolo, video_path, output_path=""):中补充保存路径,如:output_path=“C:\Users\xxx\xxxxx”.
6. UI界⾯实现
模型训练好了,效果也看到了,接下来如果能集成⼀个UI界⾯就显得超酷了!
博主采⽤PyQt5进⾏设计,⾸先看⼀下最后的效果GIF图,运⾏后的界⾯如下,因为csdn不允许上传
太⼤的图⽚,所以我把界⾯的三个功能分成三张图⽚上传
留言板主人寄语图片
去马赛克1. 打开摄像头实时检测

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。