基于注意力机制的多粒度匹配的表情识别模型

2023-04-06 18:58苏婵危建国徐健锋
关键词:细粒度高斯粒度

苏婵,危建国,徐健锋

(南昌大学 软件学院,江西 南昌 330047)

0 引言

面部表情是人类传达情感状态和意图的最自然、最强大、最普遍的信号之一[1],它与声音、语言、姿势等共同构建人类在社会环境中的基本交流系统。自动面部表情识别在社交机器人、医疗、驾驶员疲劳监测等机交互系统中得到广泛应用。

近年来,深度学习技术在表情识别领域应用广泛。研究方向主要分为两种:基于传统的方式和基于注意力的方式。

基于传统的方式主要是将人脸检测后的表情整体图像作为传统的深度学习网络的训练数据。Valentin等[2]提出将依赖于自动编码器的组合算子结合由蒸馏方法获得的轻量级的学生模型完成各种不同的人脸相关任务。Wang等[3]提出一种对抗性特征学习方法用于同时关注姿势变化和身份偏差。该模型中的编码器通过对抗性训练来提取特征表示,而姿势鉴别器和对象鉴别器分别从提取的特征表示中对姿势和对象进行分类。Yang等[4]提出了一种新的残余表情学习,通过训练一个生成模型去查询大致的中性脸;然后学习生成模型的的残留,从而减缓识别相关的变化因素。Hu等[5]提出一种监督评分集成(SSE)学习方法,该方法中的融合结构,可以使得不同互补特征层上的分类评分激活被连接起来。Cai等[6]提出了一种新的无身份条件生成对抗网络(IF-GAN),将平均中性人脸转换为与输入图像具有相同表情的平均表达人脸。上述方法都是以整体图像为模型输入,忽略了不同面部表情之间的细粒度差异。本文从全局特征分解和重构的角度阐述了表情识别问题,成功地将粗粒度的表情特征重塑成粗细粒度相结合的特征,从而实现面部表情准确率的提升。

基于注意力的方式主要是通过注意力机制将重点放在需要视觉注意的部分,从而获取更多的内在信息特征。基于注意力的深度学习方法主要是在深度学习网络中使用注意力机制进行特征提取,这种方法主要是模仿人类聚焦图像显著区域。Li等[7]提出了一种端对端的具有注意机制的卷积神经网络(ACNN),包括pACNN和gACNN,可以聚焦于最具辨别力的未遮挡区域。Wang等[8]提出了一个新的区域注意网络(RAN)用于聚合并嵌入不同数量的区域特征,自适应地捕捉重要性面部区域的遮挡和姿势变化。Ding等[9]提出了一个地标引导的注意分支用于发现并丢弃遮挡区域,该方法生成一个注意图,引导模型关注非遮挡区域。Meng等[10]提出了端对端的帧注意网络(FAN),其中帧注意模块主要用于学习多个注意权重,从而自适应地聚合特征向量,构建单一的区分性视频。上述方法运用注意力机制对相关局部区域进行加权量化操作,使得网络能区分不太相关的区域,增强模型对表情识别的能力,通过局部注意力机制构建全局环境。然而这种注意力机制主要运用在原始图像中,没有考虑针对原始图像进行细节处理。本文使用高斯差分金字塔的原理对原始图像进行细节处理,而后使用注意力机制量化形成局部特征,利用局部特征的细粒度相关性构建全局相关性。

此外,从开源的表情数据集中我们可以看到,微微上翘的嘴唇、圆圆的眼睛这些不同的五官表情可以组合成不同的表情。除此之外,表情图像存在诸如眼镜、茶杯等遮挡物存在,这些干扰因素使得细微差别不被学习系统察觉。因此,表情识别算法中除了整体特征外,眼睛、嘴巴等单个区域之间的细微面部表情差异也需要格外关注。而上述关于表情识别的相关研究和文献未考虑通过粒计算区分面部表情之间的细粒度差异。

粒计算是一种由复杂到抽象的客观看待问题的世界观和方法论,是一种将复杂问题转化为若干简单问题的客观、抽象的分析方法。将粒计算思想运用到计算机视觉之中可以有效的提高识别模型的准确率。Song等[11]提出了多粒度空间模块思想来帮助模型获得不同尺度的判别性细节,将不同粒度的图像碎片打乱重组构成新的图片作为模型输入。Cheng等[12]使用三支决策思想处理分类结果,构建结果中的不确定域,用于延迟决策。采用特征融合技术以及SVM分类器,提升提高分类准确率。Yang等[13]提出了一种基于细粒度思想的粒度匹配的画廊边界框加权算法,为是行人检测和重识别两个子任务提取符合各自粒度特性的特征。

