天天看点

人脸检测--AdaBoost

对人脸检测的研究最初可以追溯到 20 世纪 70 年代,早期的研究主要致力于模板匹配、子空间方法,变形模板匹配等。近期人脸检测的研究主要集中在基于数据驱动的学习方法,如统计模型方法,神经网络学习方法,统计知识理论和支持向量机方法,基于马尔可夫随机域的方法,以及基于肤色的人脸检测。目前在实际中应用的人脸检测方法多为基于 Adaboost 学习算法的方法。

     Viola人脸检测方法是一种基于积分图、 级联检测器和AdaBoost 算法的方法,方法框架可以分为以下三大部分:

     第一部分,使用Harr-like特征表示人脸,使用“ 积分图”实现特征数值的快速计算;

     第二部分, 使用Adaboost算法挑选出一些最能代表人脸的矩形特征( 弱分类器),按照加权投票的方式将弱分类器构造为一个强分类器;

     第三部分, 将训练得到的若干强分类器串联组成一个级联结构的层叠分类器,级联结构能有效地提高分类器的检测速度。

    Adaboost 算法是一种用来分类的方法,它的基本原理就是“三个臭皮匠,顶个诸葛亮”。它把一些比较弱的分类方法合在一起,组合出新的很强的分类方法。

    例如下图中

人脸检测--AdaBoost

    需要用一些线段把红色的球与深蓝色的球分开,然而如果仅仅画一条线的话,是分不开的。

人脸检测--AdaBoost
人脸检测--AdaBoost
人脸检测--AdaBoost
人脸检测--AdaBoost
a b c d

    使用Adaboost算法来进行划分的话,先画出一条错误率最小的线段如图 1 ,但是左下脚的深蓝色球被错误划分到红色区域,因此加重被错误球的权重,再下一次划分时,将更加考虑那些权重大的球,如 c 所示,最终得到了一个准确的划分,如下图所示。

人脸检测--AdaBoost

    人脸检测的目的就是从图片中找出所有包含人脸的子窗口,将人脸的子窗口与非人脸的子窗口分开。

大致步骤如下:

    (1)在一个 20*20 的图片提取一些简单的特征(称为Harr特征),如下图所示。

人脸检测--AdaBoost

    它的计算方法就是将白色区域内的像素和减去黑色区域,因此在人脸与非人脸图片的相同位置上,值的大小是不一样的,这些特征可以用来区分人脸和分人脸。

人脸检测--AdaBoost

    (2)目前的方法是使用数千张切割好的人脸图片,和上万张背景图片作为训练样本。训练图片一般归一化到 20*20 的大小。在这样大小的图片中,可供使用的 haar 特征数在 1 万个左右,然后通过机器学习算法 —adaboost 算法挑选数千个有效的 haar 特征来组成人脸检测器。

人脸检测--AdaBoost

    (3)学习算法训练出一个人脸检测器后,便可以在各个场合使用了。使用时,将图像按比例依次缩放,然后在缩放后的图片的 20*20 的子窗口依次判别是人脸还是非人脸。

人脸检测--AdaBoost

人脸检测的流程

    人脸检测在实际中主要用于人脸识别的预处理,即在图像中准确标定出人脸的位置和大小。

    目前人脸检测技术在门禁系统、智能监控系统中已得到了很好的应用。另外,目前的笔记本电脑中也陆续开始使用人脸识别技术作为计算机登录的凭证。近年来,在数码相机和手机中也集成了人脸检测算法,作为一个新的功能提供用户使用。在这些应用中,人脸检测都是发挥着至关重要的作用

          每个Haar特征对应看一个弱分类器,但并不是任伺一个Haar特征都能较好的描述人脸灰度分布的某一特点,如何从大量的Haar特征中挑选出最优的Haar特征并制作成分类器用于人脸检测,这是AdaBoost算法训练过程所要解决的关键问题。

    Paul Viola和Michael Jones于2001年将Adaboost算法应用于人脸检测中,其基本思想是针对不同的训练集训练同一个分类器(弱分类器),然后把这些不同训练集上的得到的分类器联合起来,构成一个最终的强分类器。Adaboost 算法中不同的训练集是通过调整每个样本对应的权重来实现的。开始时,每个样本对应的权重是相同的,对于h1 分类错误的样本,加大其对应的权重; 而对于分类正确的样本, 降低其权重, 这样分错的样本就被突出出来,从而得到一个新的样本分布 U2 。在新的样本分布下,再次对弱分类器进行训练,得到弱分类器 h2 。依次类推,经过 T 次循环,得到 T 个弱分类器,把这 T 个弱分类器按一定的权重叠加(boost)起来,得到最终想要的强分类器。

     训练系统总体框架,由“ 训练部分”和 “ 补充部分”构成。依据系统框架,本文的训练系统可分为以下几个模块:

     (1)以样本集为输入,在给定的矩形特征原型下,计算并获得矩形特征集;

     (2)以特征集为输入,根据给定的弱学习算法,确定闽值,将特征与弱分类器一一对应,获得弱分类器集;

     (3)以弱分类器集为输入, 在训练检出率和误判率限制下, 使用A d a B o o s t 算法

挑选最优的弱分类器构成强分类器;

     (4)以强分类器集为输入,将其组合为级联分类器;

     (5)以非人脸图片集为输入,组合强分类器为临时的级联分类器,筛选并补充

非人脸样本。

人脸检测--AdaBoost

    训练样本的选择:

    训练样本要求是面部特写图像,图1是一簇训练样本,大小被归一化为24×24像素,其中正训练样本要求是面部特写图像,但是人脸形态千差万别,所以训练样本选取过程中要考虑到样本的多样性。负训练样本,大小被归一化为24×24像素,其中各样本不完全相同,分别具有一定的代表性。

人脸检测--AdaBoost

              图1 部分训练正样本集和训练负样本集

    训练过程分为3个步骤:首先需要提取Haar特征;然后将Haar特征转化成对应的弱分类器;最后从大量的弱分类器中迭代选择出最优弱分类器。

    (1)提取Haar特征

人脸检测--AdaBoost

                    图2 常用的四种Haar特征

    常用的Haar特征有4种,如图2所示。当然也可以在这4种特征的基础上设计出更多、更复杂的特征。以大小为24X24像素的训练样本为例,上述4种特征的总个数超过了160000个。这样庞大的数字给后续的迭代训练工作带来了庞大的计算量,直接导致AdaBoost算法训练过程极为费时,这恰恰是算法需要改进的关键问题之一o

    (2)生成弱分类器

    每一个Haar特征都对应着一个弱分类器,每一个弱分类器都是根据它所对应的Haar特征的参数来定义的。利用上述Haar特征的位置信息,对训练样本进行统计就可以得到对应的特征参数。AdaBoost算法中所训练的弱分类器是任何分类器,包括决策树,神经网络,隐马尔科夫模型,如果弱分类器是线性神经网络,那么AdaBoost算法每次将构造多层感知器的一个节点。

    (3)采用AdaBoost算法选取优化的弱分类器

    AdaBoost算法训练过程就是挑选最优弱分类器,并赋予权重过程,图3是AdaBoost算法训练示意图。

人脸检测--AdaBoost

                            图3  AdaBoost算法训练示意图

继续阅读