个⼈⽐较看好MTCNN的,最起码把检测和定位做到⼀起,并且做的还不错;也算是不错的尝试;
MTCNN主要包括三个部分,PNet,RNet,ONet
其中PNet在训练阶段的输⼊尺⼨为12*12,RNet的输⼊尺⼨为24*24, ONet的输⼊尺⼨为48*48. PNet⽹络参数最
⼩,ceffemodel仅有28.2KB, 所以速度最快.RNet的⽹络参数次之,caffemodel⼤⼩为407.9KB, ONet的caffemodel⼤⼩
为1.6M,三个⽹络合起来不到2M.
测试阶段⼤概过程
⾸先图像经过⾦字塔,⽣成多个尺度的图像,然后输⼊PNet, PNet由于尺⼨很⼩,所以可以很快的选出候选区域,但是准确率不⾼,不同尺度上的判断出来的⼈脸检测框,然后采⽤NMS算法,合并候选框,然后根据候选框提取图像,之后缩放到24*24的⼤⼩,作为RNet的输⼊,RNet可以精确的选取边框,⼀般最后只剩⼏个边框,最后缩放到48*48的⼤⼩,输⼊ONet,判断后选框是不是⼈脸,ONet虽然速度较 慢,但是由于经过前两个⽹络,已经得到了⾼概率的边框,所以输⼊ONet的图像较少,然后ONet输出精确的边框和关键点信息,只是在第三个阶段上才显⽰⼈脸特征定位;前两个阶段只是分类,不显⽰⼈脸定点的结果。 论⽂中作者主要使⽤了Wider_face 和CelebA数据库,其中Wider_face主要⽤于检测任务的训练,CelebA主要⽤于关键点的训练.训练集分为四种:负样本,正样本,部分样本,关键点样本. 三个样本的⽐例为3: 1: 1: 2 训练主要包括三个任务
⼈脸分类任务:利⽤正样本和负样本进⾏训练
⼈脸边框回归任务:利⽤正样本和部分样本进⾏训练xlr连接器
关键点检测任务:利⽤关键点样本进⾏训练
训练数据整理:
Wider_face包含⼈脸边框标注数据,⼤概⼈脸在20万,CelebA包含边框标注数据和5个点的关键点信息.对于三个⽹络,提取过程类似,但是图像尺⼨不同.
双向呼叫
第⼀阶段:使⽤widerface的数据框和celebA的数据裁剪出来正负样本和特征点的位置,根据loss来回归⼈脸框;输⼊⽹络中⼈脸⼤⼩都是12*12的⼤⼩的⼈脸;阈值较⼩
第⼆阶段阶段:使⽤widerface的数据框和celebA的数据裁剪出来正负样本和特征点的位置,根据loss来回归⼈脸框;输⼊⽹络中⼈脸⼤⼩都是24*24的⼤⼩的⼈脸;⽤第⼀阶段⽣成的模型⽣成后选框,之后把后选框缩放到24*24⼤⼩,之后送⼊到⽹络中使⽤;使⽤的widerface和celebA的数据集,阈值较⼩
第三阶段阶段:输⼊⽹络中⼈脸⼤⼩都是48*48的⼤⼩的⼈脸;⽤第⼆阶段⽣成的模型⽣成后选框,之后把后选框缩放到
48*48⼤⼩,之后送⼊到⽹络中使⽤;使⽤的widerface和celebA的数据集,使⽤widerface的数据框和celebA的数据裁剪出来正负样本和特征点的位置,根据loss来回归⼈脸框,阈值较⼤
其实后⼀个阶段实在前⼀个阶段上训练的模型,微调模型,让检测效果更好;
正负样本,部分样本提取:杏蜜
披肩按摩器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不同.所有在整理数据中,对于每个图⽚进⾏了15个label的标注信息,不同阶段的loss的权重是不同的;
1. 第1列:为正负样本标志,1正样本,0负样本,2部分样本,3关键点信息尼龙螺杆
2. 第2-5列:为边框偏移,为float类型,对于⽆边框信息的数据,全部置为-1
3. 第6-15列:为关键点偏移,为float类型,对于⽆边框信息的数据,全部置为-1
4. 不同阶段的判断不同,根据选择是否使⽤分类的loss,回归框的loss,还是关键点的loss;
修改softmax_loss_layer.cpp 增加判断,只对于1, 0计算loss值,修改euclidean_loss_layer.cpp 增加判断,对于置为-1的不进⾏loss计算
困难样本选择
论⽂中作者对与⼈脸分类任务,采⽤了在线困难样本选择,实现过程如下:
修改softmax_loss_layer.cpp,根据计算出的loss值,进⾏排序,只对于70%的值较低的数据,进⾏反向传播.