人脸检测算法MTCNN

本文将对人脸检测效果不错的MTCNN算法做一个梳理。
论文地址
MTCNN主要分为三步:
最初先对图像进行多尺度变换,获取图像金字塔,获取图像多尺度信息。

P-net(Proposal Network):

主要使用一个全卷机网络,获取候选框和这些候选框的bounding box regression向量组。然后评估这些候选向量,并进行校准。最后使用非极大化抑制来去除大量重复的候选区域。
P-Net

P-Net结构如下:
结构

R-net(Refine Network ):

所有候选区域送入R-Net,该层多出来一个全连接层(FC),可以进行更细化的处理,排除掉大量不符合要求的候选区域,通过bounding box regression执行校准,在利用非极大化抑制( NMS)进行合并。
R-net
R-net的网络结构:
R-net

O-net(Output Network):

这一步和第二步类似,这一步输出更多的人脸部特征,主要是脸部五点特征位置。
O-net
O-net的结构:
o-net
以上就是人脸检测MTCNN的基本结构。对人脸检测精度的影响主要有以下几点:

  1. 一些滤波器的权值缺少多样性,这样会导致产生歧义性的描述。
  2. 人脸检测只是一个二分类任务,所以人脸检测需要少量的滤波操作,需要更多对人脸的描述。

基于上述文中采用3*3的权值矩阵,减少网络深度,以获取更好的性能。

网络的训练:

markdown公式编辑语法
训练也是三个:
- 人脸与非人脸
- 人脸区域
- 人脸五点特征定位
1、先看第一个人脸与非人脸,对于每一个输入样本  xi 采用交叉熵损失函数:

Ldeti=(ydetilog(pi)+(1ydeti)(1log(pi)))

上述公式中的 pi 表示是人脸的概率,其中 ydeti{0,1}
2、对于每一个候选框,需要预测它和真实坐标的偏移。对于每一个样本 xi 通过欧式距离进行回归:
Lboxi=||ŷ boxiyboxi||22

候选框,主要由最左顶点坐标、长、宽组成,每一个box是一个4维向量。
3、脸部特征坐标,与候选框回归类似,还是计算候选特征坐标和真实坐标的位置的欧式距离,并最小化此距离。
Llandmarki=||ŷ landmarkiylandmarki||22

上述五点特征包括,左眼、右眼、鼻子、左边嘴角、右边嘴角。每个坐标均有两个坐标,所以每一个landmark是一个10维德向量。
4、多源训练,训练过程中,有人脸非人脸的照片,部分人脸区域。所以上述的三个损失函数可能有的没有必要使用。所以整体的损失函数如下:
minj=1Nj{det,box,landmark}αjβjiLji

其中N是样本集大小,其中 αj 表示任务的优先级, βji{0,1} 表示样本标签, Lji 表示上面三步的损失函数。在P_Net和R_Net中设置 αdet=1 αbox=0.5 αlandmark=0.5 ,在O_net中, αdet=1 αbox=0.5 αlandmark=1
在训练过程中,为了取得更好的效果,作者每次只后向传播前70%样本的梯度,这样来保证传递的都是有效的数字。有点类似latent SVM,只是作者在实现上更加体现了深度学习的端到端。

training data的处理:

训练采用四种类型的数据:
1、备选区域和目标区域的重叠率(IOU)小于0.3的,全部是非人脸。
2、IOU大于0.65的是人脸。
3、IOU在0.4到0.65之间的是部人脸区域。
4、人脸特征坐标,人脸标注五个位置。
其中1、2数据集主要用来识别人脸与非人脸。
2、3数据集用来做box bounding regression。
4数据集主要用来确定人脸五点特征位置。
作者对算法过程实现的一些代码如下:
https://github.com/kpzhang93/MTCNN_face_detection_alignment

  • 0
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值