首页 > 代码库 > 《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》