【深度学习】人脸识别和口罩检测的应用
文章目录 1 概述 2 人脸识别模型搭建与训练 3 口罩检测 3.1 数据来源 3.2 YoloV4简介 3.3 数据集处理 3.4 开始训练 3.5 测试1、数据集说明:这里用到数据集来自于百度AI Studio平台的公共数据集,属于实验数据集,数据集本身较小因而会影响深度网络最终训练的准确率。数据集链接:[https://aistudio.baidu.com/aistudio/datasetdetail/8325]:
2、使用说明:数据集解压缩后有四类标注图像,此次只使用其中两类做一个简单的二分类,如有其他分类需求可自行修改相关的训练代码,本人在此使用“jiangwen”和“zhangziyi”的分类。
(需要说明的是,我这里的face数据集文件夹放在项目文件夹下,项目文件夹是cascadeFace)
实现思路:使用OpenCV中提供的Haar级联分类器进行面部检测,扣取Haar分类器检测到的面部图像,到已经训练好的AlexNet卷积模型中获取识别结果(当然我们将自己构建AlexNet并训练它)。关于Haar的使用,我将在后面的测试代码部分讲解;关于Haar的理论知识请参考[https://www.cnblogs.com/zyly/p/9410563.html];
2 人脸识别模型搭建与训练模型结构介绍
说明:这个结构参考图很好的展示了AlexNet网络模型,AlexNet虽然如今已经是相对简单基础的卷积模型,但其参数量依然庞大,用作分类任务时其全连接层的百万级参数量成为训练网络的负担,我们使用Dropout对半丢弃结点。还有一点需要说的就是我们的这次实验在输入数据的尺寸与上网络结构图所显示的不太一样,具体的情况请阅读接下来所展示的模型搭建与训练代码。
模型参数表
(alexnet) Layer (type) Output Shape Param # conv2d_31 (Conv2D) (None, 55, 55, 96) 28896 _________________________________________________________________ activation_47 (Activation) (None, 55, 55, 96) 0 _________________________________________________________________ max_pooling2d_19 (MaxPooling (None, 27, 27, 96) 0 _________________________________________________________________ conv2d_32 (Conv2D) (None, 27, 27, 256) 614656 _________________________________________________________________ activation_48 (Activation) (None, 27, 27, 256) 0 _________________________________________________________________ max_pooling2d_20(MaxPooling) (None, 13, 13, 256) 0 _________________________________________________________________ conv2d_33 (Conv2D) (None, 13, 13, 384) 885120 _________________________________________________________________ activation_49 (Activation) (None, 13, 13, 384) 0 _________________________________________________________________ conv2d_34 (Conv2D) (None, 13, 13, 384) 1327488 _________________________________________________________________ activation_50 (Activation) (None, 13, 13, 384) 0 _________________________________________________________________ conv2d_35 (Conv2D) (None, 13, 13, 256) 884992 _________________________________________________________________ activation_51 (Activation) (None, 13, 13, 256) 0 _________________________________________________________________ max_pooling2d_21(MaxPooling) (None, 6, 6, 256) 0 _________________________________________________________________ flatten_5 (Flatten) (None, 9216) 0 _________________________________________________________________ dense_17 (Dense) (None, 4096) 37752832 _________________________________________________________________ activation_52 (Activation) (None, 4096) 0 _________________________________________________________________ dropout_15 (Dropout) (None, 4096) 0 _________________________________________________________________ dense_18 (Dense) (None, 4096) 16781312 _________________________________________________________________ activation_53 (Activation) (None, 4096) 0 _________________________________________________________________ dropout_16 (Dropout) (None, 4096) 0 _________________________________________________________________ dense_19 (Dense) (None, 2) 8194训练结果
3.1 数据来源
AIZOO 数据集:https://github.com/AIZOOTech/FaceMaskDetection
RMFD 数据集 https://github.com/X-zhangyang/Real-World-Masked-Face-Dataset
自定义数据集:爬虫收集类似手捂脸等挡住脸的图片,并进行标注。
3.2 YoloV4简介
输入端:Mosaic 数据增强,cmBN,SAT 自对抗训练。
Mosaic 数据增强
Mosaic 采用 4 张图片,以 随机缩放、随机裁剪、随机排布 的方式进行拼接。 丰富了数据集:随机使用 4 张图片,随机缩放(增加了很多小目标),随机分布进行拼接。 减少 GPU:一个 GPU 就可以达到比较好的效果。
3.3 数据集处理
对数据集进行清洗筛选后,共有 110200张图片:AIZOO 数据集(8000 张),RMFD 数据集( 3000 张),自定义数据集(200张)。
使用 labelImg 工具对所有图片进行标注(mask 和 nomask),生成xml文件。
3.4 开始训练
darknet.exe detector train data/mask.data cfg/yolo-mask.cfg yolov4.conv.137 如需查看训练效果可以使用 mAP 计算进行训练。 darknet.exe detector train data/mask.data cfg/yolo-mask.cfg yolov4.conv.137 -map 迭代大概了4000步的效果图,mAP已经达到了91%(单个CPU:NVIDIA GeForce GTX 1050 Ti,训练了快24个小时)。3.5 测试
能够正确识别有无佩戴口罩。