最近一段接触了MTCNN算法,是中国科学院深圳先进技术研究院的成果,论文《Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks》
MTCNN算法是利用三层级联架构结合精心设计的卷积神经网络算法,对人脸进行检测和关键点的粗略定位。该算法有三个阶段组成,第一阶段是用浅层的CNN快速产生候选窗体;第二个阶段是通过更复杂的CNN丢弃大量的虚假窗体,精炼候选窗体;第三阶段是用更强大的CNN,确定最后的脸部区域,并同时输出五个面部关键点的位置。
一、总框架
此算法的总框架如图1所示,对于给定的一个图像,将其图片调整成不同的尺度形成图像金字塔
Stage 1:利用一个全卷积网络proposal Network(简称为P-Net),用来生成脸部候选窗和边框回归向量(bounding box regression vectors)。基于边框回归向量来校正候选窗。接下来,我们用非极大值抑制方法(NMS)合并重叠的候选框
Sta:ge 2:所有的候选窗被喂给另一个CNN网络Refined Network(简写为R-Net),R-Net的任务就是进一步清楚大量的非脸部的候选者,接下来,仍然继续使用边框回归向量进行校准和NMS方法进行合并
Stage 3:这一阶段用到的网络为Output Network(缩写为O-Net),这一阶段和第二阶段是很相似的,但是在这一层,主要的目的是用更多的监督确定脸部区域。同时,网络将会输出五个脸部标志点的位置。
图1:MTCNN算法的级联结构
二、CNN架构
图2:P-Net,R-Net和O-Net的架构,MP表示最大池化,Conv表示卷积
在MTCNN算法中,CNN的架构如图2所示。在卷积和全连接层后,该算法中使用PReLU最为非线性**函数。
三、训练
该算法中需要实现三个任务的学习,分别是:人脸/非人脸的分类(face/non-face classification),边框回归向量(bounding box regression)和定位人脸特征点(facial landmark localization)
1. 人脸分类:这是个二分类任务,使用交叉熵损失函数:
其中是由网络产生的判断是否是人脸的概率,标识是真实值标签
2. 边框向量回归:对每一个候选窗口,我们计算它和最近的真实窗口的偏移量。学习任务可以被看做是回归问题,使用平方和损失函数。
其中是网络输出输出回归向量,为真实坐标值。,有四个坐标点,分别是左上角的坐标和box的高和宽
3. 人脸特征点定位:
是从网络中得到的面部标识点的坐标值,是第i个样例的真实坐标点。并且 ,这里面有五个面部标识点,包括左眼,有眼,鼻子,左嘴角和右嘴角。
4. 多任务训练:在每一个CNN中运行多个任务,在学习过程中就会有多种不同类型的训练图像,例如,人脸,非人脸和部分人脸(partially aligned face),在这种情况下,上面的损失函数将不可用。所以总的损失函数可被定义为如下:
N是训练样例的个数,表示任务的重要性,在论文中,作者在P-Net和R-Net网络中使用,在O-Net网络中,为了得到更准确的面部标识定位,使用。是样本类型指示符