处理表情识别中的坏数据:一篇CVPR 2020及两篇TIP的解读

2020-05-26 17:31:18 浏览数 (1)

作者:周宇

编辑:Joni Zhong

本篇提前看重点关注 CVPR 2020 中的这篇「Suppressing Uncertainties for Large-Scale Facial Expression Recognition」, 但在解读它之前,我们先有步骤的解读两篇 TIP 作为它的基础,最后详细介绍它的算法和思想。对比性的解读这三篇论文,也许能对研究者们自己的工作有所启发。

真实场景下的表情识别一直是令众多研究者十分头疼的课题。这个任务中,尤为令人抓狂的是表情数据集中普遍存在着许多坏的数据(例如被遮挡的人脸,错误的标签或者是模糊不清的图像)。这些数据不仅使得模型难以拟合,还严重拉低了最后的精度。在今年的 CVPR 中,我们惊喜的发现了一篇专门解决这个问题的论文,这篇论文有效的抑制了那些不确定性的数据,并且防止了深度模型对这些坏数据的过拟合。顺藤摸瓜,我们也找到了在 2019 年的 IEEE transactions on image processing 上两篇能有效处理遮挡表情和姿势变化的论文。本篇提前看重点关注 CVPR 2020 中的这篇「Suppressing Uncertainties for Large-Scale Facial Expression Recognition」, 但在解读它之前,我们先有步骤的解读两篇 TIP 作为它的基础,最后详细介绍它的算法和思想。对比性的解读这三篇论文,也许能对研究者们自己的工作有所启发。

具体的,我们解读的三篇文章如下:

1. Li, Yong, et al.「Occlusion Aware Facial Expression Recognition Using CNN With Attention Mechanism.」IEEE Transactions on Image Processing, vol. 28, no. 5, 2019, pp. 2439–2450.

2. Wang, Kai, et al.「Region Attention Networks for Pose and Occlusion Robust Facial Expression Recognition.」IEEE Transactions on Image Processing, vol. 29, 2020, pp. 4057–4069.

3. Wang, Kai , et al. "Suppressing Uncertainties for Large-Scale Facial Expression Recognition." (CVPR 2020).

一、Occlusion Aware Facial Expression Recognition Using CNN With Attention Mechanism

任务简介

因为在开放环境下存在各种无约束的因素(例如背景,头部姿势),在这种情况下进行人脸的表情识别是一项十分具有挑战的任务。其中有一种更为麻烦的情况,即为要被识别的人脸受到了部分遮挡。要解决这个问题并非易事,因为这些遮挡在不同图像中可能存在于不同位置或者遮挡的物品有不同形状,例如,人脸表情可能被头发,眼镜,围巾,口罩,手臂,食物或者其他物体挡住,被挡住的地方也有可能是眼睛,嘴巴,脸颊或者其他人脸的部位。这篇论文就着重于解决遮挡环境下表情识别的问题。

方法描述

作者主要是提出了一个基于注意力机制的卷积神经网络(Convolution Neural Network with attention mechanism)来模仿人的视觉机制识别表情的方式。人类的视觉机制在识别人脸表情时,首先会将人脸分成若干块,看到左脸的微笑就会联想到右脸,以及上扬的嘴角。基于以上想法,作者提出 ACNN 模型来自动感知被阻挡的脸部区域,并且将主要注意力集中到未被阻挡的表情区域进行判断。作者提出的 ACNN 含两个版本来完成这个任务:一个是用 pACNN(patch-based ACNN) 在一个卷积层将人脸中感兴趣的区域裁剪出,然后在这些不同区域中,用 PG-Unit 来学习到权值进行综合判断;另一个是用 gACNN(global-local-based ACNN) 同时整合人脸的各个部分和整体区域,不仅是给区域赋予了权重,它还用 GG-Unit 来赋予整个区域权重。

图 1:文中 ACNN 模型如何进行遮挡表情识别的示意图。

