zoukankan      html  css  js  c++  java
  • 一个实用价值很大的人脸关键点检测算法PFLD

    • https://zhuanlan.zhihu.com/p/73546427
    • https://blog.csdn.net/wwwhp/article/details/88361422
    • https://arxiv.org/pdf/1902.10859.pdf
    • https://github.com/polarisZhao/PFLD-pytorch

    1. 前言

    PFLD全称A Practical Facial Landmark Detector是一个精度高,速度快,模型小的人脸关键点检测模型。在移动端达到了超实时的性能(模型大小2.1Mb,在Qualcomm ARM 845 处理器上达到140fps),作者分别来自武汉大学,天津大学,腾讯AI Lab,美国天普大学,有较大的实用意义。

    2. 挑战

    人脸关键点检测作为人脸相关应用中的一个基础任务面临了很多挑战,包括检测精度,处理速度,模型大小这些因素都要考虑到,并且在现实场景中很难获取到质量非常高的人脸,所以人脸关键点检测主要面临下面几个挑战:

    • 局部变化:现实场景中人脸的表情,广告,以及遮挡情况都有较大的变化,如Figure1所示
    • 全局变化:姿态和成像质量是影响图像中人脸的表征的两个主要因素,人脸全局结构的错误估计将直接导致定位不准
    • 数据不平衡:不平衡的数据使得算法模型无法正确表示数据的特征
    • 模型的性能:由于手机和嵌入式设备计算性能和内存资源的限制,必须要求检测模型的size小处理速度快

    图片Figure 1

    3. 创新点

    总的来说,本文设计的PFLD在复杂情况下也可以保持高精度。针对全局变化,PFLD采用辅助网络来估计人脸样本的集合信息。针对数据不平衡,设计新的损失函数,加大对难样本的惩罚力度。使用multi-scale fc层扩展感受野精确定位人脸的特征点。使用Mobilenet Block构建网络的Backbone提升模型的推理速度及减少模型的计算量。

    4. PFLD网络结构

    PFLD的网络结构如下图所示:

    图片Figure2 PFLD的整体结构

    其中黄色虚线圈起来的部分表示主分支网络,用于预测关键的位置。绿色虚线圈起来的是head pose辅助网络。这样在训练关键点回归的同时预测人脸姿态,从而修改损失函数,使得模型更加关注那些稀有以及姿态角度过大的样本,从而提高预测的精度。

    可以看到在主分支网络中,PFLD并没有采用VGG16,ResNet50等大模型。但为了增强模型的表达能力,对MobilenetV2的输出特征进行了结构上的修改,如Figure2中主分支网络的右边所示。PFLD融合了3个尺度的特征来增加模型的表达能力。

    4.1 损失函数设计

    我们知道一般的回归损失是MSE或者Smooth L1 Loss,但它们都难以应对数据不均衡的情况,以MSE Loss为例,损失函数可以写成:

    图片公式1

    其中表示人脸样本的数量,表示每张人脸预设的需要检测的特征点数目,在本文表示L2距离,表示不同类型样本的不同权重。

    而RetinaNet中提出的Focal Loss可以较好的应对二分类中的数据不均衡情况,受到这一启发,作者设计了下面的损失函数来缓解数据不均衡的情况:

    图片PFLD loss

    • 代表权重
    • ,, ()分别表示GT和Prediction在yaw、pitch、roll三种角度之间的偏差,角度越大值越小,权重越大。其中pitch代表上下翻转,yaw代表水平翻转,roll代表平面内旋转,都表示人脸的一种姿态。
    • 表示不同的类别的人脸: 正脸、侧脸、抬头、低头、表情以及遮挡情况,根据样本类别分数进行调整,论文中使用的分数样本数的导数计算的。
    • 由主分支网络计算得到,由辅助网络计算得到,然后由Loss来建立联系。

    4.2 辅助网络的细节

    PFLD在训练过程中引入了一个辅助网络用以监督PFLD网络模型的训练,如Figure2中绿色虚线里的部分。该子网络仅在训练的阶段起作用,在推理阶段不起作用。

    该子网络对每一个输入的人脸样本进行三维欧拉角估计,它的Ground Truth由训练数据中的关键点信息进行估计,虽然估计不太精确,但是作为区分数据分布的依据已经足够了,因为这个辅助网络的目的是监督和辅助关键点检测主分支。另外需要注意的一点是,这个辅助网络的输入不是训练数据,而是PFLD主分支网络的中间输出(第4个Block)。

    4.3 主分支网络和辅助网络的详细配置

    主分支网络和辅助网络的详细配置表如下:

    图片主分支网络的配置图片辅助网络的配置

    5. 实验结果

    下面的Figure3展示了在300W数据集上PFLD和其它一些经典算法的CED曲线对比:

    图片在300W数据集上PFLD和其它一些经典算法的CED曲线对比

    下面的Table3展示了PFLD在各个平台上的性能表现:

    图片Table3

    下面的Table4展示了不同的评价标准和不同的数据子集的评价指标:

    图片Table4

    Table5还展示了FPLD在AFLW数据集上的表现:

    图片FPLD在AFLW数据集上的表现

    最后Figure4还展示了一些在具有挑战性的样本上的表现:

    图片Figure4

    6. 总结

    总的来说FPLD是一个idea非常好并且实用价值比较大的人脸关键点检测算法,无论是人脸姿态估计子网络的引入还是针对数据不平衡重新设计损失函数都是值得借鉴的。

    7. 参考文章

    • https://zhuanlan.zhihu.com/p/73546427
    • https://blog.csdn.net/wwwhp/article/details/88361422
    • https://arxiv.org/pdf/1902.10859.pdf
    • https://github.com/polarisZhao/PFLD-pytorch

    另外,今天为大家送3本 北京大学出版社提供的《Git 从入门到精通》,封面如下:

    图片书籍封面

    点击下面的留言板留言你使用的最多的Git命令,集赞最多的三名读者将分别获得一本正版书籍。

    点击这里,留言送书哦

    欢迎关注GiantPandaCV, 在这里你将看到独家的深度学习分享,坚持原创,每天分享我们学习到的新鲜知识。( • ̀ω•́ )✧

    有对文章相关的问题,或者想要加入交流群,欢迎添加BBuf微信:

    图片为了方便读者获取资料以及我们公众号的作者发布一些Github工程的更新,我们成立了一个QQ群,二维码如下,感兴趣可以加入。

    图片

  • 相关阅读:
    洛谷 P1351 联合权值
    go如何判断一个目录为空目录
    golang语言os.Stat()用法及功能
    Golang书籍收藏
    C语言I博客作业05
    C语言I博客作业04
    C语言I博客作业02
    C语言I博客作业02
    [SCOI2016]萌萌哒
    [SDOI2009]Elaxia的路线
  • 原文地址:https://www.cnblogs.com/shuimuqingyang/p/14602065.html
Copyright © 2011-2022 走看看