PFLD全称A Practical Facial Landmark Detector是一个精度高,速度快,模型小的人脸关键点检测模型。在移动端达到了超实时的性能(模型大小2.1Mb,在Qualcomm ARM 845 处理器上达到140fps),作者分别来自武汉大学,天津大学,腾讯AI Lab,美国天普大学,有较大的实用意义。
人脸关键点检测作为人脸相关应用中的一个基础任务面临了很多挑战,包括检测精度,处理速度,模型大小这些因素都要考虑到,并且在现实场景中很难获取到质量非常高的人脸,所以人脸关键点检测主要面临下面几个挑战:

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

Figure2 PFLD的整体结构
其中黄色虚线圈起来的部分表示主分支网络,用于预测关键的位置。绿色虚线圈起来的是head pose辅助网络。这样在训练关键点回归的同时预测人脸姿态,从而修改损失函数,使得模型更加关注那些稀有以及姿态角度过大的样本,从而提高预测的精度。
可以看到在主分支网络中,PFLD并没有采用VGG16,ResNet50等大模型。但为了增强模型的表达能力,对MobilenetV2的输出特征进行了结构上的修改,如Figure2中主分支网络的右边所示。PFLD融合了3个尺度的特征来增加模型的表达能力。
我们知道一般的回归损失是MSE或者Smooth L1 Loss,但它们都难以应对数据不均衡的情况,以MSE Loss为例,损失函数可以写成:

公式1
其中表示人脸样本的数量,表示每张人脸预设的需要检测的特征点数目,在本文表示L2距离,表示不同类型样本的不同权重。
而RetinaNet中提出的Focal Loss可以较好的应对二分类中的数据不均衡情况,受到这一启发,作者设计了下面的损失函数来缓解数据不均衡的情况:

PFLD loss
PFLD在训练过程中引入了一个辅助网络用以监督PFLD网络模型的训练,如Figure2中绿色虚线里的部分。该子网络仅在训练的阶段起作用,在推理阶段不起作用。
该子网络对每一个输入的人脸样本进行三维欧拉角估计,它的Ground Truth由训练数据中的关键点信息进行估计,虽然估计不太精确,但是作为区分数据分布的依据已经足够了,因为这个辅助网络的目的是监督和辅助关键点检测主分支。另外需要注意的一点是,这个辅助网络的输入不是训练数据,而是PFLD主分支网络的中间输出(第4个Block)。
主分支网络和辅助网络的详细配置表如下:

主分支网络的配置

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

在300W数据集上PFLD和其它一些经典算法的CED曲线对比
下面的Table3展示了PFLD在各个平台上的性能表现:

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

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

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

Figure4
总的来说FPLD是一个idea非常好并且实用价值比较大的人脸关键点检测算法,无论是人脸姿态估计子网络的引入还是针对数据不平衡重新设计损失函数都是值得借鉴的。
本文分享自 GiantPandaCV 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!