图 1 所示是总体的信息处理示意流程图。ACNN 主要能被分成两个部分(pACNN(上半部分)和 gACNN(下半部分))。其中最重要的是在序号 3 步骤中,pACNN 从中间特征中提取了 24 个感兴趣的局部块(图上方的 Patches),如红色矩形框所示。对于每一个区域,根据被遮挡程度的不同,一个特殊的 Patch-Gated Unit(PG-Unit) 用来赋予这个区域对应的权重。然后,这些被赋值的区域特征一起被整合送到了分类器中。gACNN 也整合了整体脸部特征如紫色框所示,并且整体特征也被 Global-Gated Unit(GG-Unit) 所赋值。

图 2:文中 ACNN 的整体架构。

具体到网络结构和流程来说,ACNN 的整体架构如图 2 所示。具体的流程为:ACNN 首先得到一张人脸图片作为输入,然后这个输入用一个训练好的 VGG16 做特征提取。这时在 pACNN 中,输入的特征图根据人脸结构被拆分为 24 个局部块。每个块都被 PG-Unit 处理,PG-Unit 的处理方式是将局部块编码成向量特征并且根据注意力网络(Attention net)来给这个局部块赋予一个权重。对于 gACNN, 整体的特征都被 GG-Unit 编码并且赋予了权重。如图 2 所示,最后这些特征都被送入 Softmax 进行分类。文章当然也介绍了裁剪人脸的细节,裁剪是根据人脸定位的方法来确定的。人脸定位的精度包含 68,24,16 和 4 多个定位点,其中最后以 24 为最终精度。

文章的关键点在于 PG-Unit 和 GG-Unit 的结构。作者将 PG-Unit 嵌入 pACNN 来自动识别被阻挡区域和重点关注未被阻挡且带有表情信息的区域。PG-Unit 的细节可以参考图 2 中的上两个蓝色虚线框,详细来说就是被切分的特征块(512*6*6)被送入了两个卷积层,然后卷积层的输出分到了两个支路,第一个分支将输入的特征编码为向量形式的特征,另一个分支由 Attention Net 构成,它主要是用一个 0 到 1 的标量权重来表征这个区域特征的重要性。最后这两个分支的输出相乘作为最终局部特征。GG-Unit 的细节如参考图 2 中的最下的蓝色虚线框,它同样被嵌入 gACNN 来自动识别整体的特征。详细来说就是整体的特征块(512*28*28)被编码为(512*14*14),在 GG-Unit 中,第一分支将输入特征编码为向量形式的整体特征,第二分支将也由 Attention net 组成,它的功能主要是估计一个 0 到 1 的标量权重来表征这个整体特征的重要性。Attention net 结构如左下角框图所示。

实验分析

数据集:利用户外数据集(RAF-DB, AffectNet, SFEW) 和实验室数据集(CK , MMI, Oulu-CASIA)合成的 4k 有遮挡的图片;收集的被遮挡的表情数据集(FED-RO),含 400 张带标签的表情数据。

实验环境:Caffe 框架,Titan-X GPU 和 12GB 内存,初始学习率为 0.001,随着学习的进行以 0.1 衰减,动量为 0.9,权值衰减为 0.0005,batch-size 为 128 和最大迭代为 50K。

结果:

1. 在 RAF-DB 和 AffectNet 的干净数据集和被遮挡数据集上多个模型的结果:

2. 在 CK 数据集上不同尺寸遮挡的表情识别精度

3. 跨数据集的识别精度:

4. 在收集的遮挡数据集(FED-RO)的识别精度:

由上图中的表现可见,在 RAF-DB 和 AffectNet 的干净数据集和被遮挡数据集中,文中的 gACNN 相比其他的模型有更好的表现;在 CK 数据集上不同尺寸遮挡的情况下,pACNN 和 gACNN 的精度也高于其他模型;跨数据集的表现上,在大多数情况下 pACNN 和 gACNN 也优于其他模型;最后,在作者自己收集的 FED-RO 中,gACNN 的表现也是最优的。

文章小结

在本文中,作者提出了 ACNN 使得模型能够分配较小注意力到被遮挡的区域,而集中较大的注意力到和表情相关的区域。考虑到人的视觉机制在识别表情时是由区域到整体的看,作者使用了 pACNN 和 gACNN 两个分支,而后再融合进行综合判定。实验结果证明了 ACNN 的有效性和鲁棒性,这也启发了后两篇文章的作者。

