AI学习笔记(十三)CNN之人脸检测

AI学习笔记之CNN之人脸检测

  • 人脸检测
    • 人脸检测概念
    • 人脸检测的难点
    • 人脸检测的主要用途
  • mtcnn
    • 主要步骤
      • 构建图像金字塔
      • P-Net(Proposal Network)
      • R-Net(Refine Network)
      • O-Net(Outout Network)
    • 总结

人脸检测

人脸检测概念

人脸检测/人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术。用摄像机或摄像头擦剂含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行脸部识别的一系列相关技术,通常也叫做人像识别、面部识别。

人脸检测的难点

人脸识别被认为是生物特征识别领域甚至人工智能邻域最困难的研究课题之一。人脸识别的困难主要是人脸作为生物特征的特点所带来的:
1、相似性:不同个体之间的区别不大,所有人脸的结构都相似,甚至人脸器官的结构外形都很相似。这样的特点对于利用人脸进行定位是有利的,但是对于利用人脸区分人类个体是不利的;
2、易变性:人脸的外形很不稳定,人可以通过脸部的变化产生很多表情,而在不同观察角度,人脸的视觉推向也相差很大,另外,人脸识别还受光照条件(例如白天和夜晚,室内和室外等)、人脸的很多遮盖物(例如口罩、墨镜、头发、胡须等)、年龄等多方面因素的影响。
在人脸识别中,第一类的变化是应该放大而作为区分个体的标准的,而第二类的变化应该消除,因为他们可以代表同一个个体。通常称第一类变化为类间变化(inter-class difference),而称第二类变化为类内变化(intra-class difference)。对于人脸,类内变化往往大于类间变化,从而使在受类内变化干扰的情况下利用类间变化区分个体变得异常困难。

人脸检测的主要用途

人脸识别主要用于身份识别,由于视频监控正在快速普及,众多的视频监控应用迫切需要一种远距离、用户非配合状态下的快速身份识别技术,以求远距离快速确认人员身份,实现智能预警。人脸识别技术无疑是最佳的选择,采用快速人脸检测技术可以从监控视频中实时查找人脸,并与人脸数据库进行实时比对,从而实现快速身份识别。
人脸识别产品已广泛应用于金融、司法、军队、公安、边检、政府、航天、店里、工厂、教育、医疗及众多事业单位等领域。随着技术的进一步成熟和社会认同度的提高,人脸识别技术将应用在更多的领域。
1、企业、住宅安全和管理。如人脸识别门禁考勤系统,人脸识别防盗门等;
2、电子护照及身份证、公安、司法、刑侦等;
3、自助服务、信息安全等。

mtcnn

MTCNN(Multi-task convolutional neural network)即多任务卷积神经网络,该网络将人脸区域检测与人脸关键点检测放在了一起。
从工程实践上,MTCNN是一种检测速度和准确率都很不错的算法,算法的推断流程有一定的启发性。

其总体可分为P-Net、R-Net和O-Net三层网络结构。
AI学习笔记(十三)CNN之人脸检测_第1张图片
1、由原始图片和P-Net生成预测的bounding boxes。
2、输入原始图片和P-Net生成的bounding box,通过R-Net,生成矫正后的bounding box。
3、输入原始图片和R-Net生成的bounding box,通过O-Net,生成矫正后的bounding box和人脸面部轮廓关键点。
AI学习笔记(十三)CNN之人脸检测_第2张图片
AI学习笔记(十三)CNN之人脸检测_第3张图片
MTCNN主要包括三层网络:
1、第一层P-Net将经过卷积,池化操作后输出分类(对应像素点是否存在人脸)和回归(回归box)结果。
2、第二层网络将第一层输出的结果使用非极大值抑制(NMS)来去除高度重合的候选框,并将这些候选框放入R-Net中进行精细的操作,拒绝大量错误框,再对回归矿做校正,并使用NMS去除重合框,输出分支同样两个分类和回归;
3、最后将R-Net输出认为是人脸的候选框输入到O-Net中再一次进行精细操作,拒绝掉错误的框,此时输出分支包含三个分类:a)是否有人脸,2个输出;b)回归:回归得到的框的起始点的xy坐标和框的长宽,4个输出;c)人脸特征点定位:5个人脸特征点的xy坐标,10个输出。
注:三段网络都有NMS,但是设置的阈值不同。

