MTCNN总结

MTCNN:

  1. 一种新的级联CNNs框架,用于联合人脸检测和对齐
  2. 提出了一种有效的方法来进行在线困难样本挖掘,以提高性能

     该算法训练数据来源于wider和celeba两个公开的数据库,wider提供人脸检测数据,在图上标注了人脸框groundtruth的坐标信息,celeba提供了5个landmark点的数据。

1、数据来源

人脸数据集widerface,仅提供了大量的人脸边框定位数据,在注解文件wider_origin_anno.txt格式如下 :

0--Parade/0_Parade_marchingband_1_849.jpg 448 329 570 478 
0--Parade/0_Parade_marchingband_1_117.jpg 68 359 118 394 226 382 282 425 295 304 339 330 353 279 393 315 884 377 947 418 818 390 853 434 727 341 764 372 598 246 631 275 740 308 785 341 

   每四个数字代表该图片中的一个人脸边框定位数据x1, y1, x2, y2(x_left, y_top, x_right, y_bottom),第一张照片有只一个人脸,第二张照片有9个人脸。

    celeba(səˈleb)人脸关键点检测的训练数据,该数据集包含5,590张 LFW数据集的图片和7,876张从网站下载的图片。

    trainImageList.txt存放的是每个图片中的人脸框坐标和对应的五个特征点坐标,因此我们知道一个完整的人脸有14个参数(2个角点坐标,5个特征点坐标)。例如:

                         

2、生成训练数据

生成样本数据分为4步:

  1. 从widerface中生成 负样本,正样本,part样本,比例控制为3:1:1,这些样本用于训练PNet网络;
  2. 从celeba中生成landmark样本,这些样本用于训练PNet,RNet,ONet;
  3. 将原始数据wider的图像送入训练好的PNet模型中,根据检测结果与实际人脸框的IOU,将检测结果划分为负样本,正样本,part样本,用于PNet训练;
  4. 将原始数据wider的图像送入训练好的RNet模型中,将检测结果划分为负样本,正样本,part样本,用于ONet训练;
  • 负样本:滑动窗口和Ground True的IOU小于0.3;
  • 正样本:滑动窗口和Ground True的IOU大于0.65;
  • 中间样本:滑动窗口和Ground True的IOU大于0.4小于0.65;
  • 关键点:包含5个关键点坐标的;

    在生成样本数据时,我们需要使用数据扩充技术:随机抠取、噪声干扰、镜像、旋转,有效提高模型的鲁棒性,泛化能力。具体操作如下:

3、模型训练

  1. 采用PReLU激活函数
  2. 困难样本挖掘,以提高性能:每次只后向传播前70%样本的梯度
  3. 多源训练

人脸分类

对于每一个输入样本采用交叉熵损失函数:

                 

   上述公式中的表示是人脸的概率,在这一步中损失函数的计算,我们只用到正样本和负样本

边框回归

   对于每一个候选框,需要计算预测偏移量和真实坐标偏移量之间的损失。对于每一个样本通过欧式距离进行回归,在这一步中损失函数的计算,我们只用到正样本和part样本:

                                        

    上式为通过欧氏距离计算的回归损失。其中,\hat y为通过网络预测得到偏移量,y为实际的真实坐标的偏移量。y为一个(offset_x1,offset_y1,offset_x2,offset_y2)组成的四元组,每一个box是一个4维向量。

   回归框偏移值计算:考虑到直接采用坐标信息进行回归框的预测,网络收敛比较慢。所以在回归框预测的时候一般采用回归框的坐标偏移进行预测,所以上面的y都是偏差量,而不是实际坐标。

训练样本生成时:生成滑动窗口样本后,对应滑动窗口样本和Guarant True Box的偏移值,即可算出来,如下所示:

offset_x1 = (gx1 - x1) / float(x2-x1)

这样生成滑动窗口的时候,对正样本及中间样本,同时保存相应的offset值,如下所示:

positive/0.jpg 1 0.02 -0.01 -0.20 -0.06
positive/1.jpg 1 0.08 0.04 -0.18 -0.06

特征坐标定位

    与候选框回归类似,计算候选特征坐标偏移量和真实坐标的偏移量的欧式距离,并最小化此距离;在这一步中损失函数的计算,我们只用到landmark样本

                      

   上述五点特征包括:左眼、右眼、鼻子、左边嘴角、右边嘴角。每个特征点均有两个偏移量组成,带尖的y为通过网络预测得到,不带尖的y为实际的特征点坐标与人脸框的偏移量,y是一个10维的向量。

多源训练

训练过程中,有人脸非人脸的照片,部分人脸区域。所以上述的三个损失函数可能有的没有必要使用。所以整体的损失函数如下:
                                         

     在P_Net和R_Net中设置 : 

    在O_net中设置:                 

    其中N是样本集大小,其中\alpha _j表示任务的优先级,\beta ^j_i∈{0,1}表示样本标签,表示上面三步的损失函数。在训练过程中,为了取得更好的效果,作者每次只后向传播前70%样本的梯度,这样来保证传递的都是有效的数字。有点类似latent SVM,只是作者在实现上更加体现了深度学习的端到端。 

4、PNet的全卷积网络

PNet过程:

   我们输入一张图,首先建立图像金字塔,假设我们得到n张图像,我们依次将每张图像送入PNet,这里就体现了全卷积网络的优点了:对输入图像的尺寸没有要求,这里我们举个实例进行说明:

      加入我们输入24*24*3的图像,经过一层3*3卷积,变成22*22*10的特征图,再经过2*2池化,变成11*11*16,再经过2层3*3的卷积层,变成7*7*32的特征图。这个特征图每个1*1*32对应原图像中一个12*12的框。

   不信我们可以从滑动窗的角度来解释,加入PNet是全连接,输入尺寸是12*12,南无为了检测24*24的图像,我们就要用滑动框在图像上滑动,stride=2(之所以是2,是为了跟maxpool=2相匹配),这样我们可以计算出,遍历整幅图像需要的滑动窗口数为:((24-12)/2)+1=7,所以我们要将49个12*12的滑动框送入PNet,得到49个1*1*32的结果,这不就和上面输出的结果一模一样了嘛!!!!

                                                            这也正是全卷积的优点所在!!

  接下来继续:我们得到7*7*32的特征图,对每个1*1*32的向量进行类别判断,我们得到49*2的判别结果,49对应图像上的49的滑动框,2对应每个框是人脸的概率,非人脸的概率。

    对于判断是人脸的框,进行边框偏移量预测,边框回归输出4个offset,那么我们就以当前这个滑动窗口的位置为基准,求回归矫正后的人脸边框。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值