点击上方“码农的后花园”,选择“星标” 公众号
精选文章,第一时间送达
Mtcnn它是2016年中国科学院深圳研究院提出的用于人脸检测任务的多任务神经网络模型,该模型主要采用了三个级联的网络,采用候选框加分类器的思想,进行快速高效的人脸检测。这三个级联的网络分别是快速生成候选窗口的P-Net、进行高精度候选窗口过滤选择的R-Net和生成最终边界框与人脸关键点的O-Net。和很多处理图像问题的卷积神经网络模型,该模型也用到了图像金字塔、边框回归、非最大值抑制等技术。文章目录
01什么是Mtcnn 02Mtcnn人脸检测算法原理 03Mtcnn的具体实现流程 1.构建图像金字塔 2.Pnet网络 3.Rnet 网络 4.Onet网络 04 论文和代码下载 05 环境配置 06 Mtcnn预测结果01什么是Mtcnn
MTCNN是一个人脸检测算法,英文全称是Multi-task convolutional neural network,中文全称是多任务卷积神经网络,该神经网络将人脸区域检测与人脸关键点检测放在了一起。该算法的网络结构总体可分为P-Net、R-Net、和O-Net三层网络结构。 Mtcnn算法结构图 总结:Mtcnn分为四步,分别是图像金字塔先把输入图片进行缩放,缩放完成之后,我们可以提取出大的人脸和小的人脸,使得网络提取的效果更有效。然后Pnet网络会对图像金字塔得到的图像进行一个粗略的筛选,得到一大堆的人脸粗略框,然后对这些粗略框进行一个非极大值抑制筛选操作得到相对于好一点的框。再把这些相对好一点的粗略框传入到Rnet精修网络中,Rnet会对这些粗略框的内部区域进行物体识别,判断是否是一张人脸,同时对框的长和宽进行修正,然后对调整好的粗略框进行非极大抑制操作筛选出相对上一步更好的框框。
最后这些经过Rnet调整好的相对较好的框框传入到Onet网络中,Onet依旧判断这些框的内部区域是否有人脸,同时对Rnet得到的这些框的长和宽再一次进行精修,使得这个框更好的符合人脸大小,最终再进行非极大值抑制操作,得到最终的人脸预测框,与此同时还会得到人脸的5个特征点的位置。02mtcnn人脸检测算法实现思路
对于我们而言,输入这样一张人脸图片,我们可以轻易地知道图片中哪里是人脸,哪里不是人脸,下图红色方框的位置就是人脸的部分。
但是计算机时如何识别的呢?mtcnn为计算机提供了一种非常有效的思路:
- 第一步: 首先mtcnn对我们输入的一张图片进行不同尺度的缩放,生成图像金字塔,是为了检测不同大小的人脸。
- 第二步:然后将我们活得的图像金字塔传入Pnet,Pnet会生成一堆相对于原图的人脸候选框,我们利用这些人脸候选框在原图片中截取出一块又一块地区域,把截取出来的图片传入到Rnet中。
- 第三步:当Rnet接受到这些分散的图片之后,会对截取出的图片中是否真正有人脸进行判断和评分,同时对原有的人脸后选框区域进行修正,通过Rnet我们将获得一些相对正确的人脸候选框。但是还要继续进行二次修正。
第四步:我们利用Rnet修正后的人脸候选框再次从原图片中截取一块又一块的区域,把截出来的区域图片传入到Onet中,Onet是mtcnn中最精细的网络,它会再次对截取图片内中是否真正存在人脸进行判断和评分,同时把人脸候选框进行修正,Onet输出结果就是我们需要的人脸位置了。
03Mtcnn具体实现流程
1.构建图像金字塔
当我们输入一张图片X到mtcnn网络模型进行预测时,首先会对我们的图片进行不同尺度的缩放,构建我们的图像金字塔。如:上图中的左图。构建过程中图片的不同缩放尺度是由缩放系数factor决定的,通过不同的缩放系数factor对图片进行缩放,每次缩小为原来图片缩放的factor大小。其实就是对我们的原图进行多次缩放,每次缩放的比例是一个确定的数factor=0.709,第一次缩放为原图X尺寸的0.709倍得到0.709X尺寸的图片,第二次对已经缩放的图片再次进行缩放0.709*0.709X尺寸的图片,依次类推,我们将会得到非常多原图的不同尺寸的图片。
这样的缩放的目的是为了能够检测图片中不同大小的人脸,因为我们拍摄一张图片,里面的人脸会有大有小,这样的一个图像金字塔缩放操作,就是为了让我们获得不同大小的人脸的特征。 通过这样的一个图像金字塔的构建,我们会获得非常多的图片,缩放截止的点是:当缩放的最后的一张的图片的长或者宽小于12时就停止缩放。构建完图像金子塔之后,我们就带着这一大堆的图片到Pnet网络中。 实现代码:如下,当一个图片输入的时候,会缩放为不同大小的图片,但是缩小后的长宽最小不可以小于12:
构建图像金字塔: #-----------------------------# # 算原始输入图像 # 每一次缩放的比例 #-----------------------------# def calculateScales(i