主要步骤

构建图像金字塔

首先对图片进行Resize操作,将原始图像所方程不同的尺度,生成图像金字塔。然后将不同尺度的图像诉讼入到这三个字网络中进行训练,目的是为了可以检测到不同大小的人脸,从而实现多尺度目标检测。构建方法是通过不同的缩放洗漱factor分别对图片的h和w进行缩放,每次缩小为原来的factor带下。
注意:缩小后的长宽最小不可以小于12。
AI学习笔记(十三)CNN之人脸检测_第4张图片
对图片做“金字塔”变换的原因在于,图片中的人脸尺度有大有小,让识别算法不被目标尺度影响一直是个挑战。
MTCNN使用了图像金字塔来解决目标多尺度问题,即把原图按照一定的比例(如0.707),多次等比缩放得到多尺度的图片,很像个金字塔。
P-Net的模型是用单尺度 12 × 12 12\times 12 12×12的图片训练出来的。推理的时候,缩小后的长宽最小不可以小于12.
对多个尺度的输入图像做训练,训练是非常耗时的。因此通常只在推理阶段使用图像金字塔,提高算法的精度。
设置合适的最小脸尺寸和缩放因子可以优化计算效率:
1、factor是指每次对边缩放的倍数;
2、第一阶段会多次缩放原图得到图片金字塔,目的是为了让缩放后图片中的人脸与P-Net训练时候的图片尺度 12 p x × 12 p x ) 12px\times 12px) 12px×12px)接近;
3、引申优化项:先把图像缩放到一定大小,在通过factor对这个大小进行缩放,可以减少计算量。

  • minsize是指图片中需要识别人脸的最小尺寸(单位:px)
  • 注:底阿妈中使用的是“引申优化项”的策略。
    图例:如果待测图片 1200 p x × 1200 p x 1200px \times 1200px 1200px×1200px,想要让缩放后的尺寸接近模型训练图片的尺度 12 p x × 12 p x ) 12px\times 12px) 12px×12px)
    AI学习笔记(十三)CNN之人脸检测_第5张图片
    缩放因子为何选择0.709
  • 图片金字塔缩放时,如果默认把宽、高都变为原来的 1 / 2 1/2 1/2,缩放后面积变为原来的 1 / 4 1/4 1/4
  • 如果认为 1 / 4 1/4 1/4的缩放幅度太大,就会考虑将面积缩放为原来的 1 / 2 1/2 1/2,则其高、宽都缩放为原来的 2 2 \frac{\sqrt2}2 22
  • 从实际意义上看,factor应该设置为小于1的数
    图像金字塔的缺点:慢
    1、生成图片金字塔慢;
    2、每种尺度的图片都需要输入进模型,相当于多次执行了模型的推理流程。

P-Net(Proposal Network)

