算法介绍
基于多任务级联卷积神经网络的人脸检测和对齐算法MTCNN,相对于上篇介绍的SDM算法在性能和准确率上有所提升,而且具有实时处理能力,参考论文Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks,文章主要通过三阶的级联卷积神经网络(P-Net,R-Net,O-Net)对任务进行从粗到细的处理,具体流程如下:
数据与处理:为应对目标多尺度问题,将原始图像resize到不同尺寸,构建图像金字塔,作为三阶级联架构的输入。
第一阶段,通过一个浅层的CNN快速生成候选窗口。该阶段是一个全部由卷积层组成的CNN,取名P-Net,获取候选人脸窗口以及人脸框回归向量。基于人脸框回归向量对候选窗口进行校正,之后采用非极大值抑制NMS合并高重叠率的候选窗口。
第二阶段,通过一个更复杂的CNN否决大量非人脸窗口从而精化人脸窗口。第一阶段输出的候选窗口作为R-Net的输入,R-Net能够进一步筛除大量错误的候选窗口,再利用人脸框回归向量对候选窗口做校正,并执行NMS。
第三阶段,该层比R-Net层又多了一层卷积层,进一步精化结果并输出5个人脸特征点。
与第二阶段相似,但这一阶段用更多的监督来识别人脸区域,而且网络能够输出五个人脸特征点位置坐标。
网络训练
整个的训练学习过程就是最小化下面这个函数,其中,N为训练样本数量,aj表示任务的重要性,bj为样本标签,Lj为上面的损失函数:
训练需要注意的点:
(1) 文中训练使用了在线困难样本生成(Online Hard sample mining)策略,即在一个batch中只选择loss占前70%的样本进行BP。也就是说抛弃了一些对强化分类没有多大作用的简单样本。文中表示,通过实验表明这样做能够进一步提升精度。
(2) 不同阶段,classifier、boundingbox regression和landmarks detection在计算Loss时的权重是不一样的;
(3) 训练数据共4类,比例3:1:1:2,分别是negative,IOU<0.3; positive,iou="">0.65;part face,0.4。0.3;>
最终算法在FDDB表现如下:
对齐效果如下:
我们可以看到mtcnn相对其他算法性能上有明显的提升。
工程示例
工程地址:https://github.com/dreamocean/mtcnn
|
|
人脸对齐输出如下:
人脸仿射变换对正如下:
face1 | face2 |
---|---|