基于机器学习的人脸检测系统的设计与现实
2020-07-04彭涛
摘 要:人们在生活上对安全和便捷要求越来越高,人脸检测在近年开始被广泛应用,使人们的生活购物、信息保障等方面都得到了质的提升,所以人脸检测的研究实现是非常有必要的。文章设计了一个基于机器学习的人脸检测系统。主要方法使用了MTCNN模型框架进行人脸候选框以及人脸特征点的预测,通过多个阶段的预测与筛选,最后得出准确的人脸框以及5个人脸特征点。
关键词:人脸检测;机器学习;MTCNN
中图分类号:TP391.41 文献标识码:A 文章编号:2096-4706(2020)03-0094-03
Abstract:People are increasingly demanding safety and convenience in their lives. Face detection has been widely used in recent years,which has led to a qualitative improvement in peoples life shopping and information security,So the research and implementation of face detection is very necessary. This paper designs a face detection system based on machine learning. The main method uses the MTCNN model framework to predict the face candidate frame and face feature points. Through multiple stages of prediction and screening,the final result is the accurate face frame and five face feature points.
Keywords:face detection;machine learning;MTCNN
0 引 言
笔者在读硕士期间,对机器学习和人脸检测做了一定研究,积累了一些经验和资料。作为高校教师,每次课堂点到需要很长时间,这样不仅耽误了课堂教学的进程,也浪费了学生的时间,基于此,本文利用笔者读硕期间所学知识开发一个基于机器学习的人脸检测系统,通过该系统完成点到,解决传统点到的弊端。人脸检测是图像处理的重要组成部分,也是计算机视觉的一个重要研究领域,在智能安防、人机交互及免密身份验证等方面有着非常广泛的应用。本文以基于机器学习的人脸检测为切入点,设计并实现了基于机器学习的人脸检测系统,更好地为我校教师教学过程中学生点到服务。
1 系统概述
1.1 训练集图片剪裁
对人脸检测模型进行训练之前,需要对PNet、RNet、ONet三个网络模型训练图片进行处理,本人脸检测模型使用WIDER_FACE与LFW人脸数据作为训练使用的数据集,该模块通过数据标注信息表,该表提供了每张图片的路径、图中人脸的数量、每个人脸框的坐标位置以及5个人脸特征点的坐标,使用该表对图片的人脸框进行剪裁,并输出新的图片以及对新剪裁图片进行坐标信息的标注等。值得注意的是,MTCNN提出了除正负样本的制作外还使用了部分困难样本,将随机剪裁正确人脸IOU在正负样本之间的样本,标签设为人脸。部分样本的制作,在训练模型时能够提升其检测的准确性和鲁棒性。
1.2 网络模型搭建
进行训练所使用的数据集处理完之后,就需要对网络模型的框架进行搭建。根据机器学习大致框架,确定各层PNet、RNet和ONet的输入大小,filter参数设置,池化层kernel参数设置以及确定三个输出端的连接方式。
1.3 检测模型训练
在训练的模块上,需要对三层网络逐一进行训练,由于网络相对较小,所以训练速度也比较快。在网络模型搭建和训练上,本系统使用Tensorflow环境进行模型的搭建和训练。
1.4 第一阶段候选框检测
在对图像进行检测前,需要构造图像金字塔,即将图像变换成一系列大小的图像,这样能使不同大小的人脸都能够尽可能缩放成PNet模型,能够检测人脸的大小输入。根据卷积神经网络各个层具有大小不同的感受野,从不同层提取多个尺度的特征向量分别进行人脸分类与回归,并将网络的全连接层改成卷积层,以适应不同大小的图片输入。将变换好的所有图片逐一输入PNet模型中进行前向传播,得到每个12*12区域是否是人臉的概率,再将所有判断为人脸的区域进行反映射,得出该区域在原图的坐标值。得出所有人脸候选框,再进行NMS非极大值抑制,舍弃重叠值过高的候选框。多任务物体检测网络同时输出了物体的类别和物体的回归框。
1.5 第二阶段候选框检测模块
在第一阶段模块对图片进行大致的检测筛选之后,会得出较多的候选框,并且重复率较高,通过将第一阶段得到的候选框进行图片裁剪,再逐一输入RNet模型中进行进一步的检测筛选,将人脸概率值小的进行舍弃,保留概率高的人脸候选框,再进行NMS处理。
1.6 第三阶段候选框检测模块
在前两个阶段处理过后,得出人脸候选框,在该阶段继续进行进一步检测筛选,该过程和第二阶段类似,在此之上,添加5个人脸特征点的检测,将第二阶段筛选得出的人脸图片作为第三阶段模型的输入,进行前向传播过后,分别得到人脸的概率值,人脸候选框的坐标值以及5个人脸特征点的坐标值。再对所有候选框进行NMS处理,得出最后的人脸候选框和特征点坐标。
2 系统核心功能设计与实现
2.1 訓练集图片处理模块设计与实现
训练集制作模块包括对PNet、RNet与ONet三层网络进行训练集的制作,其中包括人脸样本、非人脸样本、困难样本以及人脸特征点样本的制作。因为选用WIDER_FACE数据集只标注人脸候选框的位置,所以人脸样本、非人脸样本和困难(部分)样本都是用WIDER_FACE数据集制作。Wider Face Dataset包含非常丰富的人脸样本,数量巨大,而且人脸样本的尺度、姿态、遮挡以及光照条件变化很大。而人脸特征点样本则使用已经标注好人脸特征点信息的LFW数据集进行制作。该模块中,除了需要对样本图片进行剪裁,还需要对每个图片信息进行标注,标注格式包括剪裁之后的图片路径名,label值,以及每个样本的详细信息(人脸样本与困难样本为候选框坐标,人脸特征点样本则为5个特征点坐标)。
2.2 检测模型搭建模块设计与实现
在三层卷积网络模型中,都需要进行通过卷积层进行特征提取和最后的全连接操作,所以在实现模型搭建的过程中,构造卷积函数和全连接函数接口,使得在每层使用卷积层操作的时候只需添加卷积filter、池化kernel和步长等参数,并不需要每个网络都重写一遍卷积的代码。该函数接口核心代码如下所示:
PNet层中,第一层为输入层,该层输入为预测待测图片,大小不确定,因此将最后一层全连接层改为全卷积层,在第一层卷积conv1中,filter设置为3*3大小,滑动步长为1,filter数量为10,池化层kernel大小设置为2*2,步长为2。第二层conv2与第一层参数类似,filter数量设为16。conv3同上,但filter数量设置为32,在前三层卷积操作完成后,分别对输出进行3个输出端的运算,对于人脸分类器,使用全卷积,即将卷积核大小设为1*1,对每个卷积核大小的特征单独提取出两个最终值,最后通过softmax进行人脸和非人脸概率计算。对于人脸候选框的输出端,与以上类似使用全卷积提取,不同的是该分支输出是进行人脸候选框左上角与右下角坐标的检测,所以最终输出需要提取出4个预测值。而第三个输出分支对5个人脸特征点进行预测,则使用全卷积后提取出10个预测值。对于RNet层与ONet层后面两层架构的实现,由于网络模型框架与PNet差别不大,参数稍有不同,因此实现过程与第一层PNet层类似,这里不再多做赘述。
2.3 检测模型训练模块设计与实现
在模型训练模块上,因为训练样本集都已经制作完成,PNet、RNet和ONet三层网络的训练都是前向传播后,再通过反向传播进行参数的更新,总体相差无几,所以主要是对loss值的计算进行讨论和对PNet训练进行讨论。PNet训练模块实现上,首先,使用tensorflow框架进行训练,事先定义好前向传播过程,再计算loss值,对于PNet、RNet和ONet三层每层都需要进行三个输出,需要三个对应loss值,在进行第一个输出端loss值的计算上,因为样本有4种类型,这里人脸分类器的loss值计算只针对样本label为1与0,即人脸与非人脸两个正负样本进行计算,损失函数的选择上使用因为进行了softmax二分类计算概率,这里使用交叉熵函数;其次,对于第二个输出端处理人脸候选框loss值,使用欧氏距离进行计算,此处的loss值计算针对样本label为1和-1,即人脸与部分样本,当样本label为其他值时,loss值算为0,最后进行loss值取平均时不作计算;最后,第三个输出端口处理人脸特征点预测的loss值,与人脸候选框的loss值一样,使用欧氏距离对真实的坐标与预测的坐标进行计算,这里,样本的label选取为-2,即人脸特征点样本。
通过前向传播,计算完loss值之后,使用tensorflow进行反向传播进行权重参数的更新。到此一次更新结束,本系统模型训练迭代次数设为100 000次,所以重复上述过程,进行100 000次迭代训练。对其余两个网络模型RNet和ONet进行训练,因为网络的输出端都是一样的,所以loss值的计算继续沿用,训练过程和上述类似,不再赘述。
2.4 第一阶段候选框检测模块设计与实现
第一阶段的检测实现主要分为三部分:图像scale变换、图片PNet检测筛选和NMS非极大值抑制筛选。图像scale变换子模块中,将变换最小的图片下限设为12*12,且将缩放系数设为0.75,将原图进行图像金字塔构造。进行scale变换后,依次将每个缩放后的图片进行PNet层输入运算,得到三个输出,包括face_label(该检测区域为人脸的概率值)、face_box(该区域人脸候选框的坐标)、landmark(5个人脸特征点坐标),因为检测的感受野为12*12,再通过滑动窗口的原理计算进行反映射,计算得出该点检测的区域在原图的坐标。得到每一个区域的人脸概率后,将概率值小于0.8的候选框舍弃,保留大于0.8的候选框。再使用NMS进行覆盖率较高的候选框进行舍弃,初步产出可能为人脸的候选框。该阶段模块的核心代码实现如下所示:
2.5 第二阶段候选框检测模块设计与实现
在第一阶段实现后,产生了多个PNet认为是人脸置信度高的候选框坐标之后,进行第二阶段的进一步筛选处理。将第一阶段得到的候选框坐标,在原图上进行剪裁得到多张候选框图片,由于RNet层网络模型使用全连接层,因此输入图片大小需要固定值,则将所有剪裁得到后的图片使用OpenCV函数resize()调整大小为24*24,然后作为RNet层的输入,进行前向传播运算,最后得到每张图片的人脸概率值、人脸候选框坐标以及人脸特征点坐标。同第一阶段操作,将人脸候选框图片人脸概率值小于0.8的进行舍弃,然后再通过NMS进行重复率高的候选框舍弃,最终得到第二阶段筛选后的人脸候选框坐标。
2.6 第三阶段候选框检测模块设计与实现
经过前两个阶段模型的筛选处理后,基本已经将大部分粗糙和误检的候选框进行淘汰,最后一阶段,处理继续精细筛选人脸候选框,最重要的一步,是将人脸特征点进行预测以及反映射。ONet与PNet、RNet对比,ONet层才说得上真正用上了landmark的预测坐标值。该阶段实现过程与第二阶段相差无几,不同的是,此阶段连续进行了两次NMS筛选操作,并且在最后不仅返回人脸候选框坐标值,并且也将候选框置信度以及5个人脸特征点坐标值进行保存返回,最后在原图上进行候选框和人脸特征点的标注。
3 结 论
本文主要研究的是基于机器学习的人脸检测系统,在对检测系统进行划分时,根据检测人脸图像流程将系统分为六个模块:对人脸检测模型训练集图片剪裁处理模块;预测模型搭建模块;预测模型训练模块;第一阶段候选框检测模块;第二阶段候选框筛选模块;第三阶段候选框再筛选以及人脸特征点预测模块。
参考文献:
[1] 吴彤,陈灿灿,张翔.人脸识别应用算法性能测试简述 [J].中国安全防范技术与应用,2019(1):14-16.
[2] 常思远,李有乘,孙培岩,等.一种基于MTCNN的视频人脸检测及识别方法 [J].许昌学院学报,2019,38(2):149-152.
[3] 徐冬阳.人脸检测与识别技术的发展及应用 [J].电子世界,2018(1):193-194.
作者简介:彭涛(1974-),女,汉族,江西龙南人,讲师,硕士,主要研究方向:计算机应用。