本文基于粒计算思想提出了一种基于注意力机制的多粒度匹配的表情识别算法,在骨干网络中加入基于注意力的多粒度模块。对获取的表情细节叠加图像进行碎片式划分后,为每一个局部细粒度图像计算注意力权重后进行重组,获得具有局部细粒度和全局粗粒度的特征图。这种多粒度的图像划分迫使网络不仅关注不同局部之间的粗粒度特征,且对局部中的细粒度特征进行学习[14-15],从而提高表情识别的分辨率。

1 基于注意力机制的多粒度模型

在表情识别算法中,注意力机制主要是为了让网络聚焦相关区域,比如嘴、眼睛等。少关注或者不关注不相关的区域,比如图像背景、头发等。网络在进行特征提取时网络应该更注重其中重要的信息, 抑制不重要的信息。

基于注意力机制的多粒度表情识别模型如图1所示。本模型首先将待识别的原始图像使用人脸检测框架MTCNN进行人脸检测和人脸特征点检测,将预处理后的人脸图像重塑成112×112大小的图像。其次,在图像细节处理模块中,使用高斯差分金字塔原理得到不同等级的高斯平滑图像,将不同等级的高斯差分图像通过叠加的方式获取细节图像,与原始图像进行相加操作获得表情细节图像。然后,将上述获得的细节图像作为多粒度匹配模型的输入数据,根据人脸特征点检测结果将图像划分成N份局部图像。将每一份细粒度图像通过全局平均池化层将某一个特定的通道上整个空间特征编码为一个全局特征,将该特征通过Sigmoid函数获取属于该局部区域的权重。将具有自注意权重的N分局部细粒度图像重构成具有注意力权重的全局图像,作为特征提取骨干网络Mini_Xception的原始输入数据,最后经过 512维全连接层进行分类。

1.1 基于注意力机制的多粒度匹配模块

该模块的输入是待识别的原始图像,属于粗粒度的全局特征。将原始图像划分成不同粒度的图像碎片,划分原则依照MTCNN[16]得出的人脸特征检测点,分别是眼睛、鼻子以及嘴,将原始图像划分成4、6、8等份。

细粒度局部图像的自注意权重计算方法如下:给定输入图像FN是第N个图像碎片,经过最后一个卷积层的输出特征 FC∈RC×H×W, 其中 C是通道数。为了获得足够的信息来提取通道之间的关系,将最后一个卷积的输出利用全局平均池化层将特定通道上的整个空间特征编码为全局特征G。使用的公式如下所示:

公式(1)主要将最后一个卷积层的输出特征FC转换成1×1的输出,其中,GC表明该层第C个特征图的数值分布情况,(i,j)分别代表每一个像素点。H×W表示每一个通道内的特征图的大小。

为了融合每个通道的特征映射信息,利用全局平均池化特征G经过注意力估算模块估计粗略的注意权重。其中,注意力估算模块由两个FC层、Relu函数和Sigmoid函数组成。第i个图像碎片的注意力权重定义如下:

θ1G是一个全连接层操作,其中θ1是全连接层的参数,G的大小为1×1×C,C为通道数。第一个全连接层输出的维度为C/r,其中r取16,δ表示结果通过ReLu函数传递,结果维度保持不变。θ2代表第二个全连接操作,输出的维度为1,f表示结果通过Sigmoid函数,获得第i个图像碎片的注意力权重值Wi。

将所有图像碎片获得细粒度特征及其注意权重重构成一个具有注意力特点的全局特征F,定义如下:

其中,n表示图像碎片的总数,Gi表示将每个通道的特征。F作为最终的全局特征可以作为分类器的最终输入。

综上所述,通过引入基于注意力机制的多粒度匹配子模块,估算图像碎片的注意力权重,从而重构具有注意力权重和细粒度个性特点的全局特征,能够灵活的捕捉全局和局部的特征关联。

1.2 图像细节处理模块

