一个实用价值很大的人脸关键点检测算法PFLD

1. 前言

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

2. 挑战

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

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

一个实用价值很大的人脸关键点检测算法PFLD_第1张图片

3. 创新点

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

4. PFLD网络结构

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

一个实用价值很大的人脸关键点检测算法PFLD_第2张图片

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

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

4.1 损失函数设计

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

公式1

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

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

PFLD loss

  • ∑ c = 1 C w n c ∑ k = 1 K ( 1 − c o s θ n k ) \sum_{c=1}^Cw_n^c\sum_{k=1}^K(1-cos\theta_{n}^k) c=1Cwnck=1K(1cosθnk)代表权重 γ n \gamma_n γn
  • θ 1 \theta^1 θ1, θ 2 \theta^2 θ2, θ 3 \theta^3 θ3 ( K = 3 K=3 K=3)分别表示GT和Prediction在yaw、pitch、roll三种角度之间的偏差,角度越大 c o s cos cos值越小,权重越大。其中pitch代表上下翻转,yaw代表水平翻转,roll代表平面内旋转,都表示人脸的一种姿态。
  • C C C表示不同的类别的人脸: 正脸、侧脸、抬头、低头、表情以及遮挡情况, w n c w_n^c wnc根据样本类别分数进行调整,论文中使用的分数样本数的导数计算的。
  • d n m d_n^m dnm由主分支网络计算得到, θ n k \theta_n^k θnk由辅助网络计算得到,然后由Loss来建立联系。

4.2 辅助网络的细节

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

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

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

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

一个实用价值很大的人脸关键点检测算法PFLD_第3张图片

一个实用价值很大的人脸关键点检测算法PFLD_第4张图片

5. 实验结果

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

一个实用价值很大的人脸关键点检测算法PFLD_第5张图片

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

Table3

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

一个实用价值很大的人脸关键点检测算法PFLD_第6张图片

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

一个实用价值很大的人脸关键点检测算法PFLD_第7张图片

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

一个实用价值很大的人脸关键点检测算法PFLD_第8张图片

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

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

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

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

公众号QQ交流群

你可能感兴趣的:(目标检测)