人脸检测
因为相似性、易变性,人脸识别是比较困难的。
放大-好区分,类间变化
消除-同一个人,固定特征,类内变化
对于人脸,类内变化大于类间变化
人脸检测模型-mtcnn
(Multi-task convolutional neural network)多任务卷积神经网络
P-Net
R-Net
O-Net
MTCNN主要包括三层网络
- 第一层P-Net将经过卷积,池化操作后输出分类(对应像素点是否存在人脸)和回归(回归box)结果。
- 第二层网络将第一层输出的结果使用非极大抑制(NMS)来去除高度重合的候选框,并将这些候选框放入R-Net中进行精细的操作,拒绝大量错误框,再对回归框做校正,并使用NMS去除重合框,输出分支同样两个分类和回归。
- 最后将R-Net输出认为是人脸的候选框输入到O-Net中再一次进行精细操作,拒绝掉错误的框,此时输出分支包含三个分类:
a. 是否有人脸:2个输出;
b. 回归:回归得到的框的起始点(或中心点)的xy坐标和框的长宽,4个输出;
c. 人脸特征点定位:5个人脸特征点的xy坐标,10个输出。
注:三段网络都有NMS,但是所设阈值不同。
1. 构建图像金字塔
为了不被目标图像的尺寸影响。
推理的时候,缩小后的图像不能小于12*12
• factor是指每次对边缩放的倍数。
• 第一阶段会多次缩放原图得到图片金字塔,目的是为了让缩放后图片中的人脸与P-NET训练时候的图片尺度(12px * 12px)接近。
注意:先把图像直接缩放一半,再通过factor对这个大小进行缩放。可以减少计算量
缩放因子:0.709
因为要把面积缩放1/2,则sqrt(0.5)=0.709
2. P-Net(proposal network)
MTCNN算法可以接受任意尺度的图片,为什么?
• 因为第一阶段的P-NET是一个全卷积网络(Fully Convolutional Networks)。
• 卷积、池化、非线性激活都是一些可以接受任意尺度矩阵的运算,但全连接运算是需要规定输入。
如果网络中有全连接层,则输入的图片尺度(一般)需固定;如果没有全连接层,图片尺度可以是任意的。
输入12 * 12 * 3
3次卷积1次池化
输出1 * 1 * 32
3. R-Net(refine network)
比P-Net多了一个fc全连接层
图片在输入R-Net之前,都需要缩放到24x24x3。网络的输出与P-Net是相同的,R-Net的目的是为了去除大量的非人脸框。
4. O-Net(Output Network)
该层比R-Net层又多了一层卷积层,所以处理的结果会更加精细
代码:
relu、Leaky Relu、PRelu
PRelu(a一般大于0.2)
Leaky Relu(a比较小)