找到一个总结很好的blog。
具体训练的过程会在后续的随笔中给出。
转载自:
https://blog.csdn.net/lff1208/article/details/77328357
以下是内容:
论文链接:
https://kpzhang93.github.io/MTCNN_face_detection_alignment/,
本文是根据自己的理解翻译的如有错误,还请见谅,评论提出,立马修改。
摘要:由于姿势、光照或遮挡等原因,在非强迫环境下的人脸识别和对齐是一项具有挑战性的问题。最近的研究显示,深度学习算法可以很好的解决上述的两个问题。在这篇文章中,我们利用检测和校准之间固有的相关性在深度级联的多任务框架下来提升它们的性能。尤其是,我们利用三层级联架构结合精心设计的卷神经网络算法,来对人脸进行检测和关键点的粗略定位。另外,我们建议使用一种新的在线采集样本策略来改善算法的性能。我们的方法与最先进的人脸检测算法FDDB和WIDER FACE进行对比,具有更高的精度。同时,与AFLW人脸对齐算法比较,实时性能良好。
关键字:人脸检测、人脸对齐、级联卷积神经网络
一、介绍
人脸检测和对齐是很多基于人脸的应用不可缺少的一部分,如人脸识别、人脸行为分析等。然而,视觉变化对于人脸的影响,加之姿势变化和极端光照的影响,使得在现实世界中对人脸检测和对齐的任务变的极具挑战。
Viola和Jones提出的级联人脸检测器,是利用Harr-Like特征结合AdaBoost去实现高性能的实时训练。然而,相当多的研究显示,该算法在应对大量视觉影响的人脸图片检测时性能极具下降。并且目前讯在的DPM算法也具有一定的缺陷,所以需要新的方法来解决人脸检测和对齐。最近,CNN在视觉方面取得了很好的效果,如图像分类、人脸识别等。受到启发研究人员开始将CNN用于人脸检测,提出一些算法。同时吸引人脸对齐的研究者对此产生兴趣,也提出了一下相关算法。然而,大多数以前的脸部检测和脸部对齐方法忽略了这两者之间的固有相关性任务。 虽然现有的几个算法试图共同解决他们,但在这些算法中仍然有局限性。
另一方面,目前的训练样本度分类器的性能提升有一定的阻碍,需要设计一种用于人脸检测的在线样本用于对算法的训练,已达到自适应的训练状态。
在本文中,我么们提出新的级联架构来整合多任务卷积神经网络学习的问题。该算法有三个阶段组成:第一阶段,浅层的CNN快速产生候选窗体;第二阶段,通过更复杂的CNN精炼候选窗体,丢弃大量的重叠窗体;第三阶段,使用更加强大的CNN,实现候选窗体去留,同时显示五个面部关键点定位。
二、具体方法实现
A、总体架构
本算法的整体流程如图1 所示:
图1级联卷积神经网络
Stage 1:采用全卷积神经网络,即P-Net,去获得候选窗体和边界回归向量。同时,候选窗体根据边界框进行校准。然后,利用NMS方法去除重叠窗体。
stage 2:R-Net,将经过P-Net确定的包含候选窗体的图片在R-Net网络中 训练,网络最后选用全连接的方式进行训练。利用边界框向量微调候选窗体,再利用NMS去除重叠窗体。
stage 3:O-Net,网络结构比R-Net多一层卷积,功能与R-Net作用一样,只是在去除重叠候选窗口的同时,显示五个人脸关键点定位。
B、CNN网络结构(CNN结构图上面显示)
多个CNN被设计为人脸检测器,但其性能可能受到以下情况的限制:
(1)卷积层中的滤波器缺乏多样性,限制他们的识别能力;
(2)对比多类识别检测和分类任务,人脸检测是一个二进制的分类问题,因此需要较少量的滤波器,我们将5*5的滤波大小改为3*3的滤波大小去减少计算,同时增加深度来提高性能。相比之前的算法有了更好的效果,缩短了训练时间。结果如表1所示。
C、训练
本算法从三个方面对CNN检测器进行训练:人脸分类、边界框回归、地标定位(关键点定位)。
具体可以参考博文http://blog.csdn.net/qq_14845119/article/details/52680940
添加一些新的资料:
github的代码:https://github.com/kpzhang93/MTCNN_face_detection_alignment
论文和代码
源代码是MATLAB版的
训练模型,需要使用caffe,这就比较尴尬了,这个框架用的少,需要花点时间咯。
这是python的源代码:
https://github.com/pangyupo/mxnet_mtcnn_face_detection
作者说改了语言以及对caffe的依赖,
但这也不是我测试使用的版本。
https://github.com/ShyBigBoy/face-detection-mtcnn
这个版本对于训练样本的读入方式改成读 xxx.npy 文件了。