基于OpenCV的人脸图像识别系统设计与实现①
2022-08-24胡北辰
胡北辰
(安徽电子信息职业技术学院信息与智能工程系,安徽 蚌埠 233000)
0 引 言
随着人工智能和机器学习(尤其是深度神经网络)技术的发展,人脸图像识别也随之发展。而且,现有的人脸识别精度已经超过人眼。人脸表情识别(Facial Expression Recognition,FER)作为人脸识别技术中的一个关键部分,近年来在各个领域均得到了广泛的关注。情感的声音、手势、面部表情等构成人类情感的因素。在上述因素中,面部表情在情感分析中起着最重要的作用[1]。自动FER系统通常接收以静止图像或者一系列帧作为输入,并输出多种基本普遍情感(例如,愤怒、厌恶、恐惧、幸福、悲伤、惊奇和中立)。FER的常规方法都使用机器学习分类器对提取的内容进行分类(例如,Gabor小波系数[2]、局部二进制模式的直方图(LBP)[3]、定向梯度的直方图(HOG)[4]等)。由于上述的方法对计算能力的需求较大,而且模型较大,因此很少能满足实时要求。本研究基于轻量级的OpenCV软件库,设计人脸表情图像识别系统。
1 基于OpenCV的人脸表情图像识别系统
系统主要包括两部分,如图1所示。
图1 系统框架
1.1 预处理
图像的预处理可能会因各种因素而异,例如采集设备的性能或插图条件的变化。数据预处理是一个重要的过程,数据预处理的一般目的是消除噪声,并对图像的灰度值进行归一化和集中化处理,从而为后续的分类和识别提供坚实的基础。但是,大量的图像预处理可能需要大量的运行时成本,因此实时系统需要在保持准确性的同时减少预处理工作量。
1.1.1 人脸检测
系统中的离线和实时人脸检测是基于OpenCV的Haar级联分类器[5]实现的。在加载了进行预训练的面部XML分类器后,系统将输入图像转换为灰度模式。当分类器检测到人脸后,则返回人脸矩形感兴趣区域(ROI)的四个坐标。然后,使用这四个顶点来裁剪面,以删除不相关的背景。
1.1.2 数据增强
由于CNN的训练过程本身会合并大量数据,因此在CNN的训练过程中通常会使用数据增强。系统首先在Tensor Flow中使用轻量级库将裁剪后的脸部变形,然后将其输入到CNN中。每个裁剪的面都是通过对随机变形边界框进行随机采样得到的。采样斑块的面积是原始图像的[0.85,1],生成图像的数量为100。此外,在重新缩放后,系统采用OpenCV中的filp()函数对图像进行水平随机翻转以生成两倍数据。最后,数据集的大小将增加200倍。
1.1.3 重缩放
由于CNN训练输入必须为正方形,因此数据增强后的所有裁剪图像都将使用OpenCV中的resize()函数重新缩放为48×48像素的图像。选择此48×48重缩放参数的原因是要与FER-2013数据集的分辨率保持一致。重新缩放后,数据被归一化为[-1,1]的范围。
1.2 迁移学习框架
系统所采用的CNN架构是MobileNet的第一个版本(即MobileNet v1),以实现离线和实时的人脸识别。MobileNet v1架构既注重训练速度和模型大小,又易于调整资源和准确性。MobileNet v1的核心是将标准卷积解耦为深度卷积和1×1点式卷积。与其他流行的CNN基准测试(例如Alex Net,GoogleNet,VGG16,SqueezeNet)相比,MobileNet v1所具有的体积小、复杂度低和精确度高的特点使FER任务可以在速度和准确性之间保持良好的平衡。
基于CNN的FER的主要问题是大多数现有面部表情数据集的大小不足。基于CNN的方法学习和提取特征并获得高精度的分类结果需要数以百万计的训练数据,但大多数面部表情数据集的大小仅为数百或数千。使用有限的数据量来训练深度模型非常具有挑战性,因为有限的训练数据可能会引起过拟合问题。另外,在不利用预训练模型的情况下从头开始训练非常耗时。解决此问题的常用方法之一是使用归纳迁移学习,即微调策略。首先使用一组预训练的权重来初始化网络,然后为另一个新的目标任务重新训练这些参数。这些预训练的权重适用于初始化CNN的隐藏层。为了在微调期间进一步弥补CK+和JAFFE数据集的小规模并克服目标任务和源任务之间的差异,系统使用FER-2013数据集。系统的CNN训练方案采用了“两阶段”微调,而不仅仅是执行“一步”微调。如图1所示,该技术是一种“从粗到精”的训练过程。为了利用大型FER-2013数据集,首先通过使用源域中ILSVRC-2012的预训练权重初始化网络,在目标域中微调相对较小的数据集FER-2013。考虑到FER任务和对象分类(目标和源)之间的距离,将此第一阶段微调称为“粗略”微调。从FER-2013获得最佳训练模型后,通过将这些预训练权重集传输到网络,将第二阶段微调步骤应用于JAFFE和CK+数据集。由于目标和源任务在此过程中相同,因此将其称为“精炼”微调。
对于这两种微调方案,最后一个完全连接的层都被一个新的分类层所取代,该分类层对7个类别进行了分类。对于“粗略”微调阶段,从高斯分布中随机初始化第一卷积层的权重集,因为预处理后图像的输入大小为48×48,而原始Mobile Net v1为224×224。第一阶段微调的初始学习率相对较小,设置为0.001,以便从ImageNet调整网络早期层的预训练权重。对于“精炼”微调,由于输入大小相同,即48×48,因此从FER-2013开始将第一层的预训练权重直接设置为初始设置。将初始学习率设置为一个较大的值(如,0.045)以“锁定”早期层的权重,并且重新学习特定数据集的高级功能。
1.3 联合监督
在训练过程中,中心损失(Center Loss)的作用是通过增加特征与其样本的相应类中心之间的距离约束来减少类内差异。中心损失的计算如式(1)所示:
其中x i代表在最终分类层之前提取的第i个深层特征,而c y i代表第y i类的学习中心。在每次迭代中使用小批量策略更新中心,并通过取相应类的深层特征的平均值进行计算。此外,还使用0.001的超参数α来控制每次迭代内更新期间这些中心的学习率,如式(2):
系统中,中心损失与常规softmax损失一起受到监督,用于网络优化的总损失由公式(3)计算:
其中,λ(λ=0.001)是平衡两个损失函数的超参数。系统采用随机梯度下降(SGD)来优化神经网络,以稳定更新并大大加快收敛速度。平均池化层层之后提取的深层特征用于计算中心损失,最后一个完全连接层之后提取的那些元素用来计算softmax损失。算法1总结了学习过程的细节。初始化后,首先在每次迭代期间计算总损失。然后,通过计算反向传播误差的梯度来更新网络的权重和参数。
2 实验评估
系统使用了两个常用的标准数据集:CK+和JAFFE。另外,系统采用的另一个数据集是FER-2013,这是目前最大的面部表情数据集之一。评估中,用于评估的数据不会进行数据扩充。为了进行评估,分别对JAFFE和CK+数据集中的图像进行了随机打乱。然后在CNN训练期间将每个数据集分为五组,其中四组用于训练,一组用于验证。对于FER-2013数据集,分别使用整个训练集和公共测试集进行训练和验证。在反向传播过程中,使用SGD优化器优化了总损失函数,minibatch的大小为64。第一阶段和第二阶段微调的初始学习率分别设置为0.01和0.045。对于“精细”微调,初始学习率设置为比“粗略”微调稍大。每15个训练周期,学习率就会指数下降0.94倍。为了减少过度拟合的发生,系统在平均池化层使用丢弃策略。
首先,进行第一个实验以展示采用这种两阶段微调训练策略的有效性。比较以下两种情况:第一个是直接基于ImageNet从预训练权重进行微调,第二个是使用FER-2013数据集对CK+和JAFFE数据集进行两阶段微调。
对于基于ImageNet的FER-2013的第一阶段微调,该方法在公开测试集上的准确度为67.03%,在私有测试集上的准确度为68.31%。基于FER-2013的最佳预训练模型,然后对CK+和JAFFE数据集进行第二阶段的微调。为了验证这种两阶段微调方法的有效性,直接基于ImageNet对CK+和JAFFE数据集进行微调以进行比较。表1中显示了两种情况的准确率比较。从表1中可以看出,采用两阶段微调策略可以提高准确性。
表1 两阶段微调的对比
该实验评估中心损失对于改善结果的优越性。对JAFFE和CK+数据集进行了比较,中心损失的λ和α固定为0.001。比较了采用联合监督情况以及仅使用softmax损失进行监督的一种情况。表2中列出了两种情况下获得的准确度和准确度的提高,这表明使用中心损失作为额外的监督信号可以提高准确性。
表2 联合监督的有效性实验
表3呈现了本系统与现有文献在JAFFE数据集上的比较结果。与采用几何或外观特征提取技术的常规方法(如参考文献[3,4]提出的方法)相比,本系统不仅不需要人工进行特征提取,而且可以超过先前工作的最大准确性。尽管先前的一项研究[6](也应用了DCNN)达到了98.12%的准确率,略高于我们的结果,但分类的时间成本却比我们高得多。
表3 JAFFE数据集的对比结果
接下来评估本系统在数据集CK+上的性能,表4呈现了不同分类数量下本系统的准确度。如表4所示,当需要评估的类数量增加,目标任务变得更加复杂,因此准确性会略有下降。
表4 CK+数据集的实验结果
3 结 语
利用了迁移学习和联合监督策略,提出了基于OpenCV实现的人脸表情图像识别系统。所提出的系统优于传统的机器学习方法,消除了复杂的特征提取所需的大量人力,并且在获得最新结果时不需要大量的预处理过程。在未来的工作中,我们将考虑头部姿势变化对人脸识别的影响。