论文笔记(一):PFLD: A Practical Facial Landmark Detector
PFLD: A Practical Facial Landmark Detector
-
Abstract: 效果好、速度快
- 端到端、单阶段;用了加速技巧
- 训练用了技巧
- 对rotation information 进行估计,推理阶段没有用
- 设计了新损失
- 考虑geometrical regularization
- 解决数据不平衡
- 模型
- 2.1M
- 140 fps per face on a mobile phone(Qualcomm ARM 845)
-
Introduction: 四种挑战
-
Local Variation: 造成landmarks偏差甚至消失
- 表情
- 局部极端光照(高光、阴影)
- 遮挡
-
Global Variation:造成大量landmarks定位不准
- 动作
- 成像质量
-
Data imbalance:不能代表数据的特征,对不同的属性精度不同
- 太多正面的图像,太少大动作、极端光照、遮挡等样本
-
Model Efficency:模型大小,算力需求
- robotics
- augmented reality
- video chat
-
Contributions
-
对特定需求的精心设计能够节省大量资源!
-
提出牛逼模型,对复杂环境下的人脸效果好
-
对于局部变化,全局变化对结果影响更大;
所以用一个网络来对每张人脸进行geometric information评估,后续对关键点定位进行正则
-
数据不平衡影响深度学习的准确性
训练集中包含大量正脸但是缺少大动作的人脸图,就会使得在处理具有大动作的人脸时精度降低。
所以在误差函数中对较少数据基于较大的惩罚
To address this issue, we advocate to penalize more on errors corresponding to rare training samples than on those to rich ones.
-
为了增大感受野(the receptive field)以及更好地抓住人脸的全局结构,所以加上了一层MS-FC层(multi-scale fully-connected layer)来更精准地定位关键点
-
用MobileNet的结构来搭建PFLD的主干网络来提高处理速度和网络的紧凑性。
-
-
-
Methodology
-
Loss Function
-
训练的好坏取决于损失函数设计的好坏,尤其是训练数据不是那么大的时候
-
ground-truth
predicted ones
真实坐标和预测坐标之间的损失最简单的想法就是用l1l2损失;但是存在一些问题:不考虑几何/结构信息,而直接对损失函数的各个部分同等对待的话,结果不好。
-
真实的3D面部映射到2D图片,会使真实距离与图像中的距离产生偏差
所以将geometric information考虑到惩罚中能够减轻这个问题。
-
数据不平衡会导致效果不好
为了解决这个问题:在损失函数中,对较少的训练样本加更大惩罚力度
-
-
数学公式:
- 广义损失函数:
N代表每张脸上需要侦测的关键点个数;M代表每轮需要处理的图片数量;
代表权重;
-
损失函数:
相当于上式中的式子中的(K=3)表示真实值与预测yaw,pitch and roll angles之间的偏角
显然:偏角增加,惩罚力度就会增加。
参数根据样本属于不同的类别而进行调整(profile-face, frontal-face, head-up, head-down, expression, and occlusion)
- 损失函数的优点:
- 3D动作估计和2D距离衡量都适用,比简单的相加更合理
- 前向与后向过程无论是直观上理解还是计算都很容易
- 能够使网络以单阶段的形式实现而非级联的形式
注:来自主干网络;来自辅助网络。
-
-
Backbone Network
-
CNN提取特征,预测关键点
-
因为考虑到人脸是一种很强的全局结构,比如对称、五官之间的关系,所以这种全局结构能使得关键点定位更加精准
-
使用多尺度的特征图,采用带步长的卷积来实现,这个步骤能够增加感受野。
-
对多尺度的特征图进行全连接来进行最后的预测
-
结构简单,但是简单的结构也能做出很好的效果
-
主干网络是处理速度和模型大小的决定因素,因为在推理阶段只有主干网络参与其中
-
几个考虑的主干网络:
- ShuffleNet
- Binarization
- MobileNet
-
选择MobileNet的原因:
depthwise separable convolution, linear bottle neck, and inverted residuals
-
模型能通过参数来进一步压缩:调整MobileNet的参数,进行量化
-
-
Auxiliary Network
-
估计3D的旋转信息:yaw, pitch, and roll angles
只要有这三个欧拉角,头部动作就会被确定。
-
为什么不直接根据预测的关键点坐标和真实关键点坐标直接计算欧拉角?
技术上是可行的;但是在训练才开始的时候,关键点的预测往往是很不准的,就会导致算出的欧拉角的质量不是很高;然后就会使得网络不易收敛,比如给予的惩罚力度太大。
所以提出辅助网络来完成旋转信息的估计。
-
计算步骤:
- 预定义一张标准的人脸(平均大量正脸照),在脸上固定11个关键点来作为接下来训练的参考;
- 使用每张脸的11个关键点以及参考点来估计the rotation matrix
- 从the rotation matrix中计算欧拉角
注意:当每张脸都用标准脸来做参考时,计算出的欧拉角并不是对于每张脸来说都是百分百的符合;但是呢这在实际应用中无伤大雅。
-
-
Implementation Details
-
训练时:
根据给定的预处理bounding boxes,每张人脸都需要调整到112*112(cropped and resized into 112*112)
kera framework
batch: 256
Adam
weight decay: 1e-6
momentum: 0.9
iterations: 64K
learning rate: 1e-4 throughout the training
Nvidia GTX 1080Ti
-
数据增强:
300W:
每个原本都进行翻转;
旋转每个样本从-30度到30度,每次旋转5度
每个样本都有20%脸部面积随机遮挡
AFLW:
不做数据增强
-
-
-
Experimental Evaluation
-
Experimental Settings
-
Datasets
-
300W
包含了五个人脸数据集:LFPW,AFW,HELEN,XM2VTS,IBUG
标记了68个关键点
使用3148张图片来训练,689张图片来测试。
测试集分为两个子集:554张图片来自LFPW,HELEN;剩余的135张来自IBUG
-
AFLW
包含了24386张人脸;
有非常极端的动作、表情、遮挡;
每张脸至多有21个关键点
20000张作为训练集;4386张作为测试集
-
-
Competitors
-
Evaluation Metrics
-
NME:normalized mean error, which averages normalized errors over all annotated landmarks.
对于300W:用了两个归一化因子
一个将eye-center-distance变成inter-pupil归一化因子;另一个被outer-eye-corner距离归一化为inter-ocular
对于ALFW:数据集中有各种各样的侧脸
将误差用ground-truth bounding box尺寸在所有可见的关键点上归一化
-
CED(cumulative error distribution)
-
-
-
Experimental Results
-
Detection Accuracy
PFLD 0.25X:表示经过压缩的模型(通过设置主干网络的width parameter to 0.25)
PFLD 1X:表示整个模型
效果很好!!!
-
Model Size
C: i7-6700K
G: GTX 1080Ti
G*: TITAN X
A: Qualcomm ARM 845
-
Processing Speed
Qualcomm ARM 845
PFLD 0.25X: 7ms per face; over 140 fps
PFLD 1X: 26.4ms per face; over 37 fps
-
Ablation Study
测试设计的损失函数的优越性;
设计的损失函数是基于l2;
三种不同的设置:
- 只有带有几何限制的l2(,记为: ours w/o )
- 只带有权重的l2(,使得辅助网络失效,记为:ours w/o )
- 带有集合几何限制和权重的l2(记为:ours)
-
Additional Results
实验的时候采用MTCNN来侦测人脸,然后将人脸送入PFLD中进行关键点定位;
有效果不好的不是PFLD不行,是MTCNN不行
-
-
-
Concluding Remarks
本文提出的方法能够应对大规模、实时性要求高的使用场景;
当然还有改进的地方。
论文地址:https://arxiv.org/abs/1902.10859