人脸检测——Multi-task CNN(MTCNN)

论文连接:https://kpzhang93.github.io/MTCNN_face_detection_alignment/

开源代码:https://github.com/kpzhang93/MTCNN_face_detection_alignment

或者参考其他:https://github.com/BigcowPeking/mtcnn-caffe

                         https://github.com/blankWorld/MTCNN-Accelerate-Onet(c++)

原文:https://blog.csdn.net/qq_28618765/article/details/78127967 

       在人脸检测和特征点定位的任务上,这篇文章提出的方法比现有最先进的技术有明显的额提升,而且具有实时处理的性能。

在这篇文章中,提出了一个深度卷积多任务的框架,这个框架利用了检测和对准之间固有的关系来增强他们的性能。特别是,在预测人脸及脸部标记点的时候,通过三阶的级联卷积神经网络对任务进行从粗到精的处理。而且还提出了一种新的在线困难样本生成策略来进一步提升性能。

论文最主要的一点应该是三阶的级联卷积神经网络。我们应该能从下图直观地看出其特点:

stage 1(P-Net):一个浅层的全部由卷积层组成的CNN快速生成候选窗口,获取候选人脸窗口以及人脸回归向量(包括候选框坐标、候选框中5个关键点坐标,共14个数据),再基于估计的边框进行校准,之后才有NMS(非极大值抑制算法)来合并高度重叠的候选。将输出结果映射到原图像上。随后,在原图像上截取出PNet确定的所有图像片段,并将其缩放至24×24大小,然后交由RNet处理

stage 2(R-Net):用stage1得出的结果,放到R-Net进一步排除大量错误的候选,使用边框回归执行校准并进行NMS。输出结果后,在原图像中裁剪出RNet确定的图像片段,缩放至48×48后交由ONet处理。

stage 3(O-Net):这个和stage 2 有点类似,识别出更准确的脸部区域,最后输出5个特征点位置。也是首先进行运算,然后产生置信度和修正值,此外还会产生5个关键点坐标。将产生的结果进行NMS计算后,将置信度大于阈值的候选框进行修正,最后输出结果。

人脸/非人脸判定采用交叉熵损失函数:

人脸框回归采用欧式距离损失函数:

特征点定位也采用欧式距离损失函数:

        而面对不同情况时,有些损失函数是没有被用到的,比如说当图像中无人脸时,则人脸框回归和特征点定位的损失函数便没有用到,我们只计算了第一个等式。那么这时,我们使用到下列公式来进行权衡:

其中alpha表示三个任务在当前阶段的网络中的损失比重,beta表示采样类型指示;在P-Net和R-net的时候,det、box、landmark的alpha值分别取1、0.5、0.5,而在O-Net中,det、box、landmark的alpha值分别取1、0.5、1,其中landmark的比重调高了,目的是为了获取更精确的脸部标记点位置。

上图是三阶对应的网络。

          PNet的结构十分简单,首先是1个3×3的卷积层,然后是1个2×2的最大池化层(这里的padding均为valid)。池化完毕后,继续跟2个3×3的卷积层,此时结果的维度变为1×1×32,最后分别跟3个不同的1×1卷积层,产生1×1×2、1×1×4和1×1×10共3种输出。

          因此,PNet是全卷积网络(FCN),全卷积网络的优点在于可以输入任意尺寸的图像,同时使用卷积运算代替了滑动窗口运算,大幅提高了效率。关于全卷积网络的详细介绍,请参阅我的另一篇博文。总之,使用全卷积网络的PNet,不仅支持任意大小的图像,在速度上还比传统的滑动窗口法快很多。这大概就是最近很多级联目标检测算法都使用全卷积网络作为第一层网络的原因。

         由于PNet的输入大小是12×12,因此单纯的PNet只能检测12×12大小的图像中的人脸。这显然是不实际的。为了让PNet能够检测多尺度范围的人脸,有必要对原图像进行缩放。这就是引入图像金字塔的原因。
 

从其展现的结果,我们可以看到使用在线困难样本挖掘以及使用了联合检测和对准的方法的结果性能要比没有使用的好很多,

从下表可以看出,运用了三阶网络的速度要快,精确度也有所提高,

并且,坐着以AFLW的数据作为Benchmark,比较了在人脸对准上的性能,如下图,很明显可以看出作者提出的MTCNN明显要高出其他网络的性能。

上图是三阶对应的网络。

training data的处理:
训练采用四种类型的数据: 
1、备选区域和目标区域的重叠率(IOU)小于0.3的,全部是非人脸。 
2、IOU大于0.65的是人脸。 
3、IOU在0.4到0.65之间的是部人脸区域。 
4、人脸特征坐标,人脸标注五个位置。 
其中1、2数据集主要用来识别人脸与非人脸。 
2、3数据集用来做box bounding regression。 
4数据集主要用来确定人脸五点特征位置。
 

你可能感兴趣的:(深度学习,caffe,人脸检测)