在上述粗粒度特征向细粒度转变的过程中的碎片图像划分需要频繁的改变图像的尺寸,因此,为了避免图像尺寸变化对表情特征提取产生较大的负面影响,本文的图像细节处理模块主要是基于多尺度计算的图像金字塔的构建原理[17]。首先将原始图像进行灰度处理,而后分别对该灰度图像进行上采样和下采样的操作,形成的上采样图像是原始灰度图像的4倍,而下采样图像是原始灰度图像的0.25倍。

本文的图像金字塔构建主要是基于高斯差分原理,在该图像表情细节处理过程中,需要通过二维高斯卷积函数构建高斯金字塔,高斯卷积函数公式如下所示:

其中,G(x,y)表示经过高斯卷积运算后得到的图像二维数据,σ表示正态分布的标准差,σ值越大,图像越模糊(平滑)。 r表示模糊半径,模糊半径是指图像元素(x,y)到模板中心(x0,y0)的距离。

利用公式(4)对原始灰度图像进行金字塔构造,可以得到3层高斯金字塔图像,从而获得原始灰度图像不同尺度的高斯平滑特征图像。我们将原始图像设定为L0,将其他3个通过高斯卷积运算获得的高斯平滑图像设定为L1、L2、L3,与L0组成一组4层的高斯图像金字塔,将金字塔中相邻两层图像进行减法运算获取具有相邻高斯平滑特征区别的高斯差分金字塔图像。高斯差分金字塔中的图像提取了高斯金字塔中关键的特征信息,尤其是眼睛、嘴和鼻子这类具有对表情识别有效的特征。本文的细节图像处理依据公式如下所示:

其中,j= 0,1,2,指的是原始图像的金字塔层数,而i=1,2,3,表示高斯差分金字塔的层数,Gi和 Gi-1表示不同参数值的高斯函数, I(x,y)表示图像的二维数据,⊗表示进行卷积操作。L0表示要进行高斯平滑操作的原始图像。图像细节处理模块的过程如图1中图像细节处理模块图所示。

综上所述,利用高斯差分原理,构建原始图像的高斯差分金字塔图像组,进而完成原始图像的细节处理,获得表情细节图。这将在多粒度划分时,减少图像尺寸改变带来的影响。

1.3 模型算法描述

根据本文多粒度表情识别模型的总体结构,在模型训练阶段,图像细节处理模块被添加在该模型数据输入阶段,用于获取表情细节特征。而基于注意力机制的多粒度匹配模块被用于重构全局特征,该全局特征有基于自注意权重的局部特征组成。具体训练算法流程如算法1所示。

算法1 表情识别模型训练过程

输入:表情训练集X_train和标签Y_train,设置C个表情类别,最大训练代数MaxEpoch, 表情训练集图像数量nums_i,批量大小设置为batch_size;

输出:训练后的模型和识别准确率.

预训练过程:在每一代训练中,从预处理的训练集选取batch_size个数量图片,首先利用图像细节处理模块对图片进行高斯差分计算,获得高斯差分金字塔图片,而后将图片送入多粒度匹配模块计算原始图像的细粒度特征,最后计算预测值和实际值之间的损失,并根据获得的损失值进行参数更新,从而进行模型的下一代训练。

/*训练过程 */

① 使用预训练模型权重初始化模型;

② while e < MaxEpoch do

③ for 0 to num_i/batch_size + 1 do

④ From (X_train , Y_train), sample a batch;

⑤ Compute GDOG;

/*计算高斯差分金字塔*/

⑥ Compute fine-grained features;

⑦ Compute loss;

⑧ Update loss;

⑨ Compute average accuracy;

⑩ e = e + 1.

在主干模型中普通卷积层采用的卷积核尺寸一般是 3×3,通道数一般设置为 16、32、64、128。Stride一般设置为(1,1)。在计算自注意权重时,采用了两个全连接层和池化层作为自注意机制网络。

在获取预训练模型之后,模型需要加载该权重模型后,对数据集中的测试集图片进行预测获取预测准确率。具体测试算法流程如算法2所示。

算法2 表情识别模型测试过程

输入:表情训练集X_test和标签Y_test,设置C个表情类别,最大训练代数MaxEpoch, 表情训练集图像数量nums_j,训练模型权重W;

输出:测试集识别准确率.

/* 测试过程 */

① 加载训练后的模型权重W;

② while e < MaxEpoch do

③ for 0 to num_j/batch_size + 1 do

④ From(X_test, Y_test), sample a batch;

