mtcnn人脸检测_SPL2016_MTCNN

e1561da1bf0389e1342719d0e156e537.png

本次介绍基于cascade CNN的人脸检测三篇:cascade CNN、MTCNN、Joint Training of Cascaded CNN;这是第一篇MTCNN;

MTCNN前向预测操作就是一个cascade思想,但跟经典的cascade由弱分类器构建强分类器的方法比较起来,思路简单很多,毕竟只有三个层次,每个层次仅有一个分类器(p-net、r-net、o-net);

注:输入图像首先需要生成多尺度的图像金字塔,再输入p-net生成proposals;

作者提出了一个很好的观点就是:在人脸检测中联合特征点定位的多任务,二者联合学习,可以增强单独训练这两个任务的模型的性能,就是说两者相互配合,达到了更好的性能;那么是不是在人脸检测中增加其他的任务,如人眼检测、人嘴检测、头发检测等等,会不会继续增加模型的性能呢?

优点:速度快、人脸检测效果sota、三个创新点:

1 cascade CNN结构(p-net、r-net、o-net,主要三个网络叠加;每个网络同时做人脸分类+校准+landmark定位的输出;相当于一个网络做三个任务;训练时分类+定位都有loss、测试时只有o-net输出landmark)、OHEM(top70% loss sample参与参数更新);

2 人脸检测 + landmark定位的联合多任务;

3 OHEM;

Abstract

1 我们提出一个多任务的叠层框架,来联合人脸检测和人脸对齐之间的内在关系,用于进一步提升性能(a deep cascaded multitask framework that exploits the inherent correlation between detection and alignment to boost up their performance);

2 三个阶段的cascade CNN从粗到细地预测人脸bbox和landmark(cascaded architecture with three stages of carefully designed deep cnn to predict face and landmark location in a coarse-to-fine manner);----因为是多任务,所以mtcnn只需要三个cnn,每个cnn同时做人脸分类和bbox回归(+人脸landmark),比cascade cnn的六个cnn少三个

3 提出了利用ohem提升性能的方案;

4 fddb、wider face上人脸检测sota;aflw人脸landmark上sota;

5 速度快,Nvidia Titan Black上99fps;

关键字:cascade CNN,人脸对齐,人脸检测

I. INTRODUCTION

VJ:haar-like特征 + AdaBoost训练 + cascade结构(utilizes Haar-Like features and AdaBoost to train cascaded classifiers),cpu实时;也是本文思想的基础;

cascade CNN:diss了下,说在人脸检测后还需要跑一个calibration-net用于人脸校准,多了个模型,没有做到多任务,多了计算量;还忽略了人脸bbox回归和人脸landmark定位之间的内在联系;

本文提出了一种联合人脸检测和人脸特征点定位的多任务学习cascade cnn框架,包含以下三个阶段:

stage0:生成图像金字塔;

stage1:在图像金字塔上密集滑窗生成人脸candidates,使用小网络p-net快速过滤大部分非人脸误检,p-net同时输出bbox回归四维向量,用于人脸bbox位置校准;参照fig2;----此处讲解稍微有点误差,将mtcnn和cascade cnn的face candidate的生成混为一谈了,修正可以查看笔记末尾的更正;

stage2:将stage1过滤后并校准的人脸框通过r-net,与stage2功能一样,但模型复杂点;参照fig2;

stage3:将stage2过滤后并校准的人脸框通过o-out,模型更加复杂,并同时输出人脸bbox和五个人脸特征点(x, y)坐标;参照fig2;

作者认为的三个spotlight:

1 设计轻量级的cascade cnn框架,同时完成人脸检测和人脸特征点定位,可以达到实时;

2 ohem;

3 fddb、wider face上人脸检测sota;aflw人脸landmark上sota;

II. APPROACH

A. Overall Framework

11e26a7d14b6cf61795d126dcf4346d9.png

文中介绍的步骤:

stage0:对测试图像生成图像金字塔,用于接下来3 stages的输入;

stage1: p-net -- proposal network,fcn(mtcnn中唯一的全卷积网络,如fig2),输出三个results,参照fig2,candidate facial bbox基于预测的bbox回归向量做边框校准;再过一遍NMS合并高重合candidates;----此处讲解稍微有点误差,将mtcnn和cascade cnn的face candidate的生成混为一谈了,修正可以查看笔记末尾的更正;

