本文作者尝试用比较小的CNN来进行表情识别,作者使用4个卷积层和spatial transformer作注意力分类,实现不超过10层的网络,并且在FER2013上取得了70%的精度,这对于本文这样一个很小的网络来说非常不错了。除此之外,作者还在CK+、JAFFE和ERG上面做了验证实验,结果都很不错。
主要两点在于:1)只有4个卷积层,很精简;2)使用spatial transformer network作注意力Module。
0、摘要
存在的问题:
人脸表情识别FER在过去几十年里一直是一个活跃的研究领域,由于类内差异大,所以仍然是一个具有挑战性的问题。
一些传统的方法大多数在受控条件下表现相当好,但是在具有更多变化和遮挡不全的人脸图像上表现不佳。近年来CNN的方法表现不错,但是仍有很大的改进空间。
解决方法和效果:
在本文中,我们提出一种基于注意力卷积神经网络的深度学习方法,该方法能够聚焦于人脸的重要部分,并在FER2013、CK+、FERG和JaFFE等多个数据集上取得了显著的改进。我们还是用了可视化技术,能够根据分类器输出找到重要的人脸区域来检测不同的情绪。通过实验我们发现不同的情绪似乎对脸部的不同部分很敏感
1、引入
人们对人类情感识别感兴趣的领域很多,包括但不限于人机界面、动画、医学、和安全。
深度学习可用提取许多特征用于表情识别,然而在面部表情上,大部分用于表情识别的线索(帮助表情分类的面部特征)来自面部的几个部分:比如嘴巴和眼睛。而其他部分,如耳朵和头发则对正确分类的作用很小。这意味着理想情况下,算法应该只关注人脸的重要部分,而对其他区域不敏感。(可以作为空间注意力机制和通道注意力机制的依据,不同通道可能提取不同特征,某些就可能是耳朵或者头发)
在本文中我们提出了一个居于CNN的FER框架,该框架考虑了上述的观察结果,并使用注意力机制将注意力集中在人脸的显著部分。结果表明,通过使用注意力卷积网络,即使是一个只有很少的层(少于10层)的网络也能达到很高的准确率,我们的贡献如下:
- 提出一种基于注意力卷积网络的方法,可以聚焦人脸特征丰富的区域,并在准确率上由于最近的工作
- 此外我们使用在[Visualizing and Understanding Convolutional Networks]中提出的可视化技术来突出面部图像的最显著区域,即图像中对分类结果影响最大的部分,不同情绪的显著区域如图1
2、相关工作
略
3、框架
通常改进CNN依赖于添加更多的层和神经元,促进网络中的梯度流(比如残差连接),或者更好的正则化,特别是对于有大量类别的分类问题。然而FER因为分类数量少,我们证明了使用少于10层的注意力的CNN能够获得可观的结果。
给定一张脸的图像,显然并不是脸的所有部分都对检测情绪很重要,许多情况下只需要关注特定区域。基于这样的观察,我们通过spatial transformer network添加了注意力机制
图3展示了我们的模型体系结构。特征提取部分由4个卷积层组成,每两个卷积层后面分别是maxpooling层和ReLU激活函数(也就是conv+relu+conv+maxpooling+relu)。特征提取部分的后面是droupout层和两个fc层。
spatial transformer(the localization network)由两个conv层组成(每个conv后面跟上maxpooling+ReLU),最后是两个全连接层。当变换矩阵参数θ被回归出来后,这个输入就会被重采样(转换)(经过
T
(
θ
)
T(θ)
T(θ)).
这个spatial transformer module本质上就是聚焦图像中最有意义最相关的部分,人们使用不同transformations去变换输入,我们使用普遍使用的普通仿射变换。
关于spatial transformer module更多细节可以看:Spatial Transformer Networks(空间转换器)及在MNIST中的应用
Loss
损失函数由两部分构成,一个是分类损失(cross-entropy),另一个是正则化损失(最后两个全连接层的权重的L2范数),通过以下公式构成总Loss:
L
o
v
e
r
a
l
l
=
L
c
l
a
s
s
i
f
i
e
r
+
λ
∣
∣
w
f
c
∣
∣
2
2
L_{overall}=L_{classifier}+λ||w_{fc}||^2_2
Loverall=Lclassifier+λ∣∣wfc∣∣22
正则化权重λ在验证集上进行调整,同时添加dropout和L2正则可以使得在小数据集比如JAFFE、CK+上面训练。
同时我们也训练一个超过50层的模型(与自己不超过10层的模型比较),但是精度没有提高太多,因此后面的实验使用上面这个更简单的模型。
4、实验结果
4.1 数据集介绍
FER2013:该数据集由35887个样本,分辨率为48x48。与其他数据集相比,FER2013有着更加多变的因素,包括脸部遮挡、面部不全、低对比度、戴眼镜等。总之就是数据集大,而且很有挑战性。
CK+:包含123名受试者的共593个序列。
JAFFE:包含213张图像,由10位日本女性受试者提供。
FERG:更像一个动画。该库由55767个人脸图像,使用YAMA对角色进行的建模,作者使用看看在卡通人物上的表现如何(呃…)。
从上面的图可以看出,FER2013数据集是真的难,CK+和JAFFE都是很理想的数据集,FERG就是类似动漫的数据集。
4.2 实验分析和比较
每个数据集都分为训练集、验证集和测试集,而后面的数据就是在测试集上的结果。
模型上,在尽量保持架构和超参数相似条件下,为每个数据集训练一个模型。
初始化上,使用0均值0.05标准差的随机高斯初始化。
优化器使用Adam、0.005的学习率和weight decay。
训练时间上,FER2013和FERG训练了2~4h,而CK+和JAFFE不到10分钟就训练完毕了
在FER2013上,除了前面说的不稳定因素,还存在类别不均衡问题。但是我们在测试集上获得了70.02%的准确率。从下图可以看出,样本越少的类别,错误率越高。
表1展示本文方法和其他方法在FER2013数据集上的表现(其实现在很多都能达到72%+,但是考虑到本文的这个简单结构,感觉也是不错的。但还有一个问题,如果要移植则使用θ采样这块可能会头疼)。
在FERG上,获取了99.3%的精度
对于JAFFE数据集,我们获得了92.8%的精度,
在CK+数据集上,我们获得了98%的精度
4.3 模型可视化
这里使用了两种可视化方法:
- Visualizing and understanding convolutional networks.
- 从左上角将NxN的区域置0,然后看分类结果是否依然保持正确。如果错误证明该区域比较重要。作者使用NxN窗口滑动来检测图像中个区块。
下图是在JAFFE上面使用滑动窗口的实验结果,不同类别有不同的重要区域。
下图是使用方法一可视化结果。
5、总结
本文提出了一种使用注意力卷积网络进行面部表情识别的新框架。我们相信注意力是检测面部表情的重要部分,它可以使不到 10 层的神经网络在情感识别方面与更深的网络竞争(甚至优于)。我们还对我们在四个流行的面部表情识别数据库上的工作进行了广泛的实验分析,并显示了有希望的结果。此外,我们还部署了一种可视化方法来突出显示面部图像的显着区域,这些区域是检测不同面部表情的最关键部分。