3.8 MTCNN
Multi-task Cascaded Convolutional Networks,多任务级联卷积神经网络。
人脸检测。MTCNN采用PRO三个CNN来做检测。(其实做灰度投影怎么样?只能起到辅助作用吧。)
1 模型思想
该模型利用多级联的结构,从粗到细预测人脸以及相应特征坐标位置,能够适用于各种自然条件下复杂的人脸场景检测,可以实现人脸检测和5个特征点的标定(这个landmark需要增加到很多,才能在人脸检测的基础上做很多事情,否则就只是完成人脸检测的任务)。
主要包括三个网络子结构:
- P-Net(proposal networks)
- R-Net(refine networks)
- O-Net(output networks)。
2 模型架构
模型架构包括4部分:
- 图像金字塔
为了检测到不同size的人脸,在进入P-Net之前,我们应该对图像进行金字塔操作。- 根据设定的min_face_size尺寸,将img按照一定的尺寸缩小
- 每次将img缩小到前级img面积的一半,形成scales列表
- 直至边长小于min_face_size,得到不同尺寸的输入图像。
-
P-Net
-
R-Net
- O-Net
3 算法流程
3.1 P-Net
S1: 将不同尺寸的金字塔图像输入到p-net中,最终得到prob1与conv4-2。prob1中包含box位置信息及其置信度,conv4-2中包含box的回归系数信息。
S2: 利用S1中的prob1与conv4-2生成box,设置阈值为0.6(初筛,阈值小),得到一系列点,映射回原img,以此点为左上角,向右向下各扩展12个像素,得到的矩形框。
S3: 对一帧图像上检测到的所有矩形框进行NMS运算。
S4: 得到的所有box会放置在一个的数组里,其中number表示box的数量,9代表box的坐标信息、score、坐标回归信息[x1、y1、x2、y2、score、reg_x1、reg_y1、reg_x2、reg_y2],利用reg*系列(对应坐标的线性回归参数)可对box进行坐标修正,修正过程可表示为:
S5: 目标框修正之后,先做rec2square、然后再pad。其中rec2square是将修正后不规则的框调整为正方形,pad的目标是将超出原img范围的部分填充为0,大小比例不变。
上述步骤可以简写为:
- 12*12的anchor在不同尺寸的图像上按照stride=1滑动
- 根据face classification结果判定是否为人脸,小于-->Drop,大于留下
- 利用回归系数信息进行精修
- nms
- rec2square
- pad
- 生成一系列候选框
3.2 R-Net
- 将P-Net最后输出的所有box,resize到后输入R-Net。
- 经过R-Net后,输出与P-Net类似,prob1:box坐标信息与置信度与conv5-2的回归系数信息。
- 根据所得的置信度信息与该层阈值对比,小于阈值的直接drop掉,大于阈值的留下,
- nms
- 利用回归系数信息进行精修
- rec2square
- pad
3.3 O-Net
将R-Net最后输出的所有box,resize到48*48后输入O-Net。经过O-Net后,输出prob1:box坐标信息与置信度、conv6-2的回归系数信息、以及conv6-3的关键点坐标信息。
conv6-3是的二维数组,number代表box的数量,10则包含了5个关键点信息的x、y坐标信息:[Rx1,Rx2, Rx3, Rx4, Rx5, Ry1, Ry2, Ry3, Ry4, Ry5],此时的坐标为目标框内部的比例,最后映射回原img得到真实的坐标。
根据prob1置信度信息与该层阈值对比,小于阈值的直接drop掉,大于阈值的留下,再利用回归系数信息进行精修,最后再进行一次NMS。
最后,输出一副包含人脸框与人脸关键点的检测图像。
3.4 损失函数
损失函数包括三个方面:
- 人脸分类损失
- bbox回归损失
- 人脸landmark定位损失
代表对应任务的重要性
P-Net:
R-Net:
O-Net:
代表样本类型
边训练边选择出hard sample,只有hard samples才进反向传播,其他样本不进行反向传播。具体做法:对每个小批量里所有样本计算loss,对loss进行降序,前70%的samples 做为hard samples进行反向传播。