深度学习论文精读(7):MTCNN
论文地址:Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks
译文地址:https://zhuanlan.zhihu.com/p/37884254
参考博文1:https://zhuanlan.zhihu.com/p/38520597
官方地址:https://kpzhang93.github.io/MTCNN_face_detection_alignment/
1 总体介绍
- 认为人脸检测和人脸对齐之间是有内在联系的,因此提出了一种同时训练两个任务的结构。
- 提出了一种基于深度学习的级联结构,用于以下两种人脸识别任务。
- 1.人脸检测(face detection)
- 2.人脸对齐(face alignment)
- 提出了一种新的hard sample选取策略: online hard sample mining strategy,有效提高训练精度。
- 在各类数据库中达到state-of-the-art。同时延迟较低。
2 网络总体结构
- 如下图所示,MTCNN的结构共分为三层,分别为:
- P-Net(Proposal Network),用于生成预选框
- R-Net(Refinement Network),用于精炼预选框
- O-Net(Output Network),用于输出人脸,以及脸部标志点
-
更直观的输入输出流程如下:(图片来自这篇文章)
-
首先将原始图片resize成一系列大小的图片金字塔,用于不同层级的网络输入。
-
P-Net的输入是resize成12*12的原始图片。输出是一系列的bounding boxes。
-
R-Net的输入是resize成24*24的原始图片以及P-Net得到的bounding boxes。输出是经过精炼过后的bounding boxes。
-
O-Net输入的是resize成48*48的原始图片以及R-Net精炼过后的的bounding boxes。输出是最终得到的bounding box,以及其中的五个facial landmarks。(左右眼,鼻尖,左右嘴角)
-
其中,上述步骤均以NMS(None-Maximum oression)进行重复bounding boxes的精简。
-
- P-Net,R-Net,O-Net的具体参数。
2.1 损失函数介绍
-
MTCNN共包含三个任务,分别为:
- Face classification(人脸分类,用于判断边框内是否为人脸)
- Bounding box regression(边框回归,用于标定人脸边框的范围)
- Facial landmark localization(人脸标志点定位,用于定位人脸上的特征部位)
-
其损失函数分别为:
-
Face classification,使用交叉熵损失:
y i d e t = − ( y i d e t l o g ( p i ) + ( 1 − y i d e t ) ( 1 − l o g ( p i ) ) ) \Large y_i^{det}=-(y_i^{det}log(p_i)+(1-y_i^{det})(1-log(p_i))) yidet=−(yidetlog(pi)+(1−yidet)(1−log(pi))),其中 y i d e t y_i^{det} yidet为label, p i p_i pi为网络得出该边框是否为人脸的概率。
-
Bounding box regression,使用欧氏距离损失:
L i b o x = ∥ y ^ i b o x − y i b o x ∥ 2 2 \Large L_i^{box}=\|\hat y^{box}_i - y_i^{box}\|^2_2 Libox=∥y^ibox−yibox∥22,其中 y ^ b o x \hat y^{box} y^box为网络预测的边框信息, y b o x y^{box} ybox为边框标签。 y b o x y^{box} ybox内包括边框的左顶点,以及边框的宽和高。 y b o x ∈ R 4 y^{box}\in\R^4 ybox∈R4。
-
Facial landmark localization,使用欧氏距离损失:
L i l a n d m a r k = ∥ y ^ i l a n d m a r k − y i l a n d m a r k ∥ 2 2 \Large L_i^{landmark}=\|\hat y^{landmark}_i-y^{landmark}_i\|_2^2 Lilandmark=∥y^ilandmark−yilandmark∥22,其中 y ^ i l a n d m a r k \hat y^{landmark}_i y^ilandmark为网络预测的特征点信息, y i l a n d m a r k y^{landmark}_i yilandmark为特征点真值。 y l a n d m a r k y^{landmark} ylandmark包括左右眼,鼻尖,以及左右嘴角的位置。 y l a n d m a r k ∈ R 10 y^{landmark}\in\R^{10} ylandmark∈R10。
-
2.2 多任务训练
-
MTCNN的框架里,每一层级的网络结构都需要完成的上述的三个任务,但在每层网络中,各个任务的重要性又不尽相同,因此,文中使用超参数来控制不同网络内,不同任务的损失权重。如下:
m i n ∑ i = 1 N ∑ j ∈ { d e t , b o x , l a n d m a r k } α j β i j L i j \Large min\sum^N_{i=1}\sum_{j\in\{det,box,landmark\}}\alpha_j\beta^j_iL^j_i mini=1∑Nj∈{det,box,landmark}∑αjβijLij
-
其中, N N N为样本总数, j j j 为损失类别, α \alpha α为用于控制损失权重的超参数, β \beta β用于描述样本类型,下面会提到。
-
α \alpha α的具体设置如下,用以调节在不同网络内不同任务的权重,以得到更优秀的结果。
- P-Net 和R-Net: α d e t = 1 , α b o x = 0.5 , α l a n d m a r k = 0.5 \Large\alpha_{det}=1,\alpha_{box}=0.5,\alpha_{landmark}=0.5 αdet=1,αbox=0.5,αlandmark=0.5
- O-Net: α d e t = 1 , α b o x = 0.5 , α l a n d m a r k = 1 \Large\alpha_{det}=1, \alpha_{box}=0.5, \alpha_{landmark}=1 αdet=1,αbox=0.5,αlandmark=1
2.3 在线困难样本挖掘
-
作用:构建训练数据的方法。
-
流程:
-
- 在每个mini-batch中,计算所有loss,并降序排序。
- 获取钱获取前70%的sample进行梯度下降训练。
2.3 训练数据构建
-
根据样本的好坏,以及作用的任务分为以下四类:
-
- positives:与 ground truth 的IOU高于阈值。(文中使用0.65)
- negatives:与 ground truth 的IOU低于阈值。(文中使用0.3)
- part faces:与 ground truth 的IOU处于两个阈值之间。(文中使用0.4以及0.65)
- landmark faces:拥有landmark的标签。(五个面部关键点)
-
不同任务使用不同的训练数据,并以 β i j \Large \beta_i^j βij来规定样本能否参加训练,能参加的则置1,否则置0。
-
- Face classification使用 positives & negatives。
- Bounding box regression预测使用 potitives & part faces。
- Facial landmark localization预测使用 landmark faces。
4 其他
- MTCNN用于人脸识别的话,将会是用于裁剪人脸,获得边框。之后再输入到传统CNN中,获取特征向量,再通过特征向量进行距离的判断,以一个阈值来划分是否为同一张人脸。
单词整理:
- joint 连接,关节
- inherent 固有的,与生俱来的
- coarse 粗糙的
- auxiliary 辅助的,附加的
- desirable 令人满意的
- candidate 候选人
- refine 精炼
- notably 显著的
- pyraimd 金字塔
- estimate 估计,判断
- calibrate 矫正
- diversity 多样性,差异
- discriminate 歧视,区别
- leverage 杠杆作用
- obtain 获得