二、Region Attention Networks for Pose and Occlusion Robust Facial Expression Recognition

任务简介

与第一个任务相似,遮挡和姿势变化是对表情识别最大的两个障碍。为了解决这些问题,这篇文章试图构建一个真实场景的表情数据集,并且在此数据集上提出模型提高识别的精度。

方法描述

首先,作者以数据集 FERPlus, AffectNet 和 RAF-DB 为基础制造了 Occlusion-FERPlus, Pose-FERPlus, Occlusion-AffectNet, 和 Pose-AffectNet, Occlusion-RAFDB, 和 Pose-RAF-DB。遮挡的数据集是通过手动标注上口罩/眼镜或其他物品在脸部的各个区域。姿势的变化则是通过一个头部变化工具箱自动标记。很明显,一个表现较好的参考模型在这两个加入遮挡和姿势变化的数据集上效果会大打折扣。

然后,作者就重点介绍了本文的重点 Region Attention Network(RAN),RAN 的数据传播途径如图 3 所示。

图 3:文中 RAN 的整体架构

如图 3 所示,RAN 主要由三个模块构成,分别是区域划分及特征提取模块 (图像最左边的 Crop 和 Shared 步骤),自注意力模块 (图像中间虚线方框) 和关系注意力模块 (图像右边的虚线方框)。输入一幅图像,首先将其切分为若干个区域(如图 4,切分方式有固定点划分和随机划分),然后这些区域块和原始图像被送入 CNN 做区域的特征提取。随后,自注意力模块用全连接层和 Sigmoid 函数分配注意力权重到各个区域。作者还提出一个 Region biased loss 函数被用来规范化注意力权重和增强关键部分的权重。当然,作者也利用了全脸的特征,通过关系注意力模块整合各个区域和整体来进一步提高表情判别的能力。最后区域的特征和整体的特征都被送入分离器进行表情的分类。

具体来说,作者详细介绍了各个步骤。首先,裁剪人脸成不同区域的方法作者就列举了三种。如图分为固定裁剪,关键点裁剪和随机裁剪。

图 4:人脸头像裁剪方法

然后,关于自注意力模块是由全连接层和 Sigmoid 层构成来分配大致的注意力权重,它学习到每个区域块的权重然后通过非线性映射。通过联系区域和总体的关系,关系注意力模块整合所有的区域块,注意力的权重可以被进一步的细化。最后,Region Biased Loss 用来约束各个区域的权重并计算损失。

实验分析

数据集:利用数据集(FERPlus, AffectNet, SFEW, RAF-DB))合成的有遮挡和姿势变化的图片。

实验环境:Pytorch 框架,Titan-X GPU 和 12GB 内存,初始学习率为 0.01,随着迭代的进行以 0.1 衰减,RB-loss 的初始值为 0.02。

以上展示了基础的 CNN 网络和 RAN 网络的实验对比,很明显无论是在遮挡还是姿势变化上,RAN 的效果都比 baseline 较好。

(图片源自论文)图 5:RB-loss 的作用比较

作者用了几个分类的实例来表现 RB-loss 的重要作用。很明显,RB-loss 的效果要好于对比的 softmax function。

最后文章把 RAN 得出的结果与各个数据集的 SOTA 相比较:

文章小结

这篇论文与第一篇发表时间相近,思路也相似,但是本文除了解决遮挡表情的问题,还论证了姿势变化在表情识别任务中的解决之道。作者同时也通过大量的实验论证了 RAN 的可靠性和有效性。

三、Suppressing Uncertainties for Large-Scale Facial Expression Recognition

任务简介

以上两篇文章为基础,本篇新出的 CVPR 2020 才是我们要介绍的重点。本篇文章的作者也是第二篇 RAN 的作者,他在这篇文章中改变了表情识别任务本身。本文的任务是大规模的表情数据集中存在很多错误标签的数据,这些错误可能是由于模糊,低分辨率,和标注者主观的错误。这些错误样本首先可能会使模型过拟合,其次会影响模型学习有效的特征,最后大量错误样本会使得模型在初始阶段难以拟合。因此作者提出方法的目标就是抑制这些错误,并且改进模型使得对表情的识别率升高。

