Github链接:https://github.com/hanson-young/nniefacelib/tree/master/PFPLD
1.介绍
PFLD(A Practical Facial Landmark Detector)是一个精度高、速度快、模型小三位一体的人脸关键点检测算法。
PFPLD (A Practical Facial Pose and Landmark Detector)是对PFLD的微改版本。主要对pose branch进行了加强,同时让其关键点对遮挡、模糊、光照等复杂情况更加鲁棒。
2.特点
(1)优化了wing loss,融合了68点以及pose更加精准的300WLP数据集、LAPA106数据集中闭眼数据、原有WFLW数据集。效提升了闭眼情况下关键点不准题,以及pose在抬头时候不精确的问题。
(2)改进了pfld网络结构,让关键点和姿态角度都能回归的比较好,将landmarks branch合并到pose branch中。(使其结果并不会太过于依赖loss函数的设计)
(3)用PRNet标注人脸图像的姿态数据,比原始通过solvePNP得到的效果要好很多,这也直接增强了模型对pose的支持;
(4)使用mult-scale fc层用于扩大感受野精确定位人脸的特征点;
(5)使用Mobilenet block构建网络的backbone提升模型的处理速度减少模型计算量
3.实现方法
3.1数据集介绍
训练数据集
WFLW (104430张训练图片):包含98个关键点坐标和3个姿态角,姿态包括俯仰角、偏航角、翻滚角(即pitch, roll, yaw),训练时只使用关键点坐标计算98关键点损失(lds_98_loss),没有用姿态角。
300W_LP (61225张训练图片):包含68个关键点坐标和3个姿态角,姿态包括俯仰角、偏航角、翻滚角(即pitch, roll, yaw),训练时关键点坐标计算68关键点损失(lds_68_loss),利用姿态角计算姿态损失(pose_loss)。
测试数据集
WFLW(4000张测试图片)进行98关键点测试
3.2 网络结构
PFLD网络结构
其中黄色虚线包围的是主网络,用于预测特征点的位置,绿色虚线包围的部分为辅网络,在训练时预测人脸姿态,测试阶段不需要,辅助网络特性:在不需要正面人脸作为输入的情况下计算出目标的角度。
主网络:mobilenet block + multi scale fc
辅助网络:辅助网络的输入为backbone的第4个block
PFPLD 前向传播代码
PFLD 前向传播代码
3.3损失函数
损失函数由两部分组成,关键点损失和姿态损失,其中关键点和姿态分别使用wingloss和smoothL1损失函数。在关键点回归损失中,为眼睛部分的偏差乘以权重5。
4.结果