人脸检测——DDFD

本文介绍了基于深度学习的人脸检测方法,通过构建深度学习训练数据集,包括正负样本的制作,然后训练了多种深度人脸分类器,如ImageNet、Cifar10和自定义的SlipW网络。在应用分类器进行人脸检测时,采用NMS-多窗口融合策略,以提高检测效果。文章提供了完整的源代码和训练数据。
摘要由CSDN通过智能技术生成

本文所介绍的人脸检测,主要学习和实现了ICMR-2015年雅虎实验室的文章”Multi-view Face Detection Using Deep Convolutional Neural Networks”.这是我接触和实现的第一个深度学习案例,本文除了讲解该文的算法以外,也是对我近2个月工作的总结.

学习还不够深入,有不足之处欢迎大家提出指正。

  • 此外,本文在讲解的过程中会包含全部的源代码以及训练数据。

目录


1- 构建深度学习训练数据集

AFLW原始数据集:[百度云链接——链接:http://pan.baidu.com/s/1czZXme 密码:rw3g)

尺寸归一化为224×224的正负训练样本:百度云链接——密码:zf98

深度学习需要大量的数据,否则根本无法发挥出深度神经网络的优势。雅虎的文章中为了训练一个性能优异的人脸分类器,制作了超过20W的正样本(人脸)和超过2000W的负样本(非人脸)。此外,为了有效解决遮挡、不同角度、光照的人脸检测,文章还强调训练样本中应包含大量这类的样本。这就需要应用一些特殊Data Augmentation方法,一方面扩充训练样本,另一方面改善样本的分布(即增加那些存在遮挡、倾斜、偏转等的人脸样本)。通常,我们可以采用随机平移、翻转、随机旋转、泛红泛绿等操作来完成上述扩充,但是需要注意人为的添加一些遮挡或者噪声通常是不可取的,因为深度网络很有可能学习到这些人为的“操作”。

1-1 制作训练正样本

我和原文一样,使用了AFLW数据集作为正负样本的来源。AFLW数据集中有大概2.1W张图片(基本都是高清的图片),其中标记了大概2.4W个人脸的矩形框、3维旋转角度、是否遮挡、是否戴眼镜等信息。因此,生成正样本时,我的主要操作就是将原有的矩形框进行随机的平移和旋转,如果操作之后的矩形框和原来矩形框相交面积比(IOU)大于某个阈值(如,我使用了0.64),那么就可以认为经过“采样”得到了一个新的正样本。如果原矩形框下的人脸是存在遮挡或者戴眼镜或者低头仰头的,那么“采样”的次数就会加倍。

  • 关于正样本IOU阈值,原文设定的是0.5,我觉得这不是一个很好的数值。首先,AFLW数据集中标定的矩形框也不是特别准确,如果IOU太小,很容易生成较多的弱正样本,一方面这将增加未来训练分类器的难度,另一方面实际检测的时候也会在目标周围生成许多影响我们判断的矩形框(这一点后面会再次说明)。但是,IOU阈值过大也不好,因为这将降低未来我们对缺失人脸(部分人脸)的检测率。

1-2 制作训练负样本

制作负样本时,我设定了一个新的IOU阈值为0.1,然后对整个图像进行滑动窗口,如果窗口与原人脸矩形框的相交面积比小于0.1,就认为该窗口为负样本。窗口大小和滑动步长是根据图片大小来确定的,平均下来一张图片会滑动产生200个窗口,最终被认定为负样本的大概有120左右。

  • 需要特别说明的是,AFLW数据集中存在这样的问题:一张图片中有多个人,但只标注了少数几个明显的目标;背景存在密集人群。这将导致我们滑动窗口产生的负样本中包含一些“正样本”。因此,对于负样本我们需要人工审核一遍来剔除那些“异常”。(因为我是一个人,而且还在上课,这部分剔除工作就花费了我半个月之多 T_T)

最终,我获得了352240的正样本和1600128的负样本(负样本本来有200W+,但我没有时间全部校验一遍了)。下面看几个正负样本的例子。
678x

2- 训练一个深度人脸分类器

训练一个深度人脸分类器,也就是利用深度卷积神经网络训练一个图片二分类器,该分类器可以将输入图片分类为人脸或者非人脸。考虑到人脸检测的召回率和准确率以及时间花费,下面我尝试了多种网络结构。

2-1 ImageNet或者AlexNet网络

原文作者是在AlexNet上进行finetune的。AlexNet的输入图片尺寸是227×227,ImageNet的输入图片尺寸是224×224,二者的结构类似。以ImageNet网络为例,该网络共有8层,包含5个卷积层和3个全连接层(某些层后面还跟有pooling层和LRN层)。整个网络下来,有大概60millon 个参数,65W个神经元,其caffemodel大概有220M之大。

下面说一下,实际使用ImageNet模型做人脸和非人脸分类的感受:

  • 模型太大,我实际用的caffemodel大概有225M大小,这也就导致运行模型时需要很大的系统内存,同时也导致时间花费增大。我用笔记本4G内存,跑这个模型基本无望。
  • 输入图片尺寸太大,ImageNet要求输入224×224大小的图片,这也就意味着如果你需要检测到最小40×40左右大小的人脸时,你必须首先将你的图片放大至少5倍。这将带来更大的内存消耗和时间花费。

2-2 Cifar10网络

这里尝试了Cifar10-quick网络结构,该网络输入图片尺寸为32×32,包含3个卷积层和2个全连

  • 23
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 180
    评论
评论 180
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值