口罩佩戴检测
一 题目背景
1.1 实验介绍
今年一场席卷全球的新型冠状病毒给人们带来了沉重的生命财产的损失。有效防御这种传染病毒的方法就是积极佩戴口罩。我国对此也采取了严肃的措施,在公共场合要求人们必须佩戴口罩。在本次实验中,我们要建立一个目标检测的模型,可以识别图中的人是否佩戴了口罩。
1.2 实验要求
- 建立深度学习模型,检测出图中的人是否佩戴了口罩,并将其尽可能调整到最佳状态。
- 学习经典的模型 MTCNN 和 MobileNet 的结构。
- 学习训练时的方法。
1.3 实验环境
实验使用重要_python_包:
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
from tensorflow.keras.callbacks import ModelCheckpoint, ReduceLROnPlateau, EarlyStopping
由于担心平台_GPU时长不够用,所以在自己电脑上搭建了配套实验环境,由于电脑显卡CUDA_版本较老,所以最终本地配置如下:
- Python: 3.8
- Tensorflow-GPU: 2.3.0
- Keras: 2.7.0
1.4 实验思路
针对目标检测的任务,可以分为两个部分:目标识别和位置检测。通常情况下,特征提取需要由特有的特征提取神经网络来完成,如 VGG、MobileNet、ResNet 等,这些特征提取网络往往被称为 Backbone 。而在 BackBone 后面接全连接层***(FC)***就可以执行分类任务。但 FC 对目标的位置识别乏力。经过算法的发展,当前主要以特定的功能网络来代替 FC 的作用,如 Mask-Rcnn、SSD、YOLO 等。我们选择充分使用已有的人脸检测的模型,再训练一个识别口罩的模型,从而提高训练的开支、增强模型的准确率。
常规目标检测:
本次案例:
图1 实验口罩佩戴检测流程
二 实验内容
2.1 已知文件与数据集
首先,导入已经写好的_python_文件并对数据集进行处理。
- image 文件夹:图片分成两类,戴口罩的和没有戴口罩的
- train.txt: 存放的是 image 文件夹下对应图片的标签
- keras_model_data 文件夹:存放 keras 框架相关预训练好的模型
2.2 图片尺寸调整
将图片尺寸调整到网络输入的图片尺寸
2.3 制作训练时需要用到的批量数据集
图片生成器的主要方法:
-
fit(x, augment=False, rounds=1)
:计算依赖于数据的变换所需要的统计信息(均值方差等)。 -
flow(self, X, y, batch_size=32, shuffle=True, seed=None, save_to_dir=None, save_prefix='', save_format='png')
:接收 Numpy 数组和标签为参数,生成经过数据提升或标准化后的batch
数据,并在一个无限循环中不断的返回batch
数据。 -
flow_from_directory(directory)
: 以文件夹路径为参数,会从路径推测label
,生成经过数据提升/归一化后的数据,在一个无限循环中无限产生batch
数据。
结果:
Found 693 images belonging to 2 classes.
Found 76 images belonging to 2 classes.
{'mask': 0, 'nomask': 1}
{0: 'mask', 1: 'nomask'}
2.4 调用MTCNN
通过搭建 MTCNN 网络实现人脸检测
-
keras_py/mtcnn.py
文件是在搭建 MTCNN 网络。 -
keras_py/face_rec.py
文件是在绘制人脸检测的矩形框。这里直接使用现有的表现较好的 MTCNN 的三个权重文件,它们已经保存在
datasets/5f680a696ec9b83bb0037081-momodel/data/keras_model_data
文件夹下
2.5 加载预训练模型MobileNet
# 加载 MobileNet 的预训练模型权重
weights_path = basic_path + 'keras_model_data/mobilenet_1_0_224_tf_no_top.h5'
2.6 训练模型
2.6.1 加载和保存
为了避免训练过程中遇到断电等突发事件,导致模型训练成果无法保存。我们可以通过 ModelCheckpoint
规定在固定迭代次数后保存模型。同时,我们设置在下一次重启训练时,会检查是