MATLAB基于卷积神经网络的口罩检测
- 引言
1.1目的和意义
2020年新冠肺炎席卷全球,新型冠状病毒可以通过呼吸道飞沫等方式传播,正确佩戴口罩可以有效切断新冠肺炎病毒的传播途径,是预防感染的有效措施。国内公众场合要求佩戴口罩。而商场、餐饮、地铁等人员密集型的场所对人流量高峰时段的应对措施往往令人力不从心,会消耗大量的人力资源且容易漏检,因此实现口罩人脸检测与识别能够自动检测是否佩戴口罩,减少防疫工作人员工作量。人脸识别核验身份,抓拍的数据可对接公安平台,进行人员布控和人员聚集管控,也适用于公安抓捕遮挡面部的逃犯等安防场景。
针对该问题,本系统是在复杂场景下的口罩佩戴检测算法,可以自动准确且快速地识别图片或视频中人物是否佩戴口罩,有着重要的应用场景和市场前景。
1.2研究领域现况
1.2.1 卷积神经网络领域现况
卷积神经网络是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。
DenseNet(2018)
传统的卷积网络在一个前向过程中每层只有一个连接,ResNet 增加了残差连接从而增加了信息从一层到下一层的流动。FractalNets 重复组合几个有不同卷积块数量的并行层序列,增加名义上的深度,却保持着网络前向传播短的路径。相类似的操作还有 Stochastic depth 和 Highway Networks 等。
这些模型都显示一个共有的特征,缩短前面层与后面层的路径,其主要的目的都是为了增加不同层之间的信息流动。
图1.1
使用这个密集连接构建了Dense Block。
图1.2
基于信息流动的方式,DenseNet 创新之处有:
传统 L 层的网络仅有 L 个连接,在 DenseNet 中使用了 L(L+1)/2 个连接。这样做有几个明显的优点:避免了梯度消失问题,加强了特征传播,实现特征复用(feature reuse),以及实质上减少了参数量。
下图展示了从2010年起ILVRC(ImageNet Large-Scale Visual Recognition Challenge)历年精确度最高的网络名称和精确度:
图1.3
2021年top1的算法主要使用了EfficientNetV2网络,精确度为90.88%。
EfficientNetV2,它比以前的模型具有更快的训练速度和更好的参数效率。EfficientNetV2在ImageNet和CIFAR/Cars/Flowers数据集上的性能明显优于以前的模型。通过在相同的ImageNet 21k上进行预训练,我们的EfficientNetV2在ImageNet ILSVRC2012上实现了87.3%的top-1精度,比最近的ViT提高了2.0%的精度,同时使用相同的计算资源训练速度加快了5-11倍。
(a)Training efficiency
(b)Parameter efficiency
ImageNet ILSVRC2012 top-1精度与训练时间和参数的对比。标记为21k的模型在ImageNet 21k上进行预训练,其他模型直接在ImageNet ILSVRC2012上进行训练。训练时间是用32TPU核来衡量的。所有EfficientNetV2模型都经过渐进式学习培训。我们的EfficientNetV2训练速度比其他模型快5-11倍,同时使用的参数少6.8倍。
1.2.2 口罩佩戴检测领域领先水平状况
基于2018年百度收录于国际顶级计算机视觉会议ECCV的论文PyramidBox研发,可以在人流密集的公共场景检测海量人脸的同时,将佩戴口罩和未佩戴口罩的人脸快速识别标注。基于此预训练模型,开发者仅需使用少量自有数据,便可快速完成自有场景的模型开发。
口罩人脸检测及分类模型,由两个功能单元组成,可以分别完成口罩人脸的检测和口罩人脸的分类。经测试,模型的人脸检测算法基于faceboxes的主干网络加入了超过10万张口罩人脸数据训练,可在准确率98%的情况下,召回率显著提升30%。而人脸口罩判断模型可实现对人脸是否佩戴口罩的判定,口罩判别准确率达到96.5%,满足常规口罩检测需求。开发者基于自有场景数据还可进行二次模型优化,可进一步提升模型准确率和召回率。
新模型采用了超过十万张图片的训练数据,确保样本量足够且有效。对于实际场景中的光照、口罩遮挡、表情变化、尺度变化等问题,模型具有鲁棒性,并且能够在多种不同端、云设备上实时检测,在落地过程中做到真正实用。
目前,百度提供了两个预训练模型,即服务器端口罩人脸检测及分类模型「pyramidbox_lite_server_mask」、以及移动端口罩人脸检测及分类模型「pyramidbox_lite_mobile_mask」,这两者能满足各种下游任务。
腾讯在人脸检测方面,基于优图开源的DSFD人脸检测算法,针对戴口罩场景下的五官遮挡,腾讯优图在模型设计上进行局部特征增强,提升可见区域权重。同时针对口罩种类丰富、佩戴位置多样等问题,在数据增强方面设计相应策略,提升模型鲁棒性。目前,口罩场景下的人脸检测算法准确率超过99%,召回率超过98%。
在人脸配准(关键点定位)方面,为解决口罩带来的面部区域大范围遮挡问题,基于优图自研的多分支轻量神经网络,优图快速通过图像编辑技术合成海量人脸口罩数据用于算法优化提升,实现戴口罩人员的精准五官定位,有效辅助后续算法模块的效果提升。
在口罩属性识别方面,目前优图算法可精细识别以下五种情形:未佩戴口罩、错误佩戴口罩且遮挡嘴部、错误佩戴口罩且遮挡下巴、错误佩戴口罩未遮挡面部、正确佩戴口罩。该属性识别基于优图开源的FAN属性识别,并针对口罩可能分布的人脸位置,加入更多的attention机制,可精准识别人脸是否正确佩戴。目前,对有无口罩佩戴的识别准确率超过99%。
在戴口罩人脸识别方面,优图提供了一套灵活兼具安全与便利的算法解决方案。利用优图人脸质量模型对被口罩遮挡的人脸进行口罩遮挡判断以及遮挡区域提取两类分析。其中,口罩遮挡判断目前已达99.5%以上准确率。
- 原理及网络结构
2.1算法原理
2.1.1 基本原理
CNN 由许多神经网络层组成。卷积和池化这两种不同类型的层通常是交替的。网络中每个滤波器的深度从左到右增加。最后通常由一个或多个全连接的层组成。
Convnets 背后有三个关键动机:局部感受野、共享权重和池化。
(1)局部感受野
如果想保留图像中的空间信息,那么用像素矩阵表示每个图像是很方便的。然后,编码局部结构的简单方法是将相邻输入神经元的子矩阵连接成属于下一层的单隐藏层神经元。这个单隐藏层神经元代表一个局部感受野。请注意,此操作名为“卷积”,此类网络也因此而得名。
(2)共享权重和偏置
假设想要从原始像素表示中获得移除与输入图像中位置信息无关的相同特征的能力。一个简单的直觉就是对隐藏层中的所有神经元使用相同的权重和偏置。通过这种方式,每层将从图像中学习到独立于位置信息的潜在特征。
理解卷积的一个简单方法是考虑作用于矩阵的滑动窗函数。在下面的例子中,给定输入矩阵 I 和核 K,得到卷积输出。将 3×3 核 K(有时称为滤波器或特征检测器)与输入矩阵逐元素地相乘以得到输出卷积矩阵中的一个元素。
(3)池化层
假设我们要总结一个特征映射的输出。我们可以使用从单个特征映射产生的输出的空间邻接性,并将子矩阵的值聚合成单个输出值,从而合成地描述与该物理区域相关联的含义。
2.1.2 网络中采用的组件
神经网络核心组件包括:
1)层:神经网络的基本结构,将输入张量转换为输出张量
2)模型:层构成的网络
3)损失函数:参数学习的目标函数,通过最小化损失函数来学习各种参数
4)优化器:如何使损失函数最小,这就涉及到优化器
当然这些核心组件不是独立的,它们之间,以及它们与神经网络其他组件之间有密切的关系。
多个层链接在一起组成了网络,将输入数据映射为预测值。然后损失函数将这些预测值与目标进行比较,得到损失值,用于衡量网络预测值与预期结果的匹配程度。优化器使用这个损失值来更新网络的权重。
它们的关系如图所示:
图2.1网络、层、损失函数和优化器之间的关系
层:深度学习的基础组件
神经网络的基本数据结构是层。层是一个数据处理模块,将一个或多个输入张量转换为一个或多个输出张量。
无状态的层:比如池化,没有权重参数
有状态的层:比如dense,Conv2D,有权重参数
根据处理的张量数据不同分类: - 全连接层(fully connected layer):密集连接层(densely connected layer)/密集层(dense layer):简单的向量数据保存在形状为 (samples, features) 的 2D 张量。对应于 Keras 的 Dense 类 - 循环层(recurrent layer):序列数据保存在形状为 (samples, timesteps, features) 的 3D 张量中, Keras 的 LSTM 层 - 卷积层:图像数据保存在 4D 张量中,Keras 的 Conv2D。
2.2网络结构
2.2.1神经网络
基本结构:输入层、隐藏层、输出层。 图2.1中,最左边的层称为输入层,用于数据输入;最右边的层称为输出层,用于预测结果输出。输出层的节点数目是根本实际问题的要求而设定的。 输入层和输出层之间,是逻辑推理层,从用户角度而言是不可见的,因此被称为隐藏层。图2.1的神经网络只含有一个隐藏层,图2.2的网络含有两个隐藏层。在设计神经网络时,隐藏层的层数一般跟问题的复杂度成正比。即,解决复杂的问题,需要更多的隐藏层。
图2.2 图2.3
2.2.2 神经元
在神经网络中,神经元是一个包含输入、计算和输出功能的模型。图3展示了一个典型的神经元模型,包含了3个输入,1个输出和2个运算。箭头线表示神经元之间的“连接”,每个连接上都有1个权重值。 一个神经网络的训练算法就是让权重调整到最佳,以使得网络的预测或分类效果最好。
图2.4
2.2.3卷积神经网络
卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks)。
卷积神经网络主要是用于计算机视觉领域,它指的是一类网络,而不是某一种,其包含很多不同种结构的网络。不同的网络结构通常表现会不一样。
一个简单的卷积神经网络是由各种层按照顺序排列组成,网络中的每个层使用一个可微分的函数将数据从一层传递到下一层。卷积神经网络主要由三种类型的层构成:卷积层,池化层和全连接层。通过将这些层叠加起来,就可以构建一个完整的卷积神经网络。
(1)卷积层
卷积层是卷积神经网络的核心,每个卷积层由多个卷积核组成。当输入图像经过卷积核时,每个通道的图像会与每个卷积核进行卷积操作。前一层的特征图与一个可学习的卷积核进行卷积运算,卷积的结果经过激活函数后的输出形成这一层的神经元,从而构成该层特征图,也称特征提取层,每个神经元的输入与前一层的局部感受野相连接,并提取该局部的特征,一旦该局部特征被提取,它与其它特征之间的位置关系就被确定。
进行卷积运算时,运算结果取决于卷积核覆盖的区域,这个区域之外的其它输入值都不会影响输出值,该区域就是感受野。随着图像数据的下采样,感受野会变大。
对于Keras 的Conv2D 层,这些参数都是向层传入的前几个参数:Conv2D(output_depth, (window_height, window_width))。
卷积的工作原理:在 3D 输入特征图上滑动(slide)这些 3×3 或 5×5 的窗口,在每个可能 的位置停止并提取周围特征的 3D 图块[形状为 (window_height, window_width, input_ depth)]。然后每个 3D 图块与学到的同一个权重矩阵[叫作卷积核(convolution kernel)]做 2 张量积,转换成形状为 (output_depth,) 的 1D 向量。然后对所有这些向量进行空间重组, 使其转换为形状为 (height, width, output_depth) 的 3D 输出特征图。输出特征图中的 每个空间位置都对应于输入特征图中的相同位置(比如输出的右下角包含了输入右下角的信 息)。举个例子,利用 3×3 的窗口,向量 output[i, j, :] 来自 3D 图块 input[i-1:i+1, j-1:j+1, :]。整个过程详见图 2.1。
图2.5 卷积的工作原理
注意,输出的宽度和高度可能与输入的宽度和高度不同。不同的原因可能有两点。 ‰
- 边界效应,可以通过对输入特征图进行填充来抵