采用数据集:
人脸检测和人脸框回归:WIDER_FACE
特征点标定:Celeba
P-net:
P-net的任务是人脸检测和人脸框回归,所以该阶段仅需要使用WIDER FACE数据集。为什么没带特征点标定任务?P-net输入12*12的图像,图像太小,不适合做特征点标定,我个人理解是loss函数根据人脸带不带关键点来训练的;其实widerface和celeb都是用了,第一阶段到第三阶段都使用;
(1)取候选窗,生成训练图片
下载的原始数据集并不能直接用于训练,而是在原始图像上截取候选框图像。随机截取候选框,根据IoU计算候选框所属类别,并将其resize到12*12大小,将resize后的候选框图像保存到对应的类别文件夹下。每个类别生成一个txt文档,存放图片路径以及对应的候选框位置信息。
根据IoU计算选择的候选框是属于negative(IoU<0.3)、positive(IoU>0.65)、part(0.4<IoU<0.65),三者的比例为3:1:1。其中positive和negative用于人脸检测,positive和part用于人脸框回归。
(2)生成imdb,训练数据
使用positive和negative类别中的图像生成人脸检测所需的数据cls.imdb
使用positive和part类别中的图像生成人脸框回归所需的数据roi.imdb
(3)构建网络和solver,开始训练
(4)使用生成的训练模型,生成难例样本,继续训练下一阶段的网络;都是微调网络;
P-net网络中是没有fc层的,不需要固定大小,R-net和O-net都是有fc层的,训练的输入必须的固定的;
测试时候:
1:做不同的Scale,先第一阶段和第二阶段的输出推荐窗口,只是分类和框的回归;在第三阶段之后才开始输出定位的结果;