最基本的构造四一个全卷积网络。对于上一步构建完成的图像金字塔,通过一个FCN(全卷积网络)进行初步特征提取与标定边框。
MTCNN算法能够接受任意尺寸的图片的原因在于:

  • 第一阶段的P-Net是一个全卷积网络(Fully Convolutional Network);
  • 卷积、池化、非线性激活都是一些可以接受任意尺寸矩阵的运算,但全连接运算是需要规定输入。如果网络中有全连接层,则输入的图片尺寸一般是固定的;
  • 在推理的时候,测试图像中人脸区域的尺度位置。但是因为P网络结构是固定的,当输入为 12 × 12 12\times 12 12×12时,输出恰好是 1 × 1 1\times 1 1×1的5通道特征图,所以可以把p网络整体看做一个 12 × 12 12\times 12 12×12的卷积核在图片上从左上仿开始,取步长stride=2,依次做划窗操作。所以,当刚开始图很大的时候, 12 × 12 12\times 12 12×12的框可能只是框住了一张大脸上的某个局部如眼睛、耳朵、鼻子。当该图不断缩至很小的时候(图像金字塔), 12 × 12 12\times 12 12×12的框能对其框柱的也越来越全,甚至完全框柱整张脸。
    AI学习笔记(十三)CNN之人脸检测_第6张图片
  • 3次卷积核1次池化后,原来 12 × 12 × 3 12\times 12 \times 3 12×12×3的矩阵变为 1 × 1 × 32 1\times 1 \times 32 1×1×32
  • 利用这个 1 × 1 × 32 1\times 1 \times 32 1×1×32的向量,在通过一个 1 × 1 × 2 1\times 1 \times 2 1×1×2的卷积,得到了是否是人脸的分类结果
  • 令输入图片矩阵为A,卷积核在原图矩阵A上滑动,把每个 12 × 12 × 3 12\times 12 \times 3 12×12×3区域的矩阵都计算成该区域有无人脸的得分,最后可以得到一个二维军阵为S,S每个元素的值 [ 0 , 1 ] [0,1] [0,1]的数,代表有人脸的概率。即A通过一系列矩阵运算,变化到S。
    P-Net的输出:
    1、网络的第一部分输出是用来判断该图像是否存在人脸,输出向量大小为 1 × 1 × 2 1\times 1 \times 2 1×1×2,也就是两个值;
    2、网络的第二部分给出框的精准位置,即边框回归;P-Net输入的$12\times 12 $的图像块可能并不是完美的人脸框的位置,如有的时候人脸并不是正好为方形,有可能$12\times 12 $的图像偏左或偏右,因此需要输出当前框位置相对王美人脸框位置的偏移。这个偏移大小为
    1 × 1 × 4 1\times 1 \times 4 1×1×4,即表示框左上角的横坐标的相对偏移,框左上角的中坐标的相对偏移、框的宽度误差、框的高度误差;
    3、网络的第三部分输出人脸的5个关键点位置。5个关键点分贝对应着左眼的位置、右眼的位置、鼻子的位置、左嘴角的位置、右嘴角的位置。每个关键点需要两维来表示,因此输出的向量大小是 1 × 1 × 10 1\times 1 \times 10 1×1×10
    举例:
    一张 70 × 70 70\times 70 70×70的图,经过P网络全卷积后,输出为 ( 70 − 2 ) / 2 − 2 − 2 = 30 \left(70-2\right)/2-2-2=30 (702)/222=30,即每个通道的 30 × 30 30\times 30 30×30的特征图。这就意味着该图经过p的一次划窗操作,得到 30 × 30 = 900 30\times 30=900 30×30=900个建议框,而每个建议框对应一个置信度cond与4个偏移量offset。再经NMS(非极大值抑制:通过IOU,把不是极大值的值全部杀掉)把cond大于设定的阈值0.6对应的建议框保留下来,将其对应的offset经边框回归操作,得到在原图中的坐标信息,记得到复合P-net这些建议框了,再传给R-Net。

R-Net(Refine Network)

从网络图可以看到,只是由于该网络结构和P-Net网络结构有差异,多了一个全连接层,所以会取得更好的抑制false-positive的作用。在输入R-Net之前,都需要缩放到 24 × 24 × 3 24\times 24 \times 3 24×24×3,网络的输出与P-Net是相同的,R-Net的目的是为了去除大量的非人脸框。
AI学习笔记(十三)CNN之人脸检测_第7张图片

O-Net(Outout Network)

该层比R-Net多了一层卷积层,所以处理结果会更加精细。输入的图像大小为 48 × 48 × 3 48\times 48 \times 3 48×48×3,输出包括N个边界框的坐标信息,score以及关键点位置。
AI学习笔记(十三)CNN之人脸检测_第8张图片

总结

从P-Net到R-Net,再到最后的O-Net,网络输入的图像越来越大,卷积层的通道数越来越多,网络的深度(层数)也越来越深,因此识别人脸的准确率应该也是越来越高的。
MTCNN人脸检测的训练数据下载地址:http://shuoyang1213.me/WIDERFACE/。该数据集有32203张图片,共有93703张脸被标记。
AI学习笔记(十三)CNN之人脸检测_第9张图片

你可能感兴趣的:(AI)