基于ACF多通道特征的人脸检测——从原理到实现

首先说明一下,这个项目并不是博主在实验室负责的项目,而是博主的一门两学分的课的大作业(张学工老师的模式识别基础,有兴趣的可以百度一下),所以并没有投入太多时间去弄,还有很多地方可以改进,后文会陆续提到,也会指明改进的方法。

然后博主只是个大三的学生,实现的一些不足还希望多包涵。

这个检测的程序主要是针对多人大图像的人脸检测(30-100人,1000*2000pixel以上),博主用一张1800*3600的图片在各个人脸检测的开源API上试了一下,检测率基本都是零,没错,是零。正常的API不会考虑如此大的图像和如此小的人脸,这正是这个作业所需要完成的工作。

先说几篇主要的参考文献:

(1) Efficient Non-Maximum Suppression,2006 ICPR.

    这篇论文主要的工作是提出了一种高效的非极大值抑制算法(NMS),本项目中,将利用此算法合并重复窗口(Bounding Box)。

(2) Histograms of Oriented Gradients for Human Detection, 2005,CVPR

    这篇论文的主要工作是提出了HoG特征,并将其用于行人检测(HoG+SVM),取得了很好的效果,引用量5000+。

(3) Aggregate Channel Features for Multi-view Face Detection,2014,IJCB

    这篇论文的主要工作时提出基于ACF(多通道)特征的人脸检测。这个团队在2015年发表了另一篇论文:A Convolutional Neural Network Combined with Aggregate Channel Feature for Face Detection,这篇是在14年的基础上加以改进的,在多个库上达到state-of-the-art。

(4) Fast Feature Pyramids for Object Detection,2014,PAMI

    这篇论文的主要工作是分析论证了不同尺度下特征的联系。大致思想是,已知这一个尺度上的各个特征,就可以大致估计出相邻尺度上的各个特征,
    这样就不必将每个尺度都计算一遍,因此可以很大程度地加速程序的运行。论文中提出了ACF特征和ICF特征,并加以分析和对比。

论文内容很多,在此就不一一详释了。主要说一下本项目的大体思路:

通过调研相关文献,得知在人脸检测方面最为著名、应用最为广泛的方法为VJ模型,其主要思想是通过Adaboost分类器结合Harr特征进行人脸检测。但是这种方法的检测效果、系统的稳定性、系统的效率等诸多方面并不能令人满意。

随着研究的深入,越来越多的方法被提出,目前最为成功的方法是通过卷积神经网络进行人脸检测,即CNN。但是卷积神经网络形式多样,需要通过大量的样本和实验来确定最佳的网络结构,出于对项目完成时间的考虑,采取了一种折中的办法:

参考14年的论文 Aggregate Channel Features for Multi-view Face Detection 加以实现。

实现的大致思路:

(1)训练:

    将正、负样本归一化到80*80(负样本是负样本原图像随机选取的80*80的区域)。提取ACF特征(RGB,梯度直方图(HSV),HoG(HSV),共10个通道),

    通过软级联Adaboost(深度为2的决策树,个数分别为32,128,512,2048)进行训练,得到训练模型。

(2)测试:

    对原图像进行尺度缩放/扩大,对每个80*80的区域(步长需设定)进行特征提取,通过训练得到的Adaboost模型进行分类。

(3)工作展望:

    在 A Convolutional Neural Network Combined with Aggregate Channel Feature for Face Detection 中,是将以上的结果作为CNN的输入,进行进一步的细分类,可以达到更好的效果。

理论上来讲这种实现的方法可以达到42FPS的速度,但是由于第四篇论文博主还没太搞清楚,代码也没来得及写,所以目前版本的速度很慢,好在老师并不要求运行时间(毕竟我们不是搞优化的=。=)。

代码比较多,这里给出一些比较关键的实现(以下省略的软级联Adaboost,而改用最基本的决策树Adaboost)。

    function featureImag = FaceDetectionImage(RGBoriginalImag)
% 获得原图像的相应十幅特征图
% 输入:原图像,RGB
% 输出:特征图像:m*n*10
% HSV+RGB+RGB
% color:HSV
% gradMag:RGB
% gradHist:RGB
%%
featureImag = zeros(floor(size(RGBoriginalImag, 1)/4), floor(size(RGBoriginalImag, 2)/4), 10, 'single');
% 颜色特征
%原始RGB图像
  • 12
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值