CVPR2020 | 大规模人脸表情识别(附源代码)_计算机视觉研究院的博客-程序员秘密

技术标签: 机器学习  计算机视觉  深度学习  人工智能  人脸识别  

点击蓝字关注我们

扫码关注我们

公众号 : 计算机视觉战队

扫码回复:人脸表情,获取链接

今天我们推送一篇关于人脸识别的文献,目前被CVPR2020录为最佳人脸识别框架之一。这次“计算机视觉研究院”简洁给大家分析,后续我们会分享具体代码实现功能,有兴趣的同学请持续关注!

概述

从事人脸领域的你,都知道:由于面部表情的模糊性、图像的低质量以及注释者的主观性,对大规模面部表情数据集进行标注是非常困难的事情。

这些不确定性成为了深度学习时代大规模面部表情识别的关键挑战之一。为了解决这个问题,本次投稿的作者提出了一种简单而有效的Self Cure Network(SCN),它能有效地抑制不确定性,防止深度网络对某些面部图像的过度拟合。具体来说,主要通过两种方法:

  • 小批量上的自注意力机制(self-attention machanism),对每个训练样本加权,进行等级正则化(ranking regularization);

  • 仔通过细的重新标注机制(careful relabeling machanism),在排名最低的组中修改这些样本的标签。

简单说下背景

面部表情是人类传达情感状态和意图的最自然、最有力和最普遍的信号之一。自动识别面部表情对于帮助计算机理解人类行为并与其交互也很重要。在过去的几十年里,研究人员利用算法和大规模数据集在面部表情识别(FER)方面取得了重大进展,在实验室或野外可以收集数据集,如CK+、MMI、Oulu-CASIA、SFEW/AFEW、FERPlus、EmotioNet、RAF-DB等。

然而,对于从互联网上收集的大规模FER数据集,由于注释者的主观性以及模糊的野外面部图像所造成的不确定性,极难高质量地进行注释。 

如上图所示,不确定性从高质量和明显的面部表情增加到低质量和微表情。这些不确定性通常导致不一致的标签和不正确的标签,这暂停了大规模面部表情识别(FER)的进展,特别是对于基于数据驱动的深度学习的FER。一般来说,具有FER不确定性的训练可能会导致以下问题。首先,它可能导致不确定样本的过度拟合,这可能是错误的标签;第二,一个模型学习有用的面部表情特征是有害的;第三,高比例的不正确标签甚至使模型在优化的早期阶段不收敛。

Self-Cure Network

于是作者就提出了SCN,主要由三个关键模块组成:self-attention importance weighting、rangking regularization和nosie relabeling。

在给定一批图像的情况下,首先利用主干CNN提取人脸特征。然后,self-attention importance weighting模块学习每个图像的权重,以捕获样本重要度进行损失加权。不确定的面部图像将被赋予较低的权重。接着,rangking regularization模块将这些权重按降序排列,并将其分为两组,并通过强制两个组的平均权重之间存在margin来对这两个组进行正则化(Rangk Regularization Loss(RR-Loss))。rangking regularization模块确保第一个模块学习有意义的权重来突出某些样本(如:可靠的标注)和抑制不确定样本(如:模糊的标注)。

最后一个模块是careful relabeling模块,它试图通过将最大预测概率与给定标签的概率进行比较来重新标记来自底层组的这些样本。如果一个样本的最大预测概率高于给定的带有边缘阈值的标签,则将该样本分配给一个伪标签。此外,由于不确定的主要证据是不正确的/噪声注释问题,从互联网上提取了一个极端噪声的FER数据集,称为WebEmotion,来研究SCN对极端不确定性的影响。

 整个SCN可以端到端的方式进行训练,并且可以很容易地添加到任何CNN的主干网络中。

Self-Attention Importance Weighting

实际上就是采用一个含有FC层和sigmoid激活函数的网络来对每个图像预测权重,具体如下:

αi是第i个样本的importance weight。

Rank Regularization

上述模块中的 self-attention weights可以在(0,1)中任意值,为了明确地约束不确定样本的重要性,作者精心设计了一个rank regularization模块来正则化注意权重。在rank regularization模块中,首先将学习到的注意权重按降序排序,然后将它们分成两组,比率β。rank regularization保证了高重要群体的平均注意权重高于具有margin的低重要群体。在形式上为此定义了一个rank regularization损失(RR-Loss),如下所示:

Relabeling

在rank regularization等模块中,每个小批量被分成两组,即高重要性和低重要性群体。实验发现,不确定的样本通常具有较低的重要性权重,因此一个直观的想法是设计一种重新标记这些样本的策略。

具体跑代码的试验参数设置,后期我们讲解实践的时候,一起说,这次我们先说说作者的实验结果及分析。

实验结果分析

Visualization of the learned importance weights in SCN

在synthetic noisy FER数据集中的评价如下:

WebEmotion数据集

在WebEmotion数据集中预训练的影响如下:

Evaluation of the margin δ1 and δ2, and the ratio β on the RAF-DB dataset

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/gzq0723/article/details/108957646

智能推荐

浅析“WeixinJSBridge is not defined”_Fundebug的博客-程序员秘密

Fundebug并没有使用微信 JS-SDK,然而却收到了WeixinJSBridge is not defined的报错:我们的用户也收到了类似的错误报警,并且很多开发者都遇到类似的问题:我的微信项目,没有用到微信 JS-SDK,但 iphone 部分手机点击某些功能无效,后来加了 window.onerror 监控,发现有 Uncaught ReferenceError: Weixin...

关于更换显卡后,vs编译cuda文件时,报MSB372的问题及解决方法_tudounaliqu的博客-程序员秘密

