【深度学习】人脸识别和口罩检测的应用

这把我C 2021-07-09 11:16:51 5867

【深度学习】人脸识别和口罩检测的应用

文章目录
1 概述
2 人脸识别模型搭建与训练
3 口罩检测
    3.1 数据来源
    3.2 YoloV4简介
    3.3 数据集处理
    3.4 开始训练
    3.5 测试

在这里插入图片描述

1 概述

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

训练结果
在这里插入图片描述

import cv2
from 人脸检测与识别 import CNNModel        # 引入训练代码中的模型对象

if __name__ == '__main__':

    # 加载模型
    model = CNNModel()
    model.load_model(file_path='./cascadeface.model.h5')
    # 人脸识别矩形框
    color = (0, 255, 0)
    # 人脸识别分类器路径
    cascade_path = './haarcascade_frontalface_default.xml'

    image = cv2.imread('jiangwen.jpg')
    image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

    # 读入分类器
    cascade = cv2.CascadeClassifier(cascade_path)
    # 利用分类器识别人脸区域
    faceRects = cascade.detectMultiScale(image_gray, scaleFactor=1.2, minNeighbors=5, minSize=(32, 32))

    if len(faceRects) > 0:
        for faceRect in faceRects:
            x, y, w, h = faceRect
            # 截取图像脸部提交给识别模型识别
            img = image[y-10: y + h + 10, x-10: x + w + 10]
            faceID = model.face_predict(image)
            if faceID == 0:
                cv2.rectangle(image, (x - 10, y - 10), (x + w + 10, y + h + 10), color, thickness=2)
                cv2.putText(image,
                            'jiangwen',
                            (x + 30, y + 30),           # 坐标
                            cv2.FONT_HERSHEY_SIMPLEX,   # 字体
                            1,                          # 字号
                            (0, 0, 255),                # 颜色
                            1)                          # 字的线宽
            elif faceID == 1:
                cv2.rectangle(image, (x - 10, y - 10), (x + w + 10, y + h + 10), color, thickness=2)
                cv2.putText(image,
                            'zhangziyi',
                            (x + 30, y + 30),
                            cv2.FONT_HERSHEY_SIMPLEX,
                            1,
                            (0, 0, 255),
                            1)
            else:
                pass

    cv2.imshow('image', image)
    cv2.waitKey(0)

在这里插入图片描述

3 口罩检测

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文件。
在这里插入图片描述

编译:

使用 Git 获取代码
git clone https://github.com/AlexeyAB/darknet.git
cd darknet
打开Powershell终端并启动
.\build.ps1

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 测试

能够正确识别有无佩戴口罩。
在这里插入图片描述

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包 92 2 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
这把我C
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区