这篇文章主要记录《Facial Landmark Detection with Tweaked Convolutional Neural Networks》
此链接中,实现代码也一并给出。
在前一篇文章介绍过,人脸的特征点检测是一个回归问题。而研究这个问题的时候,主要关注两个内容:(1)人脸特征表示,(2)回归方法。
这篇论文同样是基于深度学习来进行特征点检测的。
这篇论文的脸部标记点检测训练使用的网络是Vanilla CNN,我们先来了解一下Vanilla CNN的设计。
Vanilla CNN是用来做脸部标记点坐标回归最先进的网络。被选的模型可以直接和前面的网络进行对比,这样就可以突出我们接下来要使用的TCNN的优势。下面就是Vanilla CNN的网络结构:输入是一张40*40*3的彩色照片,经过4个卷积层(CL1...CL4),每个卷积层后利用池化层(stride=2)抽取特征,再进入全连接层FC5,最后进入FC6输出2*m(m个标记点,m=5)个值:P=(p1,p2...p5)=(x1,y1,x2,y2......x5,y5)。
其中红色弧标记的地方就是TCNN进行改进的地方。
它使用的**函数是双曲正切函数,并且在经过双曲正切函数之后进行了绝对值整流处理;最后损失函数使用双目距离进行标准化:P^
pp^
p
另外,训练时使用Adam(这个在上一篇人脸特征点检测(一)的文章中进行了介绍)进行优化。数据集来源:5590张来自LFW集合的图片和7876张来自Web的图片,所有图片都带5个脸部特征点的标签,当检测面部失败时,将会丢弃该图片。剩下来的图片被划分,90%(7571张)作为训练集,1972张作为验证集。
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
当数据集不同的时候,一般为防止过拟合,都会通过增加数据量来减少误差。最流行的方法包括有过采样,实质上就是通过裁剪不同偏移量的输入图片来增加训练数据,有的也通过镜像图片获得。但是如果应用到这里的话却不能成功,因为每个调整好的微调网络是在来自一个相同的簇的代表上进行训练的。过采样和镜像都会引入不对其的图片到每一个簇中,会增加标记点位置的变异性从而破坏了我们微调的目标。
所以我们没有用上述的方法来增加数据集,而是建议用一种alignment-sensitive的方法来增加用于微调调整网络的图像数据集。在相同的簇中,随机取两训练图片,然后估计一下它们的非反射相似性变换进行处理(用standard least squares映射,用backwards warp去协调一下原图像的框架)。效果如下:
Benchmarks
实验所使用的Benchmarks是the Annotated Face in-the-wild(AFW)和the Annotated Facial Landmarks in the wild(AFLW)
Effect of K
从下图中,我们可以看到两种Benchmarks在不同数量的簇的错误率的比较,用更多的调整网络能提高性能,但是我们没有这么多的数据量来分成有足够图像例子的簇;而且事实上,超过K=64个簇,也有产生过拟合的风险,所以实验使用的64个簇。
到最后,我们可以看到结果的比较,使用TCNN,能够通过简单的模型和少的数据量来达到很高的性能。