时间:2024-05-04
闫新宝,蒋正锋
(广西民族师范学院数理与电子信息工程学院,广西 崇左 532200)
人脸识别是一种依据人脸图像进行身份识别的生物特征识别技术。近年来人脸识别的研究有了很大进展,已在安全验证系统、信用卡验证、档案管理、公安系统的罪犯身份识别、银行和海关的监控、人机交互等领域广泛应用。通常,其难点在于人脸结构相似性导致不同个体之间差异不显著,而同一个体在不同表情、姿态、年龄、光照、遮挡、妆饰等干扰因素下变化显著[1]。传统的人脸识别方法在理想条件下的识别准确率较高,但在非限制条件下,因受到表情、姿态、年龄、光照、遮挡、妆饰等因素的影响,人脸识别准确率会急剧下降。本文分析了基于VGGNet深度卷积神经网络的人脸识别方法,验证了基于VGGNet 深度卷积神经网络的人脸识别方法在非限制条件下的人脸识别中的有效性。
深度学习是一类使用深度神经网络将底层特征组合成更抽象的高层特征表示的机器学习算法。近年来,深度学习极大地推动了人脸识别技术的发展。和传统人脸识别方法不同,深度学习无须人工设计人脸特征,而是通过深度神经网络从训练数据中自动学习更抽象、更本质的人脸特征。深度神经网络中的深度卷积神经网络是目前主流的深度学习网络,AlexNet、VGGNet、GoogleNet 和ResNet 是几个典型的深度卷积神经网络。本节分析了VGGNet深度卷积神经网络的结构和特点。
深度卷积神经网络由卷积层、池化层和全连接层组成。
卷积层是对输入数据矩阵进行特征的采集,卷积层参数包括卷积核、输入数据矩阵的填充(padding)和卷积核的滑动步长(stride)。
如图1 所示,卷积层的输入是一个单通道4×4 的特征图,采用单通道的3×2 的卷积核进行卷积,最终得到一个2×3的特征图,这个特征图就是卷积层的输出特征图。图1中,输入特征图填充为0,卷积核从左到右、从上到下,以步长1在输入特征图上不断滑动遍历计算可得到特征图。输出特征图的尺寸和输入特征图尺寸、输入特征图的填充、卷积核尺寸、滑动步长都有关系。假设输入特征图的大小是w×h,输入特征图的填充为p,卷积核的尺寸是f×f,滑动步长为s,输出特征图的尺寸为w*×h*,则:
图1 单通道单卷积核卷积过程示意
卷积核的通道数和输入特征图的通道数相同,图1中,卷积层输入特征图是单通道的,则卷积核也必须是单通道的,如图2所示,卷积层的输入是一个3通道的3×3特征图,则卷积核的通道数必须是3。
图2 3通道双卷积核卷积过程示意
如果只运用了单个卷积核,提取到的特征图特征性不强,因此一般会采用多个卷积核进行卷积操作,输入特征图与每个卷积核运算都得到一个输出特征图,输入特征图的各通道和卷积核的对应通道分别进行卷积,各个通道的卷积结果相加的结果就是输入特征图与该卷积核的输出特征图。图2中的输入特征图与2个3通道的2×2卷积核进行运算,最终得到2个输出特征图。
激活函数对卷积层的输出结果做非线性映射,常见的激活函数有Sigmoid、Tanh[2]和ReLU[3]。
池化层又称采样层,主要功能是降低数据维度,通过对特征图进行选择和信息过滤来降维。池化过程不仅降低了数据维度,还有效地避免过度拟合以及减轻网络的计算负担。常用的池化方法[4]有最大池化和平均池化。池化层参数包括池化窗口和步长。最大池化如图3所示,以2×2的池化窗口,步长为2,在特征图中滑动,输出值为局部区域的最大值。
图3 最大池化
假设输入特征图的大小是w×h,池化窗口的尺寸是f×f,步长为s,输出特征图的尺寸为w*×h*,则:
全连接层的每一个结点都与上一层的所有结点相连,全连接层在卷积层和池化层之后,在整个网络模型中起到一个分类器的作用。当卷积层、池化层将原来的数据映射到隐含层的特征空间时,全连接层就会把特征映射到样本的标记。
VGGNet 是牛津大学视觉几何研究组(Visual Geometry Group)在2014 年提出的系列深度卷积神经网络,在当年的ImageNet竞赛中获得分类任务组的亚军和检测任务组的冠军。VGGNet系列深度卷积神经网络包括6 种网络结构,层数在11~16 层,最常用的是VGG16,它包括13个卷积层和3个全连接层。与在它之前提出的AlexNet 相比,它通过堆叠多个3×3 卷积核替代7×7 卷积核,这一方面减少了网络参数,另一方面提升了网络的拟合能力。VGG16 的经典网络结构如表1所示。
表1 VGG16的经典网络结构
每个卷积层的特征图填充都为1、滑动步长都为1。每个卷积层之后连接一个ReLU 激活函数。在分类任务中应用VGG16网络时,最后一个全连接层的神经元数设置为分类的类别数。
VGG16 网络中,每个卷积层的卷积核尺寸都为3×3,每个卷积层的特征图填充和滑动步长都为1,所以卷积层不会改变特征图的尺寸。VGG16 网络的每个池化层中,池化窗口尺寸都是2×2,步长都是2,所以经过一个池化层池化后,特征图尺寸缩小为原来的1/2,VGG16 网络中共有5 个池化层,经过5 个池化层池化后,特征图尺寸变为原来的1/32。所以输入VGG16网络中的图像尺寸一般为32的整数倍。
用W×H×C 表示深度卷积神经网络中的特征图,其中,W 表示宽度,H 表示高度,C 表示通道数。VGG16 网络的默认输入样本图像是224×224 的RGB彩色图像,可表示为224×224×3。VGG16 网络对输入图像的处理过程如下:
Step1:输入224×224×3的图像;
Step2:卷积层1进行卷积运算和ReLU激活操作,输出224×224×64的特征图。
Step3:卷积层2进行卷积运算和ReLU激活操作,输出224×224×64的特征图。
Step4:池化层1 进行最大池化操作,输出112×112×64的特征图。
Step5:卷积层3进行卷积运算和ReLU激活操作,输出112×112×128的特征图。
Step6:卷积层4进行卷积运算和ReLU激活操作,输出112×112×128的特征图。
Step7:池化层2 进行最大池化操作,输出56×56×128的特征图。
Step8:卷积层5进行卷积运算和ReLU激活操作,输出56×56×256的特征图。
Step9:卷积层6进行卷积运算和ReLU激活操作,输出56×56×256的特征图。
Step10:卷积层7 进行卷积运算和ReLU 激活操作,输出56×56×256的特征图。
Step11:池化层3进行最大池化操作,输出28×28×128的特征图。
Step12:卷积层8 进行卷积运算和ReLU 激活操作,输出28×28×512的特征图。
Step13:卷积层9 进行卷积运算和ReLU 激活操作,输出28×28×512的特征图。
Step14:卷积层10 进行卷积运算和ReLU 激活操作,输出28×28×512的特征图。
Step15:池化层4进行最大池化操作,输出14×14×512的特征图。
Step16:卷积层11 进行卷积运算和ReLU 激活操作,输出14×14×512的特征图。
Step17:卷积层12 进行卷积运算和ReLU 激活操作,输出14×14×512的特征图。
Step18:卷积层13 进行卷积运算和ReLU 激活操作,输出14×14×512的特征图。
Step19:池化层5 进行最大池化操作,输出7×7×512的特征图。
Step20:池化层5 进行最大池化操作,输出7×7×512的特征图。
Step21:7×7×512 的特征图展平为一个25 088 维(7×7×512=25 088)向量,该向量输入第1个全连接层,第3 个全连接层输出一个1 000 维的向量,使用softmax 函数对该向量进行处理得到另一个1 000 维的向量,该向量所有元素之和为1,第k个元素表示样本预测为第k类的概率。
操作系统:Windows10 64 位,CPU:4 核,内存:32GB,硬盘:2T,开发语言:Python3.6,开发工具:PyCharm,深度学习框架:PyTorch,GPU:使用英伟达的显卡并且安装cuda。
为了验证VGGNet在非限制条件下的人脸识别中的有效性,本文选取FaceScrub 人脸库作为实验数据集,FaceScrub人脸库[5]包含530人的共107 818张人脸照片,平均每人有大约200张人脸照片,所有人脸照片均在非限制场景下拍摄,且都带有标签。实验时,从每个人的人脸照片中随机选取80%的样本作为训练集,另外20%的样本作为测试集。
实验采用VGG16 的经典网络结构,由于FaceScrub 人脸库有530 个类别,所以最后一个全连接层的神经元个数设置为530,softmax 分类器的类别数也设置为530。
为了训练出更好的网络模型,需要对人脸图像进行预处理,预处理主要包括以下几个方面:
1)人脸对齐。
2)为了对网络模型进行更充分的训练,需要扩充人脸图像样本,本实验采用图像镜像变换[6]、随机水平翻转和随机裁剪这三种方法扩充人脸图像样本。
3) 因为VGG16 的默认输入图像是224×224 的RGB 图像,所以把FaceScrub 人脸库的人脸图像尺寸缩放为224×224,然后输入VGG16进行训练和预测。
采用高斯分布随机初始化网络参数,然后用训练集中的样本对网络进行有监督训练,采用加动量的批量梯度下降算法更新网络参数,损失函数采用Softmax loss[7],具体的训练参数如表2所示。
表2 训练参数
训练需要经过多次迭代,在训练前期,网络的损失函数的输出值(loss 值)比较高,随着迭代次数的增加,loss值会逐渐下降,当迭代一定次数后,loss值趋于稳定,不再有明显的变化,此时网络收敛,可以结束训练。
在训练过程中,每完成一次迭代,对测试集中的所有样本进行一次预测,计算出网络的预测准确率,在训练前期网络的预测准确率随着迭代次数的增加逐渐提高,当网络loss值趋于稳定时,预测准确率也趋于稳定,不再有明显提高。实验中测得的最高人脸预测准确率为92.4%。
综上所述,本文研究基于VGGNet 深度卷积神经网络的人脸识别方法。分析了VGGNet深度卷积神经网络的结构和特点。选用FaceScrub人脸数据库作为实验数据集。使用PyTorch 框架进行实验,首先定义VGG16 网络结构,然后对人脸图片进行预处理,最后对网络进行训练和测试,训练时采用SDG+Momentum的批量梯度下降算法更新网络参数,实验取得了较好的人脸识别准确率,验证了基于VGGNet 深度卷积神经网络的人脸识别方法在非限制条件下的人脸识别中的有效性。
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!