人脸任务总体上分为:人脸检测、人脸关键点检测、人脸判别、人脸识别、人脸聚类等。
作者认为人脸检测和人脸关键点检测这两个任务之间是有联系的(直观上来想,确实如此,网络在提取人脸信息的时候必然会包括关键点的信息)。所以,提出了mtcnn的综合框架,同时处理人脸检测和人脸关键点识别。
总体的算法思路很简单,主要是有3个浅层网络级联在一起,每一级的精度逐步提高,作者通过这种分级过滤的方式来提高速度。3个浅层网络分别是:P-Net、R-Net、O-Net。
一、算法步骤
1、建立图像金字塔
2、图像金字塔中的图片进入P-Net,这是一个全卷积网络,输出部分分为两个分支:分类分支(二分类)和定位分支(人脸的bbox)。
3、将2中产生的bbox和原图送入R-Net,进一步过滤这些bbox,得到更精确的结果。
4、将3中得到的bbox和原图送入O-Net,输出3个结果:分类(二分类)、定位(人脸位置)、关键点(5个关键点的坐标)。
具体结构如下图所示:
二、Loss
1、分类loss:标准交叉熵损失函数
2、定位loss:
3、关键点loss:两个点之间的欧式距离,即
4、3个网络的loss分别为:
(1),背景bbox:,前景bbox:
(2),背景bbox:,前景bbox:
(3),背景bbox:,前景bbox: