1.0 综述
Face Landmarks 也称为 Face Alignment,人脸关键点检测。是人脸相关技术的基础工作之一,很多实际的项目中不可缺少的一部分。因此它的重要性不言而喻。因此对于它的研究也一直没有停过,从最开始的传统方法,到现在的深度学习方法,无论从精确度还是关键点数量都有了巨大的发展。
本篇文章旨在介绍一些基于深度学习的相关方法,并将不定时更新最新的相关工作。
2.0 模型
2.1 DCNN
2013,DCNN是首次提出利用CNN来找到人脸5个关键点。
DCNN是一种级联的CNN,模型的pipline如下图:
CNN模型如下图:
level1由三个CNN组成,level2和level3由10个CNN组成。级联回归使得关键点从粗到精,最终使得效果在当时是非常不错的。
- 级联思想为后面提供了一种有效的思路。
2.2 DCNN(face++)
face++在DCNN模型上的改进,实现68关键点的高精度定位
模型的pipline如下图:
- 整个模型分为四个级联部分,level1的主要作用是获取面部器官的边界框;level2输出51个关键点预测位置,粗定位作用;level3会将粗定位的坐标进一步精确;level4会将level3的结果矫正进一步优化。
首次利用神经网络进行68个人关键点检测,在当时300W挑战赛上获得领先成绩。
2.3 TCDCN
TCDCN是一个多任务网络,能够分辨人脸表情。
模型的pipline如下:
早期的模型都比较简单,坑占的早。但是效果其实一般般。
2.4 DAN
DAN模型加入更加有效监督信息的多任务级联网络,效果不错。
整个模型的pipline如下图:
其中CONNECTION LAYERS 如下图:
- Stage1:首先输入灰度图I,以及一个初始化的landmarks值$S_0$(这个值是根据训练集的groundTruth求平均值得到的,其目的就是为了减小网络的搜索空间,提高精度),FEED FORWARD IN 网络输出的是一个偏移量$\Delta S_1$,那么新的landmarks为$S_1 = S_0 + \Delta S_1$。
- Stage2:根据stage1得到的$S_1$和初始化landmarks$S_0$,计算仿射变换的相关参数$T_2()$,以矫正人脸,得到矫正后的人脸$T_2(I)$,以及矫正后人脸的heatmap$H_1$和特征图$F_1$。这个过程就是上图所指的CONNECTION LAYERS。然后将这三个部分叠加起来输入到新的 FEED FORWARD IN 网络,得到一个新的偏移量量$\Delta S_2$, 最终的输出为$S_2 = T_2(S_1) + \Delta S_2$, 这里的$S_2$是相对于矫正后人脸的landmarks,所以想要得到原图像的landmarks,需要根据之前算的仿射变换的参数进行一个反变换,也就是上图的LANDMARK TRANSFORM 的过程。
- 上面提到CONNECTION LAYERS 包含三个部分。第一,就是通过$S_1$和$S_0$之间的仿射变换关系,得到一个矫正的人脸图像,作用是让每个stage的输入能够得到比较稳定的输入,从而获得更加稳定的输出。第二,利用$S_1$和下面公式得到heatmap$H_1$,作用是抑制landmarks的偏移过大。第三,通过上一个stage的网络输出,进过几层反卷积获得一个特征图$F_1$,个人还不是很理解这个操作的意义。
![](http://ww1.sinaimg.cn/large/0061KkpRgy1fx44pd3pnuj30b101vweb.jpg)
- 整个网络流程很清晰,网络结构也很精炼,笔者也根据源代码复现了tensorflow版本,效果也很好。其中的heatmap思想确实给landmarks检测提供了可靠的优化思路。
2.5 LAB
LAB是cvpr2018的一篇paper。其核心思想就是利用人脸边界的辅助信息,帮助CNN网络回归出更精确的位置信息。
模型的pipline如下图:
- 模型分为三个部分:Boundary-Aware Landmark Regressor(回归关键点坐标), Boundary Heatmap Estimator(预测人脸的物理边界热图) and Landmark-Based Boundary Effectiveness Discriminator(边界热度图的监督信息)。
- 其中FMF如下图:
- Boundary Heatmap Estimator:文中提到BHE这种stacked hourglass 结构模式以前有很多工作用来预测heatmap(图像分割也很多用这种结构),但是作用也提到结构过深导致边界模糊,因此作者提出message passing layers来加强信息的流通(跟resnet的思路类似)。
Landmark-Based Boundary Effectiveness Discriminator:这个部分主要是为了收敛模型的损失函数,如下图:
其中
大致的思路和attention很像,细节还是得看源码。