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)以非人脸图片集为输入,组合强分类器为临时的级联分类器,筛选并补充非人脸样本。
训练样本的选择: 训练样本要求是面部特写图像,图1是一簇训练样本,大小被归一化为24×24像素,其中正训练样本要求是面部特写图像,但是人脸形态千差万别,所以训练样本选取过程中要考虑到样本的多样性。负训练样本,大小被归一化为24×24像素,其中各样本不完全相同,分别具有一定的代表性。
图1 部分训练正样本集和训练负样本集
训练过程分为3个步骤:首先需要提取Haar特征;然后将Haar特征转化成对应的弱分类器;最后从大量的弱分类器中迭代选择出最优弱分类器。 (1)提取Haar特征
图2 常用的四种Haar特征
常用的Haar特征有4种,如图2所示。当然也可以在这4种特征的基础上设计出更多、更复杂的特征。以大小为24X24像素的训练样本为例,上述4种特征的总个数超过了160000个。这样庞大的数字给后续的迭代训练工作带来了庞大的计算量,直接导致AdaBoost算法训练过程极为费时,这恰恰是算法需要改进的关键问题之一o
(2)生成弱分类器 每一个Haar特征都对应着一个弱分类器,每一个弱分类器都是根据它所对应的Haar特征的参数来定义的。利用上述Haar特征的位置信息,对训练样本进行统计就可以得到对应的特征参数。AdaBoost算法中所训练的弱分类器是任何分类器,包括决策树,神经网络,隐马尔科夫模型,如果弱分类器是线性神经网络,那么AdaBoost算法每次将构造多层感知器的一个节点。
(3)采用AdaBoost算法选取优化的弱分类器 AdaBoost算法训练过程就是挑选最优弱分类器,并赋予权重过程,图3是AdaBoost算法训练示意图。
图3 AdaBoost算法训练示意图
转载于:https://www.cnblogs.com/PierreDelatour/archive/2011/11/12/2246643.html
相关资源:JAVA上百实例源码以及开源项目