惠晓伟. 基于卷积网络的轻量级人脸关键点检测[D]. 黑龙江:哈尔滨工业大学,2018.
文章是一篇硕士论文,实现了一个以SqueezeNet为基础网络,基于多任务并行机制和网络预训练的77点人脸关键点检测网络,同时引入:
数据集使用300W数据集,但是300W数据集只有68关键点,所以添加了额头的9个点,共77个点。
为什么要包含额头关键点?
人脸关键点是一个多输出回归任务
,为了更好的描述误差,使用的评价指标是传统均方误差衍生过来的标准化均方误差(NME),并且针对77关键点进行了改进。
为了简化模型,算法设计上,将主流的人脸检测和人脸对齐串行方案修改为多任务网络的并行机制。
为了提升精度,提出了一种基于网络微调的预训练方案。
公式(3-2)是两眼之间的距离,参考这篇文章,实际上就是通过眼睛周围的关键点计算均值,得到瞳孔坐标点的纵坐标和横坐标。得到两个瞳孔的关键点坐标,再计算两瞳孔之间的距离。计算两个瞳孔间的距离使用的欧氏距离,也就是中学学的计算两点间的距离,但是加了根号的数值会增加计算量,所以使用欧氏距离的平方。
公式(3-3)是改进的标准化均方误差。 D D D为整个数据集。首先计算77个关键点预测值和真实值之间的平方 L 2 L_2 L2范数和。为了解决不同图像大小、不同人脸大小造成的损失不均衡问题,要对损失做标准化:除以双眼之间的距离,以此实现标准化。
因为整个脸和双眼睛的距离是有一定比例关系了,在图像中脸大则双眼距离宽,脸小则双眼距离小,所以无论图像种人脸大或者小,除以双眼间距后,就能避免当计算大小人脸误差时波动太大的情况。
人脸对齐可以保留人脸图像在空间上的对称性(比如左右眼睛、左右嘴巴),使得输入数据更加满足同计算同分布的前提,网络特征提取有会更有规律可循,泛化能力更强。
人脸对齐的本质原理其实就是仿射变换。只不过对于仿射变换需要的变换矩阵由卷积神经网络去回归得到。
如图,首先是人脸检测和人脸裁剪。对齐参数计算网络实际上就是回归仿射变换矩阵参数M的卷积神经网络,得到变换矩阵M(就是对齐参数)后,对原始人脸进行仿射变换,就得到对齐人类。
文中使用了MTCNN这个多任务框架来实现人脸检测和人脸对齐的多任务网络,方法图:
具体详情见论文。
本次实验使用的数据是77关键点的300W数据集,包含9个额头的人工标注关键点。
如图,红色框部分是人脸对齐,绿色框是关键点检测部分。
为了提高77关键点的检测精度,还采用了预训练的68点检测模型和网络微调的方案:复制训练好的模型的前 n n n层,前 n n n层是特征提取层,将其他层随机初始化。在训练时可以分为冻结前 n n n层和不冻结前 n n n层(即微调)。本设计使用微调模式(不冻结前 n n n层)效果更好,原因如下:
人脸对齐方法的模型储存空间对比
关键点检测误差(NME)
文章介绍了MobileNet、SqueezeNet、ShuffleNet等轻量级网络,从下图可以看出,效果最好的其实是SqueezeNet,模型也是最小的。主要是ShuffleNet和MobileNet用来做速度提升,SqueezeNet却可以用来做特征提取。
用SqueezeNet为骨干网络的网络结构:
实验结果:
人脸关键点检测的一个问题是,关键点的分布不均匀,有密集的区域,也有疏散的区域。如果使用MSE作为损失指标(对所有关键点的损失求均值),则对疏散区域的关键点训练效果更好,密集区域的关键点得不到充分的训练。
区域注意力是则是为了缓解损失函数不均衡问题。
使用上式中的评价指标,会造成稠密分布的关键点的训练效果欠佳。
一个直观的解决方法是对稠密关键点在损失函数中的权重,网络在训练时也要接受稠密分布关键点的约束,这样稠密关键点就可以得到更好的学习。区域注意力就是权值自适应。
本文的区域注意力设计如下:
上述两个FC层比一个FC层的优势在于:
效果: