CNN论文-MTCNN

Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks

I. Motivation
1.人脸检测时会遇到的问题:人脸的不同角度、光照、遮挡等
2.之前的人脸检测和对齐方法的缺点:
(1) 忽视了人脸检测和人脸对齐这两个任务之间的关联。(做人脸检测没有结合facial landmark)
(2) 传统的困难样本挖掘(hard sample mining)采用的是offline的方式,大大增加了人工操作

II. MTCNN方法概述
1.A deep cascaded multi-task framework for joint face detection and alignment: 通过三个阶段的深度卷积网络以从粗到细的方式对人脸和landmark位置进行预测 (bbox regression结合facial landmark)
2.online hard sample mining strategy

III.MTCNN具体细节
1.整体框架
  MTCNN pipeline如图1所示。对给定的照片,先将其缩放到不同尺寸形成图像金字塔,然后这些不同尺寸的图像作为3个stage的输入进行训练,目的是为了可以检测不同scale的人脸。
P-Net是一个全卷积网络(FCN),用来生成一些候选框(candidate windows)及其bbox regression vectors。在训练的时候该网络的顶部有3条支路用来分别做人脸分类、人脸框回归和人脸关键点定位;在测试的时候这一步的输出只有N个bounding box的4个坐标信息和score,当然这4个坐标信息已经用回归支路的输出进行修正了,使用非极大值抑制(NMS)合并重叠的候选框。
R-Net主要用来去除大量的非人脸框。这一步的输入是前面P-Net生成的bounding box,每个bounding box的大小都是24x24,可以通过resize操作得到,拒绝掉大部分false candidates,继续进行bounding box regression校正和NMS合并。同样在测试的时候这一步的输出只有M个bounding box的4个坐标信息和score,4个坐标信息也用回归支路的输出进行修正了 。
O-Net和R-Net有点像,只不过这一步还增加了landmark位置的回归。输入大小调整为48x48,输出包含P个bounding box的4个坐标信息、score和关键点信息。

CNN论文-MTCNN_第1张图片

2.CNN架构
之前用于人脸检测的CNN的缺点:
(1) some filters lack diversity of weights that may limit them to produce discriminative description
(2) face detection is a challenge binary classification task, so it may need less numbers of filters but more discrimination of them

MTCNN的改进:
(1) 减少了filter数量并将5×5 filter改为3×3 filter,减少了计算量
(2) 增加模型深度以获得更好的表现

CNN论文-MTCNN_第2张图片

3.训练
CNN detectors有三个任务:face/non-face classification, bounding box regression, and facial landmark localization
(1)face/non-face classification:二分类问题,使用交叉熵损失,对于样本 x i x_i xi,其损失为:
L i d e t = − ( y i d e t l o g ( p i ) + ( 1 − y i d e t ) l o g ( 1 − p i ) ) L_i^{det}=-(y_i^{det}log(p_i)+(1-y_i^{det})log(1-p_i)) Lidet=(yidetlog(pi)+(1yidet)log(1pi))

其中, p i p_i pi表示模型预测的样本为人脸的概率, y i d e t ∈ { 0 , 1 } y_i^{det}\in\{0, 1\} yidet{0,1}是ground-truth标签。

(2)bounding box regression:回归问题,使用平方和损失,对于样本 x i x_i xi,其损失为:
L i b o x = ∣ ∣ y ^ i b o x − y i b o x ∣ ∣ 2 L_i^{box}=||\hat y_i^{box}-y_i^{box}||^2 Libox=y^iboxyibox2

其中, y ^ i b o x \hat y_i^{box} y^ibox是模型预测的bbox坐标, y i b o x y_i^{box} yibox是ground-truth坐标。四个坐标分别是,左上坐标、高和宽。

(3)facial landmark localization:回归问题,同样使用平方和损失,对于样本 x i x_i xi,其损失为:
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 L_i^{landmark}=||\hat y_i^{landmark}-y_i^{landmark}||^2 Lilandmark=y^ilandmarkyilandmark2

有5个landmark,分别是左/右眼,鼻子,左/右嘴角,因此 y i l a n d m a r k ∈ R 10 y_i^{landmark}\in \mathbb R^{10} yilandmarkR10.

(4)Multi-source training:不是每个sample都要全部使用上述三种损失函数,比如对于背景只需要计算交叉熵损失,不需要计算别的损失,这样就需要引入一个indicator来指示样本是否需要计算某一项损失。最终的训练目标函数是:
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 min\Sigma_{i=1}^N\Sigma_{j\in\{det, box, landmark\}}\alpha_j\beta_i^jL_i^j minΣi=1NΣj{det,box,landmark}αjβijLij

其中,N表示样本总数, α j \alpha_j αj表示任务的重要性。论文在P-Net 和 R-Net中设置 α d e t = 1 , α b o x = 0.5 , α l a n d m a r k = 0.5 \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 \alpha_{det}=1, \alpha_{box}=0.5, \alpha_{landmark}=1 αdet=1,αbox=0.5,αlandmark=1以获得更准确的facial landmarks定位。 β i j ∈ { 0 , 1 } \beta_i^j\in \{0,1\} βij{0,1}是type indicator。由损失函数,选择SGD作为优化方法是一个很自然的选择。

(5)Online Hard sample mining: 传统的hard sample处理方法是检测过一次以后,手动检测哪些困难的样本无法被分类。本文采用online hard sample mining,具体就是在每个mini-batch中,取loss最大的70%样本计算梯度,进行反向传播,忽略那些简单的样本。

参考:
MTCNN人脸及特征点检测—代码应用详解(基于ncnn架构)
多任务深度学习(MultiTask Learning)

你可能感兴趣的:(深度学习)