MTCNN训练整理

MTCNN主要包括三个部分,PNet,RNet,ONet

其中PNet在训练阶段的输入尺寸为12*12,RNet的输入尺寸为24*24, ONet的输入尺寸为48*48.  PNet网络参数最小,ceffemodel仅有28.2KB, 所以速度最快.RNet的网络参数次之,caffemodel大小为407.9KB, ONetcaffemodel大小为1.6M,三个网络合起来不到2M.

 

测试阶段大概过程

首先图像经过金字塔,生成多个尺度的图像,然后输入PNet, PNet由于尺寸很小,所以可以很快的选出候选区域,但是准确率不高,然后采用NMS算法,合并候选框,然后根据候选框提取图像,作为RNet的输入,RNet可以精确的选取边框,一般最后只剩几个边框,最后输入ONet,ONet虽然速度较慢,但是由于经过前两个网络,已经得到了高概率的边框,所以输入ONet的图像较少,然后ONet输出精确的边框和关键点信息.

 

训练数据库

论文中作者主要使用了Wider_face CelebA数据库,其中Wider_face主要用于检测任务的训练,CelebA主要用于关键点的训练.训练集分为四种:负样本,正样本 ,部分样本,关键点样本三个样本的比例为3: 1: 1: 2

 

训练主要包括三个任务

人脸分类任务:利用正样本和负样本进行训练

人脸边框回归任务:利用正样本和部分样本进行训练

关键点检测任务:利用关键点样本进行训练

 

训练数据整理:

Wider_face包含人脸边框标注数据,大概人脸在20,CelebA包含边框标注数据和5个点的关键点信息.对于三个网络,提取过程类似,但是图像尺寸不同.

正负样本,部分样本提取

1.从Wider_face随机选出边框,然后和标注数据计算IOU,如果大于0.65,则为正样本,大于0.4小于0.65为部分样本,小于0.4为负样本.

2.计算边框偏移.对于边框,(x1,y1)为左上角坐标,(x2,y2)为右下角坐标,新剪裁的边框坐标为(xn1,yn1),(xn2,yn2),width,height.则offset_x1 = (x1 - xn1)/width,同上,计算另三个点的坐标偏移.

3.对于正样本,部分样本均有边框信息,而对于负样本不需要边框信息

关键点样本提取

1.从celeba中提取,可以根据标注的边框,在满足正样本的要求下,随机裁剪出图片,然后调整关键点的坐标.

loss修改

由于训练过程中需要同时计算3个loss,但是对于不同的任务,每个任务需要的loss不同.

所有在整理数据中,对于每个图片进行了15label的标注信息

1.1列:为正负样本标志,1正样本,0负样本,2部分样本,3关键点信息

2.2-5列:为边框偏移,为float类型,对于无边框信息的数据,全部置为-1

3.6-15列:为关键点偏移,为floagt类型,对于无边框信息的数据,全部置为-1

修改softmax_loss_layer.cpp 增加判断,只对于1,0计算loss

修改euclidean_loss_layer.cpp 增加判断,对于置为-1的不进行loss计算

困难样本选择

论文中作者对与人脸分类任务,采用了在线困难样本选择,实现过程如下:

修改softmax_loss_layer.cpp,根据计算出的loss值,进行排序,只对于70%的值较低的数据,

进行反向传播.

阅读更多
个人分类: 深度学习
上一篇一些功能的layer:
下一篇Ubuntu中sudo apt-get update很慢解决办法
想对作者说点什么? 我来说一句

MTCNN_face_detection_alignment.zip

2016年10月13日 1.9MB 下载

没有更多推荐了,返回首页

关闭
关闭