论文:Suppressing Uncertainties for Large-Scale Facial Expression Recognition
Github:https://github.com/kaiwang960112/Self-Cure-Network
CVPR 2020,siat乔宇老师组的作品。
Self-Cure Network (SCN),本质就是可以实现自我治愈功能的网络结构。
We expect the network can be cured by itself with either re-weighting or relabeling, which is the reason why we call our method as self-cured network.
人脸表情识别,最麻烦的地方就在于,表情是有一个变化区间的。不同的表情之间,界线比较模糊。甚至不同的人会认为是不同的表情。假设可以分为,"happy":0, "angry":1, "calm":2, "scared":3, "sad":4, "disgust":5, "surprised":6这7种表情。
后续甚至由“单一表情”发展为“复合表情”,“混合表情”的识别。
表情识别,本质是一个分类问题,但是直接分类,可能很难达到一个非常好的效果。除非在数据集上下很大的功夫。
这篇文章,主要提出了4个改进点。
- 网络结构中的分类分支,增加attention机制。
- 增加正则化排序的思想。本质就是预测得分score超过平均得分一定阈值区间的,才进行梯度回传,其余的不进行梯度回传。这个的本质就是因为数据集的标注不可信。所以,只回传网络认为可信的图片产生的梯度。思想,非常类似OHEM的思想。区别就是SCN对数据不信任,OHEM却高度信赖数据。
- 对标注数据的标签,基于模型的预测,进行重打标签relable的操作。
- 贡献了新的表情识别数据集,WebEmotion dataset。
整体流程:
整个的模型,以resnet18为基础网络结构。输入图片大小为224*224,分为Self-Attention Importance Weighting ,Rank Regularization ,Relabeling,3个改进点模块。
Self-Attention Importance Weighting:
首先会先随机生成一个attention权重αi ,维度大小和全联接层的大小一样。
其中,W表示全连接层权重,σ表示sigmoid激活函数。
Logit-Weighted Cross-Entropy loss (WCE-Loss)
和softmax 交叉熵的唯一区别就是增加了正相关系数,也就是attention系数,αi
代码实现:
attention_weights = self.alpha(x)
out = attention_weights * self.fc(x)
Rank Regularization:
首先对一个Batch内的预测得分进行排序,取前tops的作为高得分,剩下的作为低得分。分别计算高分,低分的平均值。如果高分比低分还多出规定的阈值的,就将多出的得分,作为梯度回传,否则不进行梯度回传。这样的操作,可以对得分较高的样本,获得更多的梯度。
最终整体的loss,就是加了attention 的交叉熵loss和rank loss的组合
代码实现:
# Rank Regularization
_, top_idx = torch.topk(attention_weights.squeeze(), tops)
_, down_idx = torch.topk(attention_weights.squeeze(), batch_sz - tops, largest = False)
high_group = attention_weights[top_idx]
low_group = attention_weights[down_idx]
high_mean = torch.mean(high_group)
low_mean = torch.mean(low_group)
# diff = margin_1 - (high_mean - low_mean)
diff = low_mean - high_mean + margin_1
if diff > 0:
RR_loss = diff
else:
RR_loss = 0.0
targets = targets.cuda()
loss = criterion(outputs, targets) + RR_loss
Relabeling:
Y’表示新的标签,
σ2是预先规定的阈值,
Pmax表示每一个预测的结果里面最大的得分,例如10个分类里面,得分最高的那个,
PgtInd表示对于给定的标签,网络的预测得分。比如标签的类别是类别0,那么对于类别0的网络的预测得分就是PgtInd。
代码实现:
# Relabel samples
if i >= args.relabel_epoch:
sm = torch.softmax(outputs, dim = 1)
Pmax, predicted_labels = torch.max(sm, 1) # predictions
Pgt = torch.gather(sm, 1, targets.view(-1,1)).squeeze() # retrieve predicted probabilities of targets
true_or_false = Pmax - Pgt > margin_2
update_idx = true_or_false.nonzero().squeeze() # get samples' index in this mini-batch where (Pmax - Pgt > margin_2)
label_idx = indexes[update_idx] # get samples' index in train_loader
relabels = predicted_labels[update_idx] # predictions where (Pmax - Pgt > margin_2)
train_loader.dataset.label[label_idx.cpu().numpy()] = relabels.cpu().numpy() # relabel samples in train_loader
表情识别数据集汇总:
(1)JAFFE
数据集链接:http://www.kasrl.org/jaffe.html
1998年发布,这是比较小和老的数据库。该数据库是由10位日本女性在实验环境下根据指示做出各种表情,再由照相机拍摄获取的人脸表情图像。整个数据库一共有213张图像,10个人,全部都是女性,每个人做出7种表情,这7种表情分别是:sad, happy, angry, disgust, surprise, fear, neutral,每组大概20张样图。
(2)KDEF与AKDEF
数据集地址:http://www.emotionlab.se/kdef/
发布于1998年,这个数据集最初是被开发用于心理和医学研究目的。它主要用于知觉,注意,情绪,记忆等实验。在创建数据集的过程中,特意使用比较均匀,柔和的光照,被采集者身穿统一的T恤颜色。这个数据集,包含70个人,35个男性,35个女性,年龄在20至30岁之间。没有胡须,耳环或眼镜,且没有明显的化妆。7种不同的表情,每个表情有5个角度。总共4900张彩色图,尺寸为562*762像素。
(3) GENKI
数据集地址:http://mplab.ucsd.edu
发布于2009年,GENKI数据集是由加利福尼亚大学的机器概念实验室收集。该数据集包含GENKI-R2009a,GENKI-4K,GENKI-SZSL三个部分。GENKI-R2009a包含11159个图像,GENKI-4K包含4000个图像,分为“笑”和“不笑”两种,每个图片拥有不同的尺度大小,姿势,光照变化,头部姿态,可专门用于做笑脸识别。这些图像包括广泛的背景,光照条件,地理位置,个人身份和种族等。
(4) RaFD
数据集地址:http://www.socsci.ru.nl:8180/RaFD2/RaFD?p=main
发布于2010年,该数据集是Radboud大学Nijmegen行为科学研究所整理的,这是一个高质量的脸部数据库,总共包含67个模特,其中20名白人男性成年人,19名白人女性成年人,4个白人男孩,6个白人女孩,18名摩洛哥男性成年人。总共8040张图,包含8种表情,即愤怒,厌恶,恐惧,快乐,悲伤,惊奇,蔑视和中立。每一个表情,包含3个不同的注视方向,且使用5个相机从不同的角度同时拍摄的。
(5)CK
数据集地址:http://www.pitt.edu/~emotion/ck-spread.htm
发布于2010年,这个数据库是在Cohn-Kanade Dataset的基础上扩展来的,它包含137个人的不同人脸表情视频帧。这个数据库比起JAFFE要大的多。而且也可以免费获取,包含表情的标注和基本动作单元的标注。
(6)Fer2013
发布于2013年,该数据集包含共26190张48*48灰度图,图片的分辨率比较低,共6种表情。分别为0 anger生气、1 disgust 厌恶、2 fear 恐惧、3 happy 开心、4 sad 伤心、5 surprised 惊讶、6 normal 中性。
(7)RAF
数据集地址:http://www.whdeng.cn/RAF/model1.html
发布于2017年,包含总共29672 张图片,其中7个基本表情和12 个复合表情,而且每张图还提供了5个精确的人脸关键点,年龄范围和性别标注。
(8)EmotionNet
数据集地址:http://cbcsl.ece.ohio-state.edu/EmotionNetChallenge/
发布于2017年,共950,000张图,其中包含基本表情,复合表情,以及表情单元的标注。
实验结果:
Ref:
http://www.pris.net.cn/introduction/teacher/dengweihong