APP下载

基于卷积神经网络的课堂人脸打卡算法

2019-11-22涂鑫

现代计算机 2019年29期
关键词:关键点人脸卷积

涂鑫

(四川大学锦城学院计算机与软件工程学院,成都610065)

0 引言

在如今的在各类学校的教学中,为了监督学生是否按时上课,教师是否起到应有的监督作用,从而使课前点名成为了衡量学生的学习情况以及教师的教学质量的一项重要的参考指标。但在现行的课堂考勤方式中,教师需对学生的到位情况一一确认,是非常耗费课堂时间,降低课堂的效率以及增加了教师的工作负担。为了提高课堂的利用率,降低时间成本,在课堂中运用计算机视觉技术对课堂中的学生进行快速检测以及识别,使其降低人工清点学生到位情况的时间,从而提高课堂时间的利用效率。

为了实现上述方法,本文提出了一种结合Dlib 人脸检测器与卷积神经网络的课堂环境下的人脸打卡算法,主要工作可简述如下:利用Dlib 68 个人脸关键点提取器提取人脸特征并识别出人脸区域,并通过OpenCV 对人脸区域进行抠取保存;之后,通过基于Keras 框架构建卷积神经网络(CNN),将保存的人脸区域通过数据处理后送入网络,经过3 层卷积层,Flatten层,最后全连接层,Softmax 层输出个分类标签的概率;其中,本文使用ReLU 函数作为激活函数,避免了梯度消失问题,使模型的收敛速度维持在一个稳定的状态。最后,训练数据通过选择通用人脸数据和真实课堂场景数据结合对卷积神经网络进行训练,从而是训练结果不仅更加符合真实场景下的使用,而且也不使卷积神经网络过拟合。

通过实验验证,本文提出的算法在课堂场景下的图像中有着较理想的正确率。

1 基本原理

1.1 Dlib人脸检测器

Dlib 是一个基于C++的跨平台通用的框架库,其中包含机器学习算法和工具,并且广泛的应用在图像处理、数据处理和高性能计算中。本文采用的提取68个人脸关键点算法[1]是以梯度提升树(Gradient Boosting Decision Tree,GBDT)[2]为基础,构建残差树从而实现对人脸关键点提取。

首先,输入的具有人脸的图像数据,对图像中的人脸区域进行判断和处理,由于在每份图像数据中,人脸的尺寸不同,所以利用仿射变换[3]将处理后的人脸关键点仿射到单位空间内,使尺寸和坐标统一,从而避免不同尺寸带来的影响。将图像数据中的人脸关键点做平均处理,使其成为人脸的初始形状,然后再基于初始形状进行残差计算从而拟合人脸关键点。

然后在初始关键点的范围内随机采样像素作为对应的特征像素点。特征像素点选择最接近的初始关键点作为参照,并计算偏差。当前像素点通过旋转、转换、伸缩后的坐标系要与初始关键点(关键点的平均位置)接近,即最小化之间的距离平方[4],得到最优变换后的参数。最优变换后的参数作用于偏差,加上当前自身的像素位置,得到当前关键点的特征像素点。

最后在得到关键点的特征像素点后开始构建残差树,计算当前关键点与目标关键点的偏差。

得到特征像素点后开始构建残差树,计算出当前关键点与目标关键点的偏差。通过特征像素点,利用模拟退火的方法[5]选择多个分割点,进行左右树划分,选择最小化划分后的偏差为最优分割点。其中最小化目标公式为:

其中ri是每个图关键点的残差,而μθ,S是对应子树的残差均值,即:

分割样本,其后基于样本的平均残差更新当前关键点位置。回到上一步骤,重新选择出特征关键点,拟合下一颗残差树,最终综合所有残差树的结果,即得到关键点位置。最终,Dlib 人脸检测器步骤如图1 所示。

图1 Dlib人脸检测器步骤图

1.2 卷积神经网络

近年来,随着数据量的剧增以及计算机硬件的发展,广泛应用于图像,视频中的卷积神经网络得到了充分的发展,从最初的LeNet[6]、AlexNet[7]、VggNet[8]到目前目标的Faster R-CNN[9]等以简单的神经网络发展到复杂的网络,使其向跟加深层次的发展,但是随着网络深度不断增加,也随之出现了一系列的问题,如梯度消失或梯度爆炸,准确率降低,过拟合以及数据消失等。针对上述问题,考虑到课堂人脸打卡的实际应用以及其算法所需要的训练数据量不大,本文提出了基于LeNet的改进网络,通过在全连接层部分增加一层全连接,使越接近输出层时,神经元个数越接近输出层个数,从而增加网络训练速度以及提高模型准确率。本文的网络基本模型结构如图2 所示。

图2 卷积神经网络结构图

