CNN解决复杂情况的脸部关键点提取

CNN解决复杂情况的脸部关键点提取

[转载]http://blog.sina.com.cn/s/blog_1450ac3c60102x9ns.html

上一篇博客讲到过去常使用传统的ConstrainedLocal Model (CLM) 局部约束模型来解决脸部关键点提取。

CLM包含3个部分:

1)Patch Expert 区域专家模型

2)Point Distribution Model PDM 点分布模型

3)Regularised Landmark Mean Shift (RLMS) 约束关键点的平均转移。

要详细讲解这个方法的过程我认为是挺麻烦的,这里只是对概念点到为止。其内容主要是参考Constrained Local Neural Fields forRobust Facial Landmark Detection in the Wild[1]这篇paper的。

首先来讲CLM的主体思想。CLM主要是针对目标的每一个关键点构建点分布模型PDM,然后在每个关键点周围的区域代入区域专家模型进行训练。这么一来的好处非常明显,即每个区域只会有一个点是正确的回归目标,这使得训练难度大大降低,适应早期的分类器。此外,点分布模型可以通过​约束关键点的平均转移技术RLMS来进行优化,可以在优化的过程中引入如平移,旋转缩放比例等先验信息,使得模型更加健壮。具体表现为可以适应多种角度的图片。

image
[1]中的CLM改进算法的效果,其中多张图是有着相当程度的扰动,但是关键点拟合情况良好

Patch Expert 区域专家模型:

​其实这就是一个判断像素点是否是关键点的概率的模型,也就是我们最常用的针对脸部关键点的回归模型。但是这里的回归仅仅在一个区域中进行。常用的传统方法有SVM,LR,决策树等等。当然了,CNN也能作为一个Patch Expert。

image
典型的Patch Expert展示,每个区块只有一个关键点,在[1]中作者比较了SVR和他所提出的LNF及其稀疏化后的提取效果

PointDistribution Model PDM点分布模型​:

​CLM问题可以看做是一个先验条件规则和非规则参数的训练过程,损失函数如下:

image
CLM目标函数,期望得到混合参数p

其中R表示regularisation term 规则项,用来惩罚过度复杂或变化过的图形,而后面的D经验损失表示区块i中真实关键点_的坐标和由Patch Expert得到的最大置信度的坐标点的误差损失。

​其中参数p同时包含了规则参数(先验)和非规则参数,并且遵循点分布模型,目的即是得到关键点以便patch expert能够在其周围进行判断。关键点可以表示为:

image
关键点x_i表示

​非规则参数: ̅ 表示关键点i的平均坐标, 为一个3∗m(样本数)的主成分矩阵(该主成分矩阵构成方法为:对矩阵XX^T特征值分解,取最大的3列特征向量。其中X为m∗3n的矩阵),而q是一组学习参数所构成的向量。这里的矩阵论概念是吧作为变化的3列线性最为不相关的基,使得 ̅+_ 能表示x的绝大多数变化。

规则参数:缩放比例s,平移项=[,],旋转。

所需混合参数p=[s,R,t,q]需要训练。

约束关键点的平均转移​这里就不怎么讲了,主要都是数学问题,本质是EM算法,通过Tikhonov regularised Gauss-Newton method迭代优化可以得到

image
p每轮的更新项

从图1中可以发现在不使用很强的分类器的情况下CLM已经有很好的关键点提取性能了。此外,在关键点数量增多的情况下,CLM的表现也非常良好。

之前我们做的Kaggle数据集只有15个点,那么面对更复杂的情况,只用CNN是否能够拟合多值回归呢。paper[2]告诉我们是可以的。​

image
TCNN[2]在49,68关键单任务的表现

我们下载了Helen人脸数据集进行实验。其中有2330张图,每张图有高达194个标记点。

image
Helen人脸数据集

​首先由于数据集的长宽不一,并且图中有过多的噪声,因此需要用一个简单的方法进行bounding box

image
通过标记点来进行bounding box,红为原标记点范围,蓝为扩展后的范围

尝试过使用一些算法,但是由于都比较麻烦,所以为了简单就直接对标记点的x_min,x_max,y_min,y_max(红框)进行了一些简单扩展(蓝框),当做bounding box。同时对194个标记点以均匀分布取了其中68个点作为最终的回归目标。所有的bounding box将会被resize为96*96的大小。

image
预处理过后的96*96图片以及68标签

网络结构参考[2]的前半部分:

image
CNN model

通过SGD大约8000次epoch的手动调参才达到大约0.0020多的val_loss(mse)。效果如图

image
训练集结果

image
测试集结果

​在结果中我发现一些侧脸的点标注有一定的差距,比如第一行中间那个。这些不同姿势的问题可以分别使用[2],[3]里的聚类以及,多任务来解决。​

​[1] Baltrusaitis, Tadas, P. Robinson, and L. P. Morency. "Constrained Local Neural Fields for Robust Facial Landmark Detection in the Wild." IEEE International Conference on Computer Vision Workshops IEEE Computer Society, 2013:354-361.

[2] Wu Y, Hassner T. Facial Landmark Detection with Tweaked Convolutional Neural Networks[J]. Computer Science, 2015.

[3] Zhang, Zhanpeng, et al. "Facial Landmark Detection by Deep Multi-task Learning." European Conference on Computer Vision 2014:94-108.​

你可能感兴趣的:(CNN解决复杂情况的脸部关键点提取)