首页 > 代码库 > 《A Convolutional Neural Network Cascade for Face Detection》

《A Convolutional Neural Network Cascade for Face Detection》

文章链接:   http://pan.baidu.com/s/1bQBJMQ  密码:4772

作者在这里提出了基于神经网络的Cascade方法,Cascade最早可追溯到Haar Feature提取时用到的Adaboost算法(参考这个博客:http://blog.csdn.net/zouxy09/article/details/7922923),作者在这里将它和神经网络结合到了一起,可谓创新。

关键字:Cascade;Calibration;

为了提高图片的测试速度,作者在这里使用了Cascade,级联了6个CNN,结构如下:

技术分享

这六个CNN共分为两类,一类网络(12-net,24...)(它们是2分类)去分类,同时产生候选框;一类网络(12-Calibration-net,24...)(它们是45分类)是对候选框进行位置矫正,它们的结构如下:

技术分享

技术分享

大致分析一下它的流程:(个人见解,可能有的地方有错误,非常欢迎指正~)

训练阶段:

作者先从AFLW数据集中的图片中进行裁剪获得人脸图片作为正样本,再从背景中裁剪获得负样本;

将正样本resized为12*12的大小,输入到12-net中进行训练;

将每一个正样本进行scale、x轴、y轴变换(共45种变换),生成45张图片,再贴上标配,输入到12-Calibration-net中进行训练,变换参数见下:

技术分享

之后24、48网络的训练同理;

测试阶段:

输入测试图片,先对它进行scale变换,形成图像金字塔,再将金字塔中的每一张图片输入到级联网络中;

先进入12-net中,利用sliding-Window,获得特征图,设定一个阀值,一方面进行分类,一方面获得大于阀值的候选框;

将12-net的输出中大于阀值但是类别为非人脸的作为12-Calibration-net的负样本,大于阀值同时类别为人脸的作为12-Calibration-net的正样本,(注意这时候后面的网络便已经与原输入图片无关了)

 这些候选框经过12-Calibration-net后每一个都输出45个得分,在经过下面的操作,获得最终变换的参数,即可获得调整后的框位置:

技术分享

接着再将12-Calibration-net的输出先resized为24*24,再送到24-net的输入中,再进行分类,又剔除了一部分,接着再向后面的网络传输。。。

使用这种Cascade方法的好处就是:

(1)由于将一个大网络分解成多个小网络进行训练,训练难度减小,所需要的训练集也减小;

(2)虽然训练时数据准备较花时间,但由于分解成了小网络,计算复杂度降低,测试时间缩短,可以实现实时监测;

《A Convolutional Neural Network Cascade for Face Detection》