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

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

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

其中,pip_i表示模型预测的样本为人脸的概率,yidet{0,1}y_i^{det}\in\{0, 1\}是ground-truth标签。

(2)bounding box regression:回归问题,使用平方和损失,对于样本xix_i,其损失为:
Libox=y^iboxyibox2L_i^{box}=||\hat y_i^{box}-y_i^{box}||^2

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

(3)facial landmark localization:回归问题,同样使用平方和损失,对于样本xix_i,其损失为:
Lilandmark=y^ilandmarkyilandmark2L_i^{landmark}=||\hat y_i^{landmark}-y_i^{landmark}||^2

有5个landmark,分别是左/右眼,鼻子,左/右嘴角,因此yilandmarkR10y_i^{landmark}\in \mathbb R^{10}.

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

其中,N表示样本总数,αj\alpha_j表示任务的重要性。论文在P-Net 和 R-Net中设置αdet=1,αbox=0.5,αlandmark=0.5\alpha_{det}=1, \alpha_{box}=0.5, \alpha_{landmark}=0.5,在O-Net中设置αdet=1,αbox=0.5,αlandmark=1\alpha_{det}=1, \alpha_{box}=0.5, \alpha_{landmark}=1以获得更准确的facial landmarks定位。βij{0,1}\beta_i^j\in \{0,1\}是type indicator。由损失函数,选择SGD作为优化方法是一个很自然的选择。

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

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

相关文章:

  • 2021-05-01
  • 2021-11-27
  • 2021-10-17
  • 2021-07-18
  • 2022-01-14
  • 2021-08-08
  • 2021-05-13
猜你喜欢
  • 2021-12-31
  • 2021-07-01
  • 2021-08-20
  • 2022-01-21
  • 2022-01-23
  • 2021-12-23
  • 2021-03-31
相关资源
相似解决方案