本文中所构建的卷积神经网络是采用两层卷积层以及三层全连接层的方式组成。在全连接层之间加入Dropout 层,从而提高网络模型的泛化能力。具体而言,本文所提出的卷积神经网络的具体参数如表1所示。

1.3 神经网络损失函数

课堂人脸打卡算法最终需要得到是具体人脸所以应的人名。但是能够通过模型训练得出我们所期望的结果的则是分类损失函数,本文中所使用的分类损失函数是交叉熵函数[10],其表达式如下:

其中,xi是卷积神经网络所输出的值,Wyi代表网络学习到的权重值,bj表示偏置,m 表示mini-batch 的数值,n 代表所需分类的类别。交叉熵函数的输出数值是描述的是目标输出概率与实际输出概率的距离,交叉熵输出数值大小越小,则表明实际输出概率值越靠近真实的输出的概率值。

表1 卷积神经网络的具体参数

1.4 神经网络激活函数

在整个卷积神经网络做训练的过程中,激活函数在每一层的结构中有着至关重要的作用,它能使网络中的每一层的输入输出去线性化,从而使非线性模型比线性模型的特征能够更好地保留下来以及有更好的表达力。

经常使用的激活函数Sigmoid[11]函数来提高模型的非线性能力,他能把一个实数压缩到0 到1 之前,即一个非常大的正数会趋近于1,一个非常大的负数会趋近于0。但是当趋近于0 或1 的数过多时会形成饱和,使输入激活后梯度几乎为0,从而产生梯度消失。Sigmoid 函数表达式为:

Sigmoid 函数图像如图3。

图3

本文采用的是ReLU[12]作为激活函数,其最大的优点是没有任何指数级的运算,能很好地提升网络的运算速度,并且由于ReLU 的负半轴为0,所以会使一部分神经元的输出为0,这样就会让网络产生稀疏性,使网络中的参数减小了相互之间的依赖,从而缓和过拟合问题和避免了梯度消失。

ReLU 函数的表达式为:

ReLU 函数的图像如图4。

图4

2 实验

2.1 测试环境

平台:Windows 10。

编程语言:Python。

网络框架:Keras。

框架版本:Open CV 4.0;Dlib 19.7;Keras 2.2.4;TensorFLow 1.10.0。

图像库:CelebFaces[13];自行采集的课堂图像。

2.2 人脸检测算法测试

本次测试,直接调用了Dlib 人脸提取器,使其在CelebFaces 图像库中选取了460 张不同场景的人脸图片,正确检测出人脸个数为445 张,检测率为96.7%,平均每张图片检测时间为13ms/张。没有检测出人脸的照片数为15 张,漏检率为3.3%,通过观察漏检照片,漏检原因大部分为人脸部分有遮挡,例如带有墨镜、抽烟等,以及面部的倾斜角度较大,只有半边脸等。

2.3 人脸识别算法测试

在提前准备的课堂照片数据集中抽取33 人,每人10 张图片,共计330 张样本图片,以7:3 的比例分割样本图片,即随机选取70%的样本图片为训练集,30%的样本图片测试集。

在实验训练过程中,在测试集中随机打乱输入样本的顺序,利用上述的卷积神经网络的方式对人脸识别进行测试,最终在测试集样本上的结果为86.4%。随后,通过对测试集样本的旋转,调整亮度的方式增加测试样本集的数量后,二次对卷积神经网络进行训练,得出最终在测试集样本上的结果为88.8%,如图5所示。

图5 测试集准确率

在网络模型训练过程中,模型在训练集和验证集中准确率和损失值的变化趋势,如图6 和图7 所示。

图6 训练过程中网络模型准确率变化图

测试结果表明,测试样本的数量对网络模型的训练结果是有影响的。可以知道提供的训练样本数量越多,模型的训练结果准确率则越高。所以在后期课堂人脸识别打卡应用中,需要尽可能地采集更多的数据来不断训练模型,从而增加模型的准确率。

图7 训练过程中网络模型损失值变化图

3 结语

针对课堂这一特殊的应用场景,本文提出了一种基于Dlib 人脸检测器和卷积神经网络相结合的课堂人脸打卡算法。本文使用Dlib 中的人脸关键点提取器对人脸进行检测,并通过基于Keras 框架构建的卷积神经网络对人脸进行检测;同时使用交叉熵损失函数,使识别后的分类结果更加准确,并且选择了适当的激活函数,使整个卷积神经网络去线性化。最终本文所提出的方法在测试集中得到了较理想的准确率。

猜你喜欢

关键点人脸卷积
基于全卷积神经网络的猪背膘厚快速准确测定
论建筑工程管理关键点
肉兔育肥抓好七个关键点
一种基于卷积神经网络的地磁基准图构建方法
基于3D-Winograd的快速卷积算法设计及FPGA实现
有特点的人脸
一种并行不对称空洞卷积模块①
一起学画人脸
玻璃窗上的人脸
利用定义法破解关键点