MTCNN网络解析

多任务卷积神经网络(MTCNN)实现人脸检测与对齐是在一个网络里实现了人脸检测与五点标定的模型,主要是通过CNN模型级联实现了多任务学习网络。整个模型分为三个阶段,第一阶段通过一个浅层的CNN网络快速产生一系列的候选窗口;第二阶段通过一个能力更强的CNN网络过滤掉绝大部分非人脸候选窗口;第三阶段通过一个能力更加强的网络找到人脸上面的五个标记点;完整的MTCNN模型级联如下:MTCNN实时人脸检测网络详解与opencv+tensorflow代码演示

该模型的特征跟HAAR级联检测在某些程度上有一定的相通之处,都是采用了级联方式,都是在初期就拒绝了绝大多数的图像区域,有效的降低了后期CNN网络的计算量与计算时间。MTCNN模型主要贡献在于:

1.提供一种基于CNN方式的级联检测方法,基于轻量级的CNN模型就实现了人 脸检测与点位标定,而且性能实时。
2.实现了对难样本挖掘在线训练提升性能
3.一次可以完成多个任务。

阶段方法详解

第一阶段
网络是全卷积神经网络是一个推荐网络简称 P-Net, 主要功能是获得脸部区域的窗口与边界Box回归,获得的脸部区域窗口会通过BB回归的结果进行校正,然后使用非最大压制(NMS)合并重叠窗口。
第二阶段
网络模型称为优化网络R-Net,大量过滤非人脸区域候选窗口,然后继续校正BB回归的结果,使用NMS进行合并。
第三阶段
网络模型称为O-Net,输入第二阶段数据进行更进一步的提取,最终输出人脸标定的5个点位置。

网络架构与训练
对CNN网络架构,论文作者发现影响网络性能的因素主要原因有两个:

1.样本的多样性缺乏会影响网络的鉴别能力
2.相比其它的多类别的分类与检测任务来说,
人脸检测是一个二分类,每一层不需要太多filters,
也就是说每层网络的feature maps个数不需要太多

根据上述两个因素,作者设计网络每层的filter个数有限,但是它增加了整个网络的深度,这样做的好处是可以显著减少计算量,提升整个网络性能,同时全部改用3x3的filter更进一步降低计算量,在卷积层与全连接层使用PReLU作为非线性激活函数(输出层除外)整个网络架构如下:MTCNN实时人脸检测网络详解与opencv+tensorflow代码演示

训练这个网络需要如下三任务得到收敛

1.人脸二元分类
2.BB回归(bounding box regression)
3.标记定位(Landmark localization)

训练时候对于人脸采用交叉熵损失:
MTCNN实时人脸检测网络详解与opencv+tensorflow代码演示
BB回归损失:
对每个候选窗口,计算它与标注框之间的offset,目标是进行位置回归,计算其平方差损失如下
MTCNN实时人脸检测网络详解与opencv+tensorflow代码演示

脸部landmark位置损失:
MTCNN实时人脸检测网络详解与opencv+tensorflow代码演示
总计有五个点位坐标分别为左眼、右眼、鼻子、左嘴角、右嘴角
因为每个CNN网络完成不同的训练任务,所以在网络学习/训练阶段需要不同类型的训练数据。所以在计算损失的时候需要区别对待,对待背景区域,在R-Net与O-Net中的训练损失为0,因为它没有包含人脸区域,通过参数beta=0来表示这种类型。总的训练损失可以表示如下:
MTCNN实时人脸检测网络详解与opencv+tensorflow代码演示
在P-Net中对人脸进行二元分类时候就可以在线进行难样本挖掘,在网络前向传播时候对每个样本计算得到的损失进行排序(从高到低)然后选择70%进行反向传播,原因在于好的样本对网络的性能提升有限,只有那些难样本才能更加有效训练,进行反向传播之后才会更好的提升整个网络的人脸检测准确率。作者的对比实验数据表明这样做可以有效提升准确率。在训练阶段数据被分为四种类型:

负样本:并交比小于0.3
正样本:并交比大于0.65
部分脸:并交比在0.4~0.65之间
Landmark脸:能够找到五个landmark位置的

其中在负样本与部分脸之间并没有明显的差异鸿沟,作者选择0.3与0.4作为区间。

正负样本被用来实现人脸分类任务训练
正样本与部分脸样本训练BB回归
Landmark脸用来训练人脸五个点位置定位

整个训练数的比例如下:
负样本:正样本:部分脸:landmark脸=3:1:1:2

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MTCNN是一种基于深度学习的人脸检测算法,它主要包含三个子网络:P-Net、R-Net和O-Net。这些子网络分别用于检测人脸的候选框、对候选框进行进一步筛选和回归以及进行人脸关键点的定位。 训练过程主要分为以下几个步骤: 1. 数据准备:首先需要准备标注好的人脸数据集,并将其划分为训练集、验证集和测试集。同时,还需要对数据进行预处理,如归一化、随机裁剪等。 2. P-Net训练:使用标注好的人脸数据集训练P-Net网络。P-Net网络的主要作用是生成候选框,并对其进行初步筛选。在训练过程中,需要定义损失函数,如二分类交叉熵损失函数和边框回归损失函数,并进行反向传播更新网络参数。 3. R-Net训练:使用P-Net生成的候选框和标注好的人脸数据集训练R-Net网络。R-Net网络的主要作用是对候选框进行进一步的筛选和回归,以提高人脸检测的准确性。在训练过程中,同样需要定义损失函数,并进行反向传播更新网络参数。 4. O-Net训练:使用R-Net生成的候选框和标注好的人脸数据集训练O-Net网络。O-Net网络的主要作用是进行人脸关键点的定位。在训练过程中,同样需要定义损失函数,并进行反向传播更新网络参数。 5. 模型测试:使用训练好的MTCNN模型对测试集进行测试,评估其人脸检测的准确率和速度。 总的来说,MTCNN的训练过程主要是通过反向传播算法不断调整网络参数,使得网络能够准确地检测人脸,并同时具备较高的速度。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值