基于深度学习的面部动作单元识别算法
2020-05-07王德勋虞慧群范贵生
王德勋, 虞慧群, 范贵生
(1. 华东理工大学计算机科学与工程系,上海 200237;2. 上海市计算机软件测评重点实验室,上海 201112)
面部动作单元(Facial Action Unit, AU)是构成人脸表情的基本成分,它描述了面部各区域肌肉群的运动情况。不同区域的肌肉运动构成的动作单元由不同的AU编号表示,例如AU4表示眉毛被周围肌肉群带动压低并聚拢形成的皱眉动作;AU25表示当控制颌部关闭的肌肉群放松时所形成的张嘴动作。研究人员通过分析不同人脸表情的结构与差异,发布了面部动作编码系统(Facial Action Coding System,FACS)[1],规定了包括皱眉、皱鼻和闭眼在内的43种面部动作单元。通过计算机自动地识别出面部动作单元及其组合,准确地检测出面部微小动作单元的变化,从而有助于分析人脸表情与理解情绪,在贷款审批、疲劳驾驶检测和心理疾病治疗等多个场景中有很好的应用前景。
随着面部动作单元识别成为图像处理和计算机视觉的一项极富挑战性的任务,很多基于几何特征的算法被提出,如Kotsia等[2]通过定位五官的关键点位置并利用点之间形成的距离、形状或面积等特征来识别。随着近几年深度学习的发展,以卷积神经网络为基础的深度学习算法也被研究人员使用并证明了其在该任务上的有效性。通过大量数据的支撑、精细的数据预处理与精心设计的目标函数,深度网络能自动学习到关键与鲁棒的抽象特征并加以分类识别。不同的算法旨在解决面部动作识别任务中存在的不同难点,主要包括以下几个方面:
(1)大部分动作单元具有不平衡的样本数量,例如对于闭眼(AU43),标签为0(眼睛睁开)的样本数量远多于标签为1(眼睛闭合)的数量。类别不平衡会导致模型在训练过程中更偏向预测多数类而忽略少数类等问题。
(2)不同的光照、种族、人脸姿态和分辨率等可变因素,造成了人脸图像区域具有极高的差异与多样性。
(3)虽然迁移学习已经通过ImageNet图像分类等竞赛证明了其有效性,但在AU识别任务上并没有具有代表性的预训练模型,相关的研究很少。
(4)AU识别任务属于多标签分类任务,不同的AU之间可能存在一定的相关性,如何让模型学习到这些关系是一个挑战。
本文从监督学习与卷积网络模型着手,首先使用MTCNN算法[3]对AU数据集进行人脸区域检测和对齐的预处理操作,使得与目标任务不相关的背景噪声被排除,并通过一些图像增强方法(如随机水平翻转、饱和度与亮度调节等)增加输入数据的多样性。针对上述目标任务中存在的难点,提出了以下解决思路:
(1)为了利用迁移学习可以给网络提供先验知识的优点,使用目前具有高准确度的人脸识别算法CosFace[4]预先训练模型。因为目标任务与人脸识别任务具有一定的相关性,所以该方法能够给网络提供良好的初始化并得到更高的分类精度。
(2)针对AU类别不平衡的问题,从损失函数入手。在训练过程中,根据模型对样本预测的分类置信度动态地改变其损失权重,使得模型更加关注AU样本中的少数类,如闭眼、张嘴等。
(3)通过在损失函数中考虑标签共现关系以及人脸关键点等属性,对模型多任务联合训练,得到更高的准确度。
1 相关工作
最初的面部动作单元识别研究方向主要是计算几何特征与提取人工特征。Baltrušaitis等[5]应用开源的追踪与对齐算法得到人脸区域后,提取了4 464维HOGs(Histograms of Oriented Gradients)特征,并通过PCA降维后由SVM模型分类。Yüce等[6]通过在人脸关键点附近提取SIFT(Scale Invariant Feature Transform)特征来辅助预测。
随着深度学习理论的发展,基于神经网络模型的训练算法陆续被提出。Zhao等[7]认为不同的五官区域数据,如眼、口、鼻等所包含的信息迥异,参数共享的卷积核很难同时学习到人脸各个区域的局部特征,所以通过划分中间卷积层产生的特征图为8×8共64个子区域,并分别在每个区域执行参数互不共享的卷积操作,在实验数据集上得到了很好的效果。为了解决AU类别不平衡问题,Tang 等[8]针对每类AU构造正负样本数量相等的训练集;Zhao等[7]也提出在训练过程中对每批训练数据中的多数类样本进行下采样操作,不计算这些多余样本产生的损失函数。对于多标签AU分类任务,Chu等[9]对比了单独训练每一类AU与使用多标签交叉熵损失共同训练两种方案,实验证明后者往往能得到更佳效果;Zhao等[10]从若干开源数据集中统计出具有较强正相关性和负相关性的AU类别对,包括8组正相关性与14组负相关性,并将这些特殊的相关关系通过正则项公式来描述,从而融入到网络的优化过程中。
2 基于深度学习的AU识别算法
本文提出了一种根据分类置信度来动态调整样本损失函数权重,并使用多任务联合训练的人脸动作单元识别算法。首先基于迁移学习理论,预先使用大量的人脸识别数据库训练网络,使得网络学习到关于人脸五官的各种抽象特征,并在此基础上进行后续的面部动作单元识别优化;利用网络训练过程中输出的分类置信度,设计了一个动态调整权重的损失函数来处理数据集中的类别不平衡问题,使得本身分类困难的面部动作得到更充分的训练;最后结合多种具有相关性的监督任务,联合训练并通过反向传播优化深度网络参数。算法的整体框架图如图1所示。
2.1 迁移学习
深度网络具有广阔的模型参数空间与强大的非性拟合能力,在损失函数的监督下可以学习到关于输入数据的各种抽象表征,但同时也因为模型的高复杂度和数据集的稀缺性,容易造成过拟合,模型缺少泛化性,而通过迁移学习则能够改善这种现象。通过在具有大量数据集并且与目标任务相关的其他任务上预先训练,使网络具备了解决相关任务的能力,再利用少量的目标任务数据将这些能力迁移并应用到目标任务上。除了能提高训练收敛速度外,还能得到效果更好、泛化性更强的模型。
考虑到开源的面部动作单元数据集的数据量较少,本文利用迁移学习来减少过拟合风险。因为面部动作识别和人脸识别任务具有一定的相关性,网络都要去学习提取关于人脸五官的某些抽象特征,所以先以人脸识别任务为优化目标,使用具有大量样本的VGG2数据集预训练网络。VGG2数据集包含了8 631种人物身份在内的共3 141 890张训练图片,除了数据量充足,其在光照、人脸角度、年龄等属性上也具有很高的多样性,有助于模型更鲁棒。文献[4]针对人脸识别任务提出了LMCL(Large Margin Cosine Loss)损失函数,通过在余弦空间中最大化分类边界间隔使得类间差异最大化和类内差异最小化,能学习到具有判别性的人脸特征。使用该损失函数,经过若干次迭代优化并收敛后,得到能够提取人脸区域特征的网络参数与结构,在此基础上优化后续的AU识别任务。对比实验验证了该策略能有效地提高目标任务的最终分类效果。
2.2 基于分类置信度的动态加权损失函数
和许多数据集一样,面部动作识别数据集也具有类别数量不平衡的问题[5,7]。机器学习算法通过优化损失函数来提升正确率等评测指标,但也未考虑数据集的类别分布情况,最终导致模型更偏向于预测多数类而忽略掉少数类,并使得某些评测指标(如正确率)虚高。
图 1 算法整体框架图Fig. 1 Framework of the algorithm
假设 X =(X1,X2,X3,···,XS) 为网络训练过程中的某批输入图片数据, Y =(Y1,Y2,Y3,···,YS) 为这批数据对应的标签,其中S为batch size,。因为目标任务是多标签分类任务,即一张输入图片对应了多个AU类别标签,假设模型要预测N种AU结果,则(Y1,Y2,Y3,···,YS) 实际上是一个S×N的二维0,1标签矩阵。假设训练数据经过网络前向传播后得到的预测结果为,其中预测样本Xs得到关于第n类AU的概率为,样本Xs在第n类AU 上的标签为Ysn,则模型对于第s个样本关于第n类AU的Sigmoid交叉熵损失函数为
则最终该批训练数据的多标签交叉熵损失函数为
因为多种AU都具有严重的类别不平衡问题,由式(2)作为损失函数训练得到的模型严重倾向于预测多数类。例如对于AU20(即嘴角拉伸)这个面部动作,由于数据集中未拉伸的样本数量远多于拉伸的样本数量,对于新样本,模型预测AU20未出现的概率也会大大增加。假设网络在式(1)损失函数的监督下训练完成后,网络正确预测出第n类AU的概率为
通过对目标数据集中的不平衡AU类别数据采样,并分别统计模型对于多数类和少数类样本预测的Psn值分布,可以发现模型关于多数类数据的Psn分布整体接近于1,对于少数类数据的Psn分布处于0.5附近,即模型错误预测少数类样本的概率大于错误预测多数类样本的概率。为了强迫模型去关注并优化少数类数据的信息,本文根据样本被正确分类的置信度(Psn),对训练过程中的损失函数设置动态权重,调整后的损失函数为
其中:σ[γ(1-2Psn)]为训练AU分类器过程中的损失函数加权系数;σ为Sigmoid函数;γ为可配置的惩罚参数,用于调节模型对于多数类AU和少数类AU的损失惩罚力度,不同的γ取值下动态权重的函数曲线图如图2所示。
图 2 不同γ取值时对应的权重变化曲线Fig. 2 Weight change curves of different γ values
从图2可以看出,当γ=0时,AU的多数类样本与少数类样本具有相同的权重,等价于式(2);当γ越来越大时,模型对于少数类样本即分类困难的样本的损失函数权重更高,对于多数类样本即分类较为容易的样本的损失函数权重更低,在这种情况下,模型会更加关注AU数据中少数类样本所提供的信息。
2.3 多任务联合训练
在许多机器学习场景中,模型是由单一任务驱动训练得来,假若训练数据量不大则容易导致网络不够泛化,而多任务联合训练则可以减少这种影响。该方法将多个相关任务放在一起学习,梯度同时反向传播,任务之间能够共享、互补一些信息,这样能使得最终模型更加鲁棒,在目标任务上表现更佳。
本文在优化式(4)加权交叉熵损失的同时,还优化了多标签的共现关系与人脸关键点两种额外属性。
2.3.1 多标签的共现关系 因为AU识别任务属于多标签预测任务,不同AU类别之间可能具有相关性[10],而式(4)的损失函数实际上是多个彼此独立的Sigmoid交叉熵损失的加权和,并未考虑不同AU之间可能存在的相关性。针对此问题,本文加入了考虑AU多标签共现关系的损失函数:
当两个不同AU同时出现(标签均为1)或者同时不出现(标签均为0)时,具有正向相关性,否则具有负向相关性。该损失函数会驱动网络去学习这种隐藏的标签共现关系,而非视每种AU类别为彼此独立。
2.3.2 人脸关键点 考虑到人脸关键点位置与某些AU具有一定的关联性[2],比如对于AU43(闭眼)来说,人脸68个关键点在眼睛部位上的6个点会倾向于一条直线上,形成的面积接近于0;对于AU25、AU26等张嘴动作来说,相比于闭嘴时上嘴唇的关键点与下嘴唇的关键点会有一定的间距。本文利用Dlib开源库对训练数据集预测出人脸68个关键点坐标共136维,并归一化至[0,1],记为(x1, y1, x2, y2, ···, x68,y68),为网络对第i个关键点坐标的预测值,再利用L1损失优化网络:
2.4 算法设计
本文最终的训练损失函数为
式中,λc和λl分别对应了拟合标签共现关系与回归人脸关键点两个任务的损失加权系数。算法步骤描述如下:
(1)采集实验数据,其中AU数据及其标签记作(X,Y),人脸识别数据集记作D;
(2)构建深度卷积网络模型H0,并随机初始化权重;
(3)使用MTCNN模型对X检测人脸并对齐裁剪;
(4)按照一定的比例随机划分D为训练集Dtrain和验证集Dval;除非所用的AU数据集已经提前划分好,否则按照一定的比例随机分割(X,Y)为训练集(Xtrain,Ytrain)和验证集(Xval,Yval);
(5)利用LMCL损失和Dtrain训练H0,直到H0在Dval上的评测结果不再有明显提升,得到模型H1;
(6)使用Dlib开源库对Xtrain提取68个人脸关键点坐标,记作LM;
(7)从(Xtrain, Ytrain, LM)中采样得到批数据(Xbatch,Ybatch, LMbatch),并且Xbatch经H1前向传播运算后得到预测结果记为Ypred;
(8)根据式(8),利用(Ybatch,Ypred,LMbatch)计算出该批数据的损失大小,并使用梯度下降法更新模型H1的参数;
(9)当达到一定的训练次数时,使用(Xval,Yval)对H1评测,若评测结果已经收敛,不再有明显提升,即得到最终的AU识别模型,算法结束;否则跳转至步骤(7)继续训练模型。
算法的时间开销主要由图片预处理、人脸识别预训练和AU识别训练3个部分确定。对于网络的训练过程,算法时间性能同时受训练数据规模、模型结构、批数据大小和硬件等多个因素共同影响,若模型结构轻巧、参数量适中则训练速度越快;批数据越大,单次迭代所需的时间增加,但也更容易快速收敛;对于预训练任务,因为所用数据集规模可能较大,所需时间可能稍长,不过基于卷积的深度模型能受GPU硬件的良好加速支持。
对于普通的卷积神经网络模型,其对输入数据前向推断并预测的时间复杂度约为其中N为网络的卷积层数,Ml为第l层输入的特征图边长,Kl为第l层的卷积核边长,Cl-1和Cl分别为第l层的输入通道数和输出通道数。
3 仿真实验
实验在配置了2.20 GHz的Intel E5-2430 CPU和NVIDIA Tesla M60的GPU上运行,基于Python3.6语言开发,使用MTCNN模型检测人脸区域并对齐,使用Dlib开源库提取关键点,使用Tensorflow库搭建网络模型并训练和评测。
3.1 实验数据
使用两个流行的面部动作单元识别数据库MMI和CK+作为实验数据,数据集对应的属性如表1所示。虽然两个数据集都包含30种以上的AU种类,但通过统计各AU的数量分布情况发现其非常不均匀,在此只选择样本数量大于100张的AU作为实验数据集。
表 1 两个实验数据集的属性Table 1 Attributes of two datasets
在使用本文方法进行AU识别前,需要对原始图片预处理,包括利用MTCNN进行人脸检测与对齐。预处理后的数据集的部分采样数据如图3所示,其中第1行为MMI数据库图片,第2行为CK+数据库图片。裁剪出人脸区域主要是为了去除不必要的背景噪声,使模型专注在人脸区域内学习特征;而对齐是许多人脸相关算法重要的预处理步骤,对检测到的人脸关键点进行刚体相似变化到若干个固定点位置,这样深度网络在特征抽取的时候能够着重学习五官周围的相对结构信息,而无需学习绝对位置等信息,降低学习难度。
图 3 预处理后的实验数据Fig. 3 Processed experimental data
3.2 评价标准
本文以正确率和F1分数作为评测指标,因为AU识别任务的分类目标只有两类即二分类问题,根据真实标签与预测标签可将数据集样本划分为4类:
(1) True Positives(TP):被正确分类为正例的样本个数;
(2) True Negatives(TN):被正确分类为负例的样本个数;
(3) False Positives(FP):被错误分类为正例的样本个数;
(4) False Negatives(FN):被错误分类为负例的样本个数。
正确率(Accuracy)定义为正确分类的样本数与总样本数之比:
F1分数定义为
3.3 实验结果与分析
实验使用的卷积模型包括ResNet50和MobileNet V2。为了在模型训练过程中不受其他可变因素影响得到更可信的对比实验结果,实验中统一设置训练参数,即初始学习率设置为0.1,每500步衰减为0.8倍;使用Adam方法优化网络参数;批数据大小统一设置为32。为了避免单次训练结果可能会出现随机性和波动,对每次实验均训练3次,并观察3次的结果有无较大差异后,取平均值作为结果。
3.3.1 算法结果对比分析 将本文算法与其他4种面部动作单元检测算法在两个数据集上进行比较,对比结果如表2所示。可以看到本文算法在两个数据集上均有很好的表现,在F1分数上均高于另外4种算法。而对于CK+数据集,本文算法在正确率上略低于文献[7]的DRML算法,可能是因为引入了样本动态加权损失,使得模型对多数类的关注减少,对正确率精度可能有所影响。
3.3.2 人脸识别预训练对精度的影响分析 为了探
究与对比不同预训练策略对最终模型精度的影响,本文考虑了3种情况:
(1)无预训练即直接使用AU数据集训练;
表 2 与开源算法的对比结果Table 2 Comparison with open-source algorithms
(2)使用ImageNet数据集预训练;
(3)使用人脸识别数据集VGG2预训练。
实验结果表明,3种策略在多次重新训练中都只有较小的波动性,模型学习过程较稳定。模型在CK+与MMI数据集上的实验结果如表3所示。可以看出,因为ResNet50模型深度更深,具有更广阔的参数空间与特征表达能力,所以比MobileNet V2的效果要好;对于两种基础模型,使用数据集VGG2预训练人脸识别任务的策略均比另外两种策略效果更佳,同时收敛速度也更快,说明人脸识别任务与目标任务具有很强的关联性,通过这种预训练能给予模型有意义的先验信息。
表 3 不同预训练策略的比较结果Table 3 Comparison results of different pre-training strategies
3.3.3 动态加权损失函数对精度的影响 为了验证
2.2节提出的动态加权损失函数的有效性,在3.3.2节的结论之上,实验并得到了可配置惩罚参数γ在多种取值下的算法表现,包括不使用动态加权(即γ等于0)与文献[7]中使用的批数据随机下采样两种情况,对比结果如表4和图4所示。
实验结果表明,在训练过程中随机对批数据中的多数类样本下采样,使得正负样本平衡的策略可能会损失模型精度;γ=3时,除了MobileNet V2模型在CK+上的正确率比γ=1时略低,其他评测均达到最优;γ=10时,因为忽略掉了许多分类置信度为0.7以上的样本,样本权重已经接近于0,虽然这些样本具有较高的分类置信度即已经分类正确,但若直接视而不见也会丢失数据信息,影响模型精度。
3.3.4 多任务联合学习对精度的影响 为了验证结合标签共现关系与关键点回归两个子任务共同优化模型能进一步提高最终AU分类精度,本文在3.3.3节的结论之上,实验并对比了联合与不联合两种情况,联合训练时λc与λl两个参数均取为0.5,实验结果如表5所示。
表 4 不同损失函数的比较效果Table 4 Comparison results of different loss functions
图 4 CK+上不同优化函数的训练曲线Fig. 4 Training curves for different loss functions on CK+
4 结束语
本文提出了一种基于深度学习框架的面部动作单元识别算法,包括3个部分:使用大规模人脸识别数据集预训练、在训练过程中根据AU分类置信度动态调整损失函数权重,以及联合两个相关任务(预测标签共现关系与回归人脸关键点)协同训练。该算法在开源的CK+和MMI数据集上取得了很好的精度效果,但是并未考虑到如何处理人脸被遮挡以及出现不同人脸姿态角度时的情况[13]。此外,如何很好地拟合2个以上的AU之间的共现关系,以及对AU强度的识别分析[14-15],这些都是将来需要研究的问题。
表 5 多任务联合训练的比较结果Table 5 Comparison results of multi-task training