《Facial Landmark Detection with Tweaked Convolutional Neural Networks》
论文链接:https://talhassner.github.io/home/publication/2017_TPAMI_2
开源参考项目:
https://github.com/cooparation/VanillaCNN_faceLandmark
https://github.com/flyingzhao/mxnet_VanillaCNN
综合原文链接:https://blog.csdn.net/qq_28618765/article/details/78044098
概述
如我前面所说,人脸特征点检测是一个回归问题,这个问题需要关注两个方面:一是人脸特征表示,二是回归方法。这次解析的论文是使用深度学习的方法来做特征点检测,它的方法也不会脱离这个框架的。
这篇论文的脸部标记点检测训练使用的网络是Vanilla CNN,我们先来了解一下Vanilla CNN的设计。
Vanilla CNN
其实这篇论文的网络结构和前面的TCDCN网络结构是一样的,就不一一细说了。
TCDCN:
Vanilla CNN:
其中红色弧标记的地方就是TCNN进行改进的地方。和TCDCN不一样的地方在于:去掉多任务学习而且使用彩色图像。损失函数也不一样,这里使用的损失函数使用了两眼间距离进行标准化:
它使用的激活函数是双曲正切函数,并且在经过双曲正切函数之后进行了绝对值整流处理;最后损失函数使用双目距离进行标准化:
至此,本文中使用Vanilla CNN人脸特征点检测结束了。
网络特征分析
随后作者对这个模型提出了一些思考,由此引出了下面的TCNN。这个问题就是,网络到底学习到了什么样特征?
作者对网络不同层的特征进行使用GMM进行聚类分析,发现网络进行的是层次的,由粗到精(hierarchical, coarse to fine)的特征定位,越深的网络特征越能反应出特征点的位置。
作者对FC5的输入进行了分析,也就是网络示意图中红色圆圈部分,将这些特征使用了GMM聚成64类,并显示出每一个聚类中心(相同类别脸的平均):
显然,这些特征展示出了人脸的不同姿势,还可以看出不同的人脸属性,比如表情和性别,作者认为这是因为人脸特征点的位置常常和人脸的属性相关联。
The Tweaked CNN model
为了提高精度,在最后的网络层次中进行了微调:每一层仅使用类似的中间层网络特征代表的图像来进行训练;因为相似的特征代表相似的特征点,这被认为可以让网络能在特定的姿势和表情中有针对性一点。
为了防止过拟合,也为了能提高上述调整的效率,用来一个Alignment-sensitive data augmentation的方法来解决训练不足数据的问题。
1、Tweaking by fine-tuning
如下图所示便是TCNN的网络结构:
在全连接层之前,网络结构和Vanilla CNN是一致的,也就是说,在刚开始的时候,训练Vanilla CNN来进行脸部标记点回归。在训练完成之后,便从前面训练的结果中抽离出特征,将其作为FC5的输入。微调最后一层FC5,使用具有相似特征的图片训练对应的回归器。
对网络不同层的特征使用GMM进行聚类分析,发现网络进行的是层次的,由粗到精(hierarchical,coarse to fine)的特征定位,越深的网络特征越能反应出特征点的位置,将这些特征使用GMM聚合成K个类,并显示每一个聚类中心(相同类别脸的平均)。接下来微调权重,对于每一个聚类,只使用其图像集进行微调。这里还是用了early stopping来微调每一个子网;它的作用就是,在50个周期里,如果验证损失没有提升的话,就停止微调该簇。
2、Alignment-sensitive data augmentation
当数据集不同的时候,一般为防止过拟合,都会通过增加数据量来减少误差。最流行的方法包括有过采样,实质上就是通过裁剪不同偏移量的输入图片来增加训练数据,有的也通过镜像图片获得。但是如果应用到这里的话却不能成功,因为每个调整好的微调网络是在来自一个相同的簇的代表上进行训练的。过采样和镜像都会引入不对其的图片到每一个簇中,会增加标记点位置的变异性从而破坏了我们微调的目标。