考虑到人脸表情识别中的大姿态和遮挡问题,我们提出了一种区域注意网络(RAN)来缓解CNN模型的退化。该算法能够自适应地捕获人脸区域信息的重要性,并在区域特征和全局特征之间做出合理的权衡。
RAN的pipeline如图1所示。它主要由三个模块组成,即区域裁剪和特征提取模块、自我注意模块和关系注意模块。给定一张人脸图像(人脸检测后),我们首先使用固定位置裁剪或随机裁剪将其裁剪成多个区域。我们将在实验中比较这些裁剪策略。然后将这些区域和原始人脸一起输入到主干CNN模型中进行区域特征提取。随后,自我注意模块使用全连接层(FC)和sigmoid函数为每个区域分配注意权重。此外,还引入了另一种区域偏置损耗(RB-Loss)来调整注意权重,增强自我注意模块中最有价值的区域。我们将这些区域特征聚合为一个全局表征(图1中的)。然后,关系注意模块在单个区域特征和全局表示的级联上使用类似的注意机制,进一步捕获内容感知的注意权重。最后,我们利用加权区域特征和全局表示来预测表情类别。
自我注意模块
关系注意模块
区域偏差损失
此损失约束 one of the attention weights from crop-faces 应该要比 the attention weight from original faces 更大,且二者差距要大于一定阈值。
区域裁剪的方法
在本文中,我们评估了我们的区域关注网络的三种区域生成方案,即固定位置裁剪、随机裁剪和基于landmark的裁剪。
固定位置裁剪:左上(0.75)、右上(0.75)、中下(0.75)、中心(0.9)、中心(0.85)。括号中的数字代表 crop-face 在 original face 中的占比。All the crops are resized to have the same input size of the backbone CNN。
随机裁剪:we randomly crop N regions with random sizes ranged from0.7 to 0.95 scale ratio of the original face。
基于landmark的裁剪:我们使用MTCNN检测五个面部地标(即左眼、右眼、鼻子、左嘴角和右嘴角),并使用它们裁剪五个区域。具体地说,我们根据每个面部地标,使用半径r来裁剪区域。
遮挡和姿态数据集
为了在真实场景下检验我们的方法,我们从现有的大规模FER数据集中构建了六个测试数据集。从FERPlus[5]的测试集、AffectNet[48]的验证集和RAF-DB[34]的测试集中,我们收集了用于测试的Occlusion-FERPlus, Pose-FERPlus, Occlusion-AffectNet, Pose-AffectNet, Occlusion-RAF-DB, and Pose-RAF-DB。测试集链接:https://github.com/kaiwang960112/Challenge-condition-FER-dataset.
实验细节
这部分有几个以后可能会用到的点。
1.Dlib toolbox可以裁剪和对齐人脸。http://dlib.net
2.Resnet和VGG都可以用来做主干网络,二者既可以用图像分类的预训练模型,也可以用人脸识别的预训练模型。人脸识别预训练模型:MS-Celeb-1M(Resnet),VGG-Face(VGG,http://www.robots.ox.ac.uk/ vgg/software/vgg_face/)
结果