图 6:Self-Cure Network 示意图

方法描述

作者为了解决上述问题,作者提出了一个简单且有效的方法称为 Self-Cure Network(SCN) 来抑制表情数据集中的不确定性。如图 6 所示,SCN 由三个重要部分组成:self-attention importance weighting, ranking regularization, 和 relabeling 这三个部分。其主要步骤为:给定一组图片,首先通过 CNN 提取图像特征,然后 self-attention importance weighting 模块学习到每个图像的权重用以得到样本的重要性,在这个过程中,不确定的的表情图像会被分配低权值。其后,ranking regularization 模块将这些权重以降序的方式排列,通过求取它们平均权值而把它们分为两组(高注意力部分和低注意力部分),这个过程通过 Rank Regularization loss 来实现。最后一个 relabeling 模块尝试通过估算的概率重新标签那些被认为错误的样本。接下来,我们具体介绍 SCN 的各个模块:

1. self-attention importance weighting 用于捕捉样本的特性用于训练。这个模块由非线性的全连接层和 Sigmoid 函数组成,类似于第二篇 RAN 的自注意力模块。但这个模块中作者使用了自定义的损失函数 Logit-Weighted Cross-Entropy Loss 来计算损失:

最终该模块输出(0,1)的权重。

2. rank regularization 模块用来规范上一个模块输出的权重。在这个模块中,它首先以降序的方式排列注意力权重并把这些权重对应的样本分为了两类。该模块保证了高注意力组中的平均注意力高于低注意力组的平均注意力一个阈值。这个过程就需要使用 rank regularization loss(RR-loss):

该模块最终输出两个组,即高注意力组和低注意力组。

3. relabeling

在低注意力组中存在很多标签错误或者不准确的样本,为了有效的改正他们的标签,relabeling 模块比较每个样本最大的预测值和它被给定的值,如果它最大的预测值大于它给定标签值一个阈值$delta_2$的话,新的标签将会被赋予这个样本:

y' 即为样本的新标签。并且这些被改正的样本将有可能在下一轮训练中被赋予大的注意力。这样就完成了网络的重分配权重和数据集的重新标签。

实验分析

数据集:RAF-DB, FERPlus, AffectNet, The collected WebEmotion(收集的网络数据集)。

实验环境:Pytorch 框架,8 Nvidia Titan 2080ti GPU,初始学习率为 0.1,随着学习的进行, 在 15 和 30epochs 的时候衰减十分之一,在 40epochs 的时候停止。batch-size 为 1024。

在实验中,作者首先展示了部分在 SCN 中学习到的权重的样本。通过对比,很明显的感觉到 relabel 模块的作用。

然后作者使用人脸识别的预训练模型在多个打乱部分标签的数据集中进行效果验证。

然后在作者自己收集的数据集中进行预训练,再在各个打乱标签的数据集中进行验证

打乱标签的数据集验证了 SCN 的纠正标签的能力,为了进一步的验证 SCN 在真实数据集中抑制不确定性数据的效果,作者又进行了一系列对比实验。

很明显,SCN 对真实数据集的表情识别能力也十分有效,下一个部分就是与一些 SOTA 进行对比:

文章小结

这篇论文向读者展示了一个 SCN 网络,通过抑制数据集中不确定的数据来学得更多有效的特征,从而提高在大规模真实数据集中表情识别的精度。大量的对比实验又有效的证明了该方法的有效性,该方法创造性的改变了数据的标签,为后续的研究提出了新思路。

文章总结

本文主要介绍的三篇论文都是在讨论如何在含有坏数据的情况下进行表情识别,并且彼此或多或少都有一定的相似性和不同点。第一篇主要是讨论在遮挡的情况下如何分区域的识别表情,第二篇则进一步扩大,在遮挡和姿势变化的情况下也可以分区域的调整注意力来识别表情,在最后一篇中,作者创造性的直接通过初步判别修改标签,利用网络的自我调整,把复杂的数据集重新分类。这几篇论文都给了表情识别领域的研究者不少启发,也许读者也能从这篇解读中收获新的思路。

0 人点赞