⑤ Compute GDOG;

/*计算高斯差分金字塔*/

⑥ Compute fine-grained features;

⑦ Compute loss;

⑧ Update loss;

⑨ Compute average accuracy;

⑩ e = e + 1.

在模型预训练和测试过程中,细节处理模块和基于注意力机制的多粒度匹配模块始终作用于这两个过程中。这两个模块可以引导网络学习图像的细粒度局部特征,并迫使网络通过权重设置学习对分类更有用的局部特征。

2 实验与结果分析

本节将通过实验阐述本文使用的深度学习以及多粒度技术的可行性和效果。主要是通过基本的卷积神经网络以及多粒度划分技术构建表情识别模型。在两个表情识别数据集上评估了模型的性能, 与其他算法的准确率进行对比, 设计消融实验以验证模型各模块的效果。

2.1 实验设置

CK+:CK+[18]包含总共123个不同主题的593个视频序列,视频序列中327个被标记为愤怒、蔑视、厌恶、恐惧、高兴、悲伤、惊讶等7种不同的表情,每个视频都显示了从中性表情到目标峰值表情的面部变化。参与者包括不同性别,年龄跨度从18岁到50岁不等。本文将该数据库中的图片进行随机划分,抽取80%的图片作为样本训练数据,其余20%作为测试数据。

Fer2013:Fer2013数据库首次使用时是在Kaggle大赛,包含大约30 000张不同表情的RGB人脸图像,图像分辨率限制为48×48,可分为7种不同类型的表情,分别是0=愤怒,1=厌恶,2=恐惧,3=快乐,4=悲伤,5=惊讶,6=中性。由于这个数据库大多是从网络爬虫下载,因此图片质量存在噪声,质量不高且标签标注有误等,厌恶表情的图片数量最少有600张,而其他标签的图片数量接近5000张。本文将28 709张图片作为训练样本,3589张图片作为测试样本。

在模型训练之前,对原始表情图片进行了预处理。首先,使用MTCNN人脸检测框架,进行人脸检测和人脸特征点检测。采用最近邻插值法(INTER_NEAREST)将原始图像为大小重塑为112×112,以此增大深度学习模型的感受野。

实验效果的度量方面:本文采用准确率以及混淆矩阵作为表情识别模型性能的主要标准指标。其中,混淆模型中真阳(TP)和真阴(TN)这两个参数(即混淆矩阵对角线)来衡量模型性能。

实验软硬件环境方面:使用pytorch来实现识别模型,并在NVIDIA 2080Ti GPU进行表情识别实验。采用mini_Xception作为骨干网络,并采用ImageNet对模型进行预训练。将原始图像预处理为112×112大小的图像,模型训练过程中使用rmsprop优化算法,采用 SGD算法,将动量设置为 0.9, 权重衰减设置为 0.000 1,批量大小设置为 32,epoch设置为80代。

2.2 实验结果与分析

(1) 消融实验

在CK+和Fer2013数据集上进行消融实验,以探索所构建识别模型使用的技术对表情识别准确率提升的效果。表1显示了在CK+数据集上进行的消融实验结果。其中,mini_Xception是本文模型的基准模型,GDOG指的是运用于图像细节处理模块的高斯差分金字塔,Attention-Granularity指的是对原始图像使用基于注意力的多粒度模块。在表1消融实验结果中,将获得的表情细节图像与原始图像进行叠加作为模型的输入数据,可以将识别准确率分别提升0.5%和0.6%。这说明在原始图像上增加多尺度细节叠加算法,即增加了图像金字塔对原始表情图像进行不同的采样,丰富了图像中表情的特征信息,提高表情整体识别率。使用基于注意力的多粒度模块对原始图像进行处理可以将识别准确率提升1.22%和1.13%,说明所构建的模型学习到了多粒度下的局部区域表情特征,这是使用单一粒度的图片作为输入数据所无法实现的效果。实验表明基于注意力的多粒度模块和表情细节处理模块能有效的提高表情识别准确率。

(2) N值探索实验

在CK+数据集上, 基于注意力的多粒度模块将表情图片划分成N个局部区域,设计实验选择合适的N值。当N=1时,不对人脸检测后的叠加图像进行局部区域的划分。当N=8时,将图像根据眼睛、鼻子和嘴的位置进行划分。当N=12、16时,将图像划分成相等的六和八份。如图 2 所示,可以观察到 K=12 时, 实验效果是最佳的。

本文构建的模型相对于其他采用多级网络方法中的模型参数和运行时间都有一定程度的降低, 但是依然可以有较好的分类准确度。在Fer2013和CK+数据集中进行实验,对比其他算法的准确率如表2和3所示。

(3) 实验结果对比与分析

在表 2 中,Adrian Vulpe-Grigorasi等[19]通过超参数离散值定义的搜索空间上应用随机搜索算法生成和训练模型,确定网络的最优超参数。Shen等[20]模型优点在于提出的方法融合了经典的Resnet和sobel特征,更加有效地强调边缘信息。Singh等[22]提出使用CNN在不预处理等情况下进行静态图像的表情识别分类,而后使用光照校正等预处理方式提高识别准确率。以上三种方法主要是通过调整模型的超参数或者图片预处理这些技巧来提高识别准确率。相较于以上方法,下列方法主要通过将自注意机制加入到模型中,构建更优特征向量等方式提高识别准确率。Sahoo等[21]的方法优势在于引入了迁移学习模型SqueezeNet 1.1对表情进行分类。

从表2可以看出,本文模型在Fer2013数据集上可以达到较好的识别准确率,尤其是使用同样的预训练数据集ImageNet,所提出的方法可以将准确率提高14.66%。

Mouath Aouayeb等[25]提出了学习视觉转换器与SENet共同完成表情识别FER。Meng等[27]提出了一个端到端的帧注意网络,通过该主要模块学习多个注意力权重从而构建聚合特征向量。以上两种模型运用了注意力机制,其中SE模块是在通道维度上的注意力机制。二者的识别准确率要高于其他模型,说明注意力机制可以有效的提高模型的识别准确率。Ding等[26]提出了基于静态图像训练的模型,该模型使用一个新的分布函数来模拟表达网络的高级神经元。Mahdi Pourmirzaei等[24]提出了将自我监督学习(SSL)作为辅助任务合并到SL训练环境中。以上两种方法可能是在特征构建时不能较详细地表达细粒度局部特征,因此,准确率不如注意力机制下的模型识别率。

从表3可以看出,使用同样的预训练数据集ImageNet,本文提出的方法可以将准确率提高0.74%。所构建的模型在CK+数据集上的准确率低于ViT+SE方法,可能的原因在于实验中预训练使用的数据集不是表情识别数据集。

图3显示了模型在CK+上的混淆矩阵,可以看到各类表情的识别准确率的可视化结果。从图中可以发现,愤怒、蔑视和厌恶是识别率最高的类别,分类识别率可以达到100%,而蔑视和恐惧比较容易被模型混淆。这可能是由于恐惧的表情细节图像所包含的表情特征信息与蔑视的表情特征信息比较相似,而网络中基于注意力的多粒度模块在蔑视和恐惧识别过程中未提供具有区别性的局部信息。

3 结论

本文针对表情识别存在提取的全局粗粒度特征无法满足表情特征细粒度识别的现象,在骨干网络Mini_Xception中融入注意力机制和多粒度思想。利用多粒度思想将粗粒度全局特征划分成多个局部特征,利用注意力机制构建细粒度局部特征,进而重构细粒度加权全局特征。在图像预处理阶段利用高斯差分金字塔原理获得表情细节图像,解决图像尺寸变化影响模型识别性能问题。本文方法在CK+和Fer2013数据集上取得较好的准确率。本模型目前使用的loss函数没有考虑到图片整体和局部之间的自注意机制之间的关系,且存在过拟合现象阻碍准确率提升的风险。下一步的主要研究工作:(1)研究更加合适的loss函数更新模型参数;(2)重构更有效的全局特征向量,从而选用更有效的注意力机制获得更好的细粒度局部特征,以进一步提升整个模型在表情分类准确率。

猜你喜欢
细粒度高斯粒度
融合判别性与细粒度特征的抗遮挡红外目标跟踪算法
粉末粒度对纯Re坯显微组织与力学性能的影响
基于SVM多分类的超分辨图像细粒度分类方法
数学王子高斯
天才数学家——高斯
基于web粒度可配的编辑锁设计
基于粒度矩阵的程度多粒度粗糙集粒度约简
支持细粒度权限控制且可搜索的PHR云服务系统
双粒度混合烧结矿颗粒填充床压降实验
泉州湾表层沉积物粒度特征分析