论文: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个改进点

1.网络结构中的分类分支,增加attention机制。
2.增加正则化排序的思想。本质就是预测得分score超过平均得分一定阈值区间的,才进行梯度回传,其余的不进行梯度回传。这个的本质就是因为数据集的标注不可信。所以,只回传网络认为可信的图片产生的梯度。思想,非常类似OHEM的思想。区别就是SCN对数据不信任,OHEM却高度信赖数据。
3.对标注数据的标签,基于模型的预测,进行重打标签relable的操作。
4.贡献了新的表情识别数据集,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

数据集地址:https://www.kaggle.com/c/challenges-in-representation-learning-facial-expression-recognition-challenge/data

发布于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
————————————————