人脸具有许多属性,比如:年龄、发色、是否戴眼镜等等,具体细节可阅读这篇综述:A Survey to Deep Facial Attribute Analysis。其中,比较热门的应该是表情属性,甚至大部分时候表情识别单独作为一个方向进行讨论。不过,在这篇博文中,我将表情识别作为面部属性的其中一个小分支看待,与人脸属性识别一起进行讨论。(如果对表情识别感兴趣,可以看看这篇综述:Deep Facial Expression Recognition: A Survey,由北邮模式识别实验室所提出)
目录
论文链接:Deep Learning Face Attributes in the Wild, 发表时间:2014.11
本篇论文由港中文的 MMLab 提出(通讯作者为汤晓鸥),整体算法属于 Part-Based Method,主要思路为:构建两个卷积网络,分别记为 LNet 和 ANet,LNet 用于定位人脸具体位置(
其中,LNet 在 ImageNet 上进行预训练,再利用 Attribute Tag 对新增的 Output Layer 进行 fine-tune;ANet 在 CelebFaces 上进行预训练,再利用 Attribute Tag 对其进行 Fine-Tune。
此外,作者对 CelebFaces 和 LFW 人脸数据集进行标注,构建了人脸属性识别数据集 CelebA 和 LFWA(目前 CelebA 已经成为人脸属性识别的 Bechmark )。
论文链接:Fully-adaptive Feature Sharing in Multi-Task Networks with Applications in Person Attribute Classification,发表时间:2016.11
在这篇论文中,作者主要讨论 Multi-Task Learning(MTL)中网络设计的问题,提出了自适应特征共享算法,从较瘦的网络开始(使用SOMP进行初始化),由网络挖掘各个子任务的相关性,使得各个子任务选择性共享特征,最终使得网络逐渐加粗。
在 MTL 中,常见网络结构都是由手工设计,基本都是主干网络提取底层特征,分别输入到各个子模块进行预测。但是,这样将导致网络结构往往不是为最优解,因为受设计者主观影响大。于是作者就从此入手,让网络自动对各个任务分支进行聚合,不将其局限于使用一样的特征,并对任务聚合进行约束,防止 negative transfer 现象的发生。
任务聚合后的网络结构:(model on CelebA)
自适应拓展算法伪代码:
Simultaneous Orthogonal Matching Pursuit(SOMP)算法伪代码:
此外,作者在 CelebA 和 DeepFashion 上分别取得当时的 SOTA,其中,DeepFashion 同样由 MMLab 提出,目前为 Clothes Recognition 方向的 Bechmark。
PS: 作者开源项目:luyongxi/deep_share,不过没有详细的项目说明,至今 issues 里关于 'How to run it?' 的问题都没回复。
论文链接:Reliable Crowdsourcing and Deep Locality-Preserving Learning for Expression Recognition in the Wild, 发表时间:2017
该论文由北邮模式识别实验室所提出,一/二作分别为 Shan Li 和 Weihong Deng,也是 Deep Facial Expression Recognition: A Survey 的作者(最近几年,邓伟洪副教授经常在人脸识别方向上发文章,构建了许多数据集,推荐大家看他一篇最近的工作:A Deeper Look at Facial Expression Dataset Bias)。
在论文中,作者通过 Reliable crowdsourcing approch 构建了非受控环境下的人脸表情数据集 RAF-DB,其中不仅含有 7 类基础表情标签,还包括 12 类复合表情标签,近年来也成为非受控环境下人脸表情识别的 Bechmark。(2019 年,作者构建了一个含有 6 类基础表情标签的人脸表情数据集:RAF-ML。与 RAF-DB 相比,RAF-ML 所含标签不是 Sigle Label,而是 Blended Label。)作者不仅分析了 RAF 采集/标注/过滤/分析/评估过程的设计,还通过跨数据集实验,证明 RAF 的 AU 比 CK+ 更多样化,即跟符合现实情况下的人脸表情。
为了应对现实环境下人脸识别问题,作者还提出了 Deep Locality-Preserving CNN(DLP-CNN),通过添加 Local Proserving Loss(LP Loss),从而缩短样本的类内距离,扩大样本的类间距离,使得模型能更好的解决在非受控环境下进行人脸表情识别问题。
关于 RAF 的构建:
作者先通过网络爬取 29672 张现实场景下的人脸表情图像,雇佣 315 个标注员进行随机标注(由大学的学生与员工组成,都接受过一小时的心理知识培训),确保每张图像至少经过四十个标注员标注。表情标签标注完毕后,作者手动对图像中的人脸进行人脸框以及人脸关键点(5 个)的标注,并利用 Face++ 的 API 进行人脸关键点(37 个)的标注。此外,作者还提供一些额外的人脸属性标签,例如:性别、年龄、种族。
为了避免由于标注人员的主观性导致标签出错,作者利用 EM 算法对标签数据进行筛选,以去除其中的噪声。具体算法如下所示:
关于跨数据集实验:
作者为了证明现实场景(即非受控环境)下的人脸表情数据比实验室场景(即受控环境)下的人脸表情数据有明显的区别,便利用 RAF 和 CK+ 进行了跨数据集实验。其实验结果如下所示:(大白话解释的话,应该就是非受控环境下的人脸表情数据更多样、复杂,更难以拟合)
此外,作者还从两个数据集中抽取数据进行 AU 标注并进行比较,由下图可以看出 RAF 的人脸表情数据的 AU 信息更为丰富多样。
关于 DLP-CNN:
由于非受控环境下的人脸表情数据更加复杂,作者认为普通的 Softmax Loss 在这些数据上并不能很好的衡量各个类别中的特征分布,于是作者便提出了 Local Proserving Loss(与 Center Loss 相似),以及 DLP-CNN(也就是卷积网络加 Softmax Loss 和 LP Loss,具体结构如下图所示)。
LP Loss 的核心思路就是想在保持各个类别的类间距离更远的同时,使得类内距离更小,从而使得类内样本的特征分布更加紧凑。不过,由于需要计算各个样本的与其邻居的距离,LP Loss 的计算成本是很高的。具体公式如下所示:
论文链接:Adaptively Weighted Multi-task Deep Network for Person Attribute Classification, 发表时间:2017
论文链接:Covariance Pooling for Facial Expression Recognition, 发表时间:2018.05
本篇论文投在 2018 CVPR Workshop 上,其核心思想为相较于一阶统计量,二阶统计量更适合捕捉人脸关键点的变形,从而提高人脸表情识别的准确率。而传统卷积神经网络只能捕捉一阶统计量,作者便引进 Covariance Pooling 用于从卷积网络所获取的特征中计算协方差矩阵,再将其输入到 SPD Manifold Network(SPDNet) Layers 中。
作者对 SPDNet 的结构进行了实验,并设计了四种不同的结构,具体细节以及实验结果如下所示:
作者在 RAF 和 SFEW 2.0 上取得了目前的 SOTA,即 87.0 和 58.14。但作者所用指标为 Accuracy,我认为应该用 Mean Diagonal Value of the Confusion Matrix 作为指标(因为用 Accuracy 的话,标签为 Happy 和 Neutral 的样本数量占绝大多数且容易识别,并不能完全体现模型表情识别能力),以此为指标,作者在 RAF 和 SFEW 2.0 上的精度分别为 79.4 和 50.1。
PS: 作者开源项目:d-acharya/CovPoolFER(基于 Tensorflow 实现的)。
论文链接:Multi-Task Learning as Multi-Objective Optimization, 发表时间:2018.10
该篇论文由 Intel Lab 提出,作者将 MTL 当作 Multi-Objective Optimization 进行处理,利用 gradient-based multi-objective optimization 进行优化,以此取得帕累托最优解。在文章中,作者介绍了用多目标优化解决多任务学习的一般形式,帕累托最优的定义,如何将求解帕累托最优转换为求解人物权重,以及如何简化计算过程。
Multi-Task Learning(MTL)的一般形式:
MTL 的 Pareto Optimality(帕累托最优解) 定义:
算法细节如下所示:
最后,作者利用该算法在 CelebA 上取得了 SOTA,实验结果如下所示:
PS: 作者开源项目:intel-isl/MultiObjectiveOptimization(基于 PyTorch 实现的)。
参考资料:
如果你看到了这篇文章的最后,并且觉得有帮助的话,麻烦你花几秒钟时间点个赞,或者受累在评论中指出我的错误。谢谢!
作者信息:知乎:没头脑LeetCode:Tao PuCSDN:Code_MartGithub:Bojack-want-drink