mtcnn系列-1.模型原理

1.mtcnn的工作流程

mtcnn是用来做人脸检测的模型,模型采用三级联的工作方式,如下图
mtcnn系列-1.模型原理

步骤0

将输入图像进行金字塔缩放,小图检测大人脸,大图检测小人脸

步骤1

这里使用一个全卷积网络,叫做Proposal Network(P-Net),这个网络比较简单,有4层cnn网络,最后一层是三个不同深度的1*1卷积核,一个有2个filter,用来分类有人脸和无人脸,一个是有4个filter,用来回归方框偏移量,一个有10个filter,用来回归5个关键点坐标,网络模型如下

mtcnn系列-1.模型原理
在训练过程中,模型接受一个12123的图像,经过前三层卷积后,变成1132的tensor,关于怎么计算cnn的输出,查看计算cnn输出
如上图输入是12, 第一层的卷积核为33,有10个卷积核,步进为1,因此输出为10,经过池化层,尺寸为2, 步进为2, output_shape = (input_shape - pool_size + 1) / strides) 得到4.5,向上取整为5。发现第三层得到了一个11的tensor,表示检测到一个结果。当在测试的时候,我们输入的图像一般都大于1212,因此第三层会得到nn的tensor,表示有n个检测结果,跟yolov里面的单元格类似,
那么最后结果将是nn2,nn4, nn10。最后得到一堆预测结果,里面有很多误判,和重叠方框,首先根据得分过滤得分小的方框,然后使用非极大值抑制,过滤掉重叠的方框

步骤2

mtcnn系列-1.模型原理
在经过p-net后,得到的一堆检测方框(detection),用他们去原图想截图,然后将其resize到24*24
放到第二个网络Refine Network(R-Net),将得到的结果进行使用分类得分进行过滤得分小的方框,
然后使用非极大值抑制,过滤掉重叠的方框

步骤3

mtcnn系列-1.模型原理
在经过R-Net后,还是得到一堆方框,但是比之前少了很多,然后重复步骤2,进行第三步,Output Network(O-Net)输出最终结果,之后结果包含得分,方框,还有关键点(landmark)

mtcnn的损失函数

人脸分类。就是人脸和背景两个类别,损失函数使用交叉熵
mtcnn系列-1.模型原理
Bounding box regression 使用方差损失
mtcnn系列-1.模型原理
论文里面写的box是回归左上角坐标,宽高(left, top, height, and width)但是很多代码里都是回归(left,top,right,down)
landmark regression使用方差损失
mtcnn系列-1.模型原理
损失贡献比例不同,在p-net和r-net中损失贡献比例为
detection:box:landmark=1:0.5:0.5
在o-net中的比例为
detection:box:landmark=1:0.5:1