stage2:r-net -- refine network,与stage1类似,输出:分类+4维回归向量+10维人脸特征点(5个点(x,y)坐标);进一步筛选人脸、bbox边框校准、后NMS操作;

stage3:o-net -- output network,与stage1、2类似,模型更复杂,同样输出三个results;

注:结合fig1、2可以发现,训练阶段stage1、2、3中的网络都有输出人脸landmark做有监督的训练,但测试阶段只有o-net才将5 facial landmarks输出;

B. CNN Architectures

cascade CNN的不足(又把cascade CNN给diss了下,什么仇什么怨):

1 卷积层的一些filters缺乏多样性,限制了其判别性的性能;

2 通用目标检测需要检测multi classes,人脸检测只是binary classes,在每层可以不需要那么多filter;

经过以上分析,mtcnn中的改进:

1 stage2、3中不使用 5 x 5卷积,改为使用3 x 3卷积,并减少filter数目,减少计算量;并提升每个stage的模型深度,可进一步提升模型性能;

2 在conv、fc层后使用prelu,而非relu(output layer除外,直接接softmax即可);

经过以上改进,模型计算量减少了,训练耗时减少了,性能还提升了;

table1:训练阶段的结果,可以发现对比cascade cnn,是快了很多,而且acc有所提升;

9aa430b274e97c0106cb4ba3669231f5.png

fig 2就是mtcnn的结构,和cascade比较类似,不再赘述;

f695811e099223c9cf62b98f0c2674ac.png

C. Training

multi-task:

1 face/nonface分类;

2 bounding box回归;

3 facial landmark定位;

都比较常规,直接截图:

1 人脸分类loss,比较常规,二分类loss,交叉熵损失:

eca953736b8d05ce57edbd5e7cd8856e.png

2 人脸bbox loss,回归loss,算的是bbox左上角坐标+长宽loss(有的paper里算的是bbox中心点坐标+长宽loss),使用的是欧氏距离loss,就是smoothL2 loss,跟fast rcnn中的smoothL1 loss不同,算了个平方和,而非绝对值和(为什么使用这个?我猜是效果更好吧);

b16589b1b5519c0f4d5fc77747c319f6.png

3 人脸特征点loss,跟2中bbox loss一样,也是回归loss,同样的平方和loss;作者将人脸的五个特征点作为一个整体,10维向量作为一个整体计算loss:

d2a3c58d6635d40d61497c75b91263e4.png

4 训练策略:bg只用做1的分类训练,不用做bbox和landmark训练,这样就通过beta变量作为一个flag,控制各个样本是否参与each task的训练;alpha作为衡量不同task的权重,o-net里因为要输出landmark,所以o-net里landmark loss权重高一点;

7ba063db70fd7a0eb309cadd0feb2db8.png

5 ohem

paper中写到,只在训练阶段的face/nonface分类任务中使用了ohem;

具体操作:在每个mini-batch中,对所有样本计算一次前向,按loss排序,选择top70%的样本,反传其loss,简单的样本就不回传loss做参数更新了;

原文:in each minibatch, we sort the losses computed in the forward propagation from all samples and select the top 70% of them as hard samples. Then, we only compute the gradients from these hard samples in the backward propagation. That means we ignore the easy samples that are less helpful to strengthen the detector during training.

特点:对人脸分类的所有样本前向计算loss,再按loss排序,没有区分正负样本;同https://zhuanlan.zhihu.com/p/38053457中介绍的face rcnn和face r-fcn又有了差异,有点意思;

附:

face rcnn:对正负样本分开做ohem,确保mini-batch内正负样本比例为1:1;

face r-fcn:仅对负样本做mining,每个mini-batch控制负正样本量比例为1:3;

mtcnn:一把抓,正负样本一起做,按分类score(其实就是跟loss对应的,做个转换就行,一回事)选择top 70%,中间正负样本都有;也不用控制比例;

III. EXPERIMENTS

A. Training Data

因为要同时做人脸检测+对齐,训练阶段使用了四类数据:

1 negatives:与gt faces iou < 0.3;

2 positives:与gt faces iou > 0.65;

3 part faces:与0.4 < gt faces iou < 0.65;

4 landmark faces:标注了五个landmark坐标的人脸;

在negatives和part faces间设置了一个iou 0.3 ~ 0.4的gap;

人脸二分类:negatives + positives;

人脸bbox回归:positives + part faces;

人脸landmark:landmark faces;

比例:negatives/positives/part face/landmark faces:3:1:1:2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值