问题:MSB372近日在配置开源模型TensorRTx时,遇到如下问题:首先先说明下配置环境:windows+3070显卡+vs2015+cuda11.1+cudnn8.0.5+tensorrt7.2.3.4。刚开始怀疑3070显卡与cuda型号不匹配,分别换了cuda11.2 ,11.4,10.2,据说3070卡不支持cuda10.2,哎,不管啦。。结果又是报这个错误。好吧求助 度娘~(1)首先被我搜到这篇文章,这里是引用https://blog.csdn.net/a1340629895/

UTF8 编码方式,以及GB2312、Unicode、UCS等编码介绍。_ucs/unicode编码与gb2312编码保持向下兼容_elfylin的博客-程序员秘密

先介绍一下各种编码方式的,再详细说下utf8的编码规则。1、GB2312 系列(Big5 GBK GB18030)早期的计算机使用7位的ASCII编码,为了处理汉字,程序员设计了用于简体中文的GB2312和用于繁体中文的big5。GB2312支持的汉字太少。1995年的汉字扩展规范GBK1.0收录了21886个符号,它分为汉字区和图形符号区。汉字区包括21003个字符。2000年的

使用Asm操作java字节码(一)_pom引入asm_虎哥和你一起学编程的博客-程序员秘密

asm是一款很优秀的操作java字节码的框架,专注于性能,是实现Aop的一大利器,spring中的cglib中的cglib就是使用的asm来完成aop的功能。 asm中有两种操作字节码的方式,一种是基于事件模型,一种是树模型(对象)。基于事件模型中有几个很核心的类,例如ClassReader,ClassWriter,ClassVisitor。读取一个类的字节码文件,需要使用ClassReader,创建一个类的字节码文件,需要使用ClassWriter,对一个类进行修改需...

ArcSDE服务启动错误及解决方法_arcsde error number_为了淑宝努力努力的博客-程序员秘密

一、授权错误现象:ArcSDE服务启动又停止了。。。Software Authorization 无法完成注册,仍然提示 No ArcSDE server license found。原因查看:事件查看器>>应用程序>>主要错误描述如下:。。。Error (-327), No ArcSDE server license fo...

hibernate在控制台打印 SQL 语句_hibernate 打印sql_春风化作秋雨的博客-程序员秘密

在 Config 里面把 hibernate. show_SQL 设置为 true 即可。不建议开启,开启后会降低程序的运行效率。1、spring boot 之ymlspring: jpa: properties: hibernate: format_sql: true //格式化sql语句 show_sql: true //控制台是否打印 use_sql_comments: true /

随便推点

Android Camera PreviewSize PictureSize SurfaceView之间的关系_pictsize_MagicWZQ的博客-程序员秘密

一、PreviewSize 相机预览时的尺寸,不能随意的设置值。只能通过camera的parameters的getSupportedPreviewSizes 方法,获取支持的预览尺寸列表,并从列表中选择一个设置在parameters中。 // 打印所有支持的预览分辨率 camera = Camera.open(Camera.CameraInfo.CAMERA_FACING_BACK);

Git 自动保存用户名密码_git自动保存密码_萧紫陌的博客-程序员秘密

清空了git的账户设置,于是每次更新都需要重新输入用户名及密码。所以需要设置 输入一次之后自动保存用户名及密码安装配置好git后,在C:\用户\Administrator\ 目录下有一个 .gitconfig 的文件,这就是git的配置文件,打开这个文件,里面会有你先前配好的name 和email信息,然后你只需要在下面加一行:[credential] helper = store这样再更新或者上传一次代码,之后就不需要重新输入用户名及密码了参考文章:https://blo

ubuntu系统重启后桌面分辨率减小的原因及解决方法_ubuntu重启后分辨率降低_lfeifan的博客-程序员秘密

一、相关命令sudo apt-get update: 升级安装包相关的命令,刷新可安装的软件列表(但是不做任何实际的安装动作)sudo apt-get upgrade: 进行安装包的更新(软件版本的升级)sudo apt-get dist-upgrade: 除了拥有upgrade的全部功能外,dist-upgrade会比upgrade更智能地处理需要更新的软件包的依赖关系。sudo do...

分布式架构的十四次演进之路_公众号:ITIL之家的博客-程序员秘密

公众号回复'架构'获取架构师电子书及视频课程导读:本文介绍从一百个到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个...

Centos ping不通百度彻底解决_我是潇洒哥的弟弟黑大帅的博客-程序员秘密

1.简介在职场过程中,有一个重要的内容就是熟练使用Linux操作系统,操作命令,而安装虚拟机,配置虚拟机环境则是开发的首要步骤。本文主要是对在VMWare中配置网络,使得通过虚拟机可以访问外部网络,ping通www.baidu.com而写。2.安装步骤2.1 安装VMware VMWare下载2.2 安装Centos2.2.1 安装Centos其他的参数不再赘述。如果在安装时提示Intel-VTx未启用,则重启,并在BIOS中开启Intel-VTx.在安装Centos,使用1708版

【原创】ubuntu 挂起后唤醒解决办法_ubuntu挂起后怎么唤醒_GENGLUT的博客-程序员秘密

待机计算机将目前的运行状态等数据存放在内存,关闭硬盘、外设等设备,进入等待状态。此时内存仍然需要电力维持其数据,但整机耗电很少。恢复时计算机从内存读 出数据,回到挂起前的状态,恢复速度较快。一般笔记本在电池无故障且充满的情况下可以支持这种挂起数小时甚至数天(依具体机型有差别)。其他名称:Suspend, STR(Suspend To RAM), 挂起, 挂起到内存休眠计算机将目前的