madobet / webooru

Web Danbooru
32 stars 6 forks source link

一个实用价值很大的人脸关键点检测算法PFLD - GiantPandaCV专栏 #219

Open madobet opened 4 years ago

madobet commented 4 years ago

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

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

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

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

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

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

4.1 损失函数设计

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

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

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

4.2 辅助网络的细节

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

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

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

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

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

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

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

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

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

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

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

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

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

https://www.yanxishe.com/columnDetail/19766