级联分类器概述

来源:互联网 发布:神枪手交易软件 编辑:程序博客网 时间:2024/05/29 01:53

积分图
1.首先介绍下 haar-like feature
使用提取特征而不是直接使用像素值有两方面原因:

The most common reason is that features can act to encode ad-hoc domain knowledge that is difficult to learning using a finite quantity of training data.

For this system there is also a second critical motivation for features: the feature based system operates much faster than a pixel-based system.

Haar-like feature是由等面积的正负矩形区域生成的算子,该论文给出了3种Haar-like feature 算子,如下图所示:

enter description here

Haarlike.JPG

其中A,B分别表示的是水平方向和竖直方向上的梯度,C包含了3个矩形区域,D计算的是对角方向上的梯度。对于不同尺度的算子可以得到不同尺度下的特征。该论文中在(24,24)的图像区域内提取了超过18万个特征,虽然没说算子怎么构造的。

后来的学者设计了更多更复杂的Haar-like featurs:

enter description here

haarlikefeature.JPG

haar-like 特征的haar来源于haar基函数,如下图:

enter description here

HaarFunction.jpg

haar特征就类似二维情形下的haar基函数。

  1. 积分图

积分图可以借助于二维积分很容易理解,我们的被积函数是图像的灰度值,定义域是图像区域,那么可以以积分的方式计算从原点到任意点形成的矩形区域内的像素和。

例如区间的概率值可以直接使用分布函数得到:, Haar-like特征算子的区域也是矩形区域,所以在计算haar-like特征时可以使用积分图快速的计算。

对于论文中提到的三种特征算子,我们假设从左上角坐标开始坐标索引值依次增大,那么对于A类特征值可如下计算:

其中是积分表

two-rectangle 特征需要6次查表,如上式, three-rectangle 特征需要8次查表, four-rectangle特征需要9次查表。


基于AdaBoost的特征选择

实际应用中,对分类产生较大影响的往往只有少数的特征,比如传统的主成分分析方法(PCA)就是用来寻找这些对分类影响较大的特征,而论文中提取了180000多的特征,远远过完备(180000>>24*24),所以选择主要的特征是必要的。文中使用adaboost中的弱分类器实现特征的选择,在设计弱分类器时,仅考虑一维特征,选择误差最小的那个分类器作为该轮迭代产生的弱分类器,而对应的维度就是该轮迭代选择出的特征。其过程如下表:

enter description here



级联分类器

文中给出了一种比传统的AdaBoost分类器更快的分类方法,即级联分类器。该分类器由若干个简单的AdaBoost分类器串接得来。假设AdaBoost分类器要实现99%的正确率,1%的误检率需要200维特征,而实现具有99.9%正确率和50%的误检率的AdaBoost分类器仅需要10维特征,那么通过级联,假设10级级联,最终得到的正确率和误检率分别为:

可以看到通过级联adaboost分类器们能够使用较少的特征和较简单的分类器更快更好的实现分类。

另外在检测的过程中,因为TPR较高,所以一旦检测到某区域不是目标就可以直接停止后续检测。由于在人脸检测应用中非人脸区域占大部分,这样大部分检测窗口都能够很快停止,是分类速度得到很大的提高。

级联分类器的训练过程

1. 预先选定每一层的最大可接受误检率fpr(maximum acceptable rate of fpr) 和每一层最小可接受的检测率(minimum acceptable detection rate)

2. 设定系统整体的可接受误检率

3. 初始化. FPR=1, TPR = 1(检测率)

4.循环. 如果当前,添加一层adaboost分类器,如果该分类器训练过程中没有达到该层最大误检率就继续添加新特征,添加新特征时降低阈值,使分类器的检测率大于给定值,然后更新

5.每一级分类器使用的训练集是上一级分类器判定正确的样本,而其中的错分的被当作负样本。这使得下一级的分类器更关注那些更难区分的样本。

cascade detector 示意图


级联discrete adaboost几点说明

1.样本归一化:

(1)尺寸归一化:图片的宽高按相等或近似相等的比例进行缩放,避免图像发生形变

(2)像素归一化:有文献简单用255来归一化,还有文献使用样本图像的方差均值来归一化。推荐使用后者,避免光照影响,但别忘了考虑方差非常小接近零的情况。

2.最佳弱分类器选取:

    弱分类器就是一种特征加上一个阈值,最佳弱分类器的选取最主要的工作是确定每个特征的最佳阈值。这部分工作adaboost最耗时的步骤,为加速adaboost,关键从此处入手。目前所使用的是排序的方法,对于一个特征只需遍历一遍所有样本对应的值,便能够确定该特征对应的最佳阈值。

3. 级联中每一级的强分类器相关参数设定
    如果是级联的话,就要规定每一级的强分类器的识别率和误识别率了,至于规定这个值具体多少就没有什么严格的规定了,级数也没规定,但级数越多,检测速度就随之下降了。由一级到最后一级检测率曾下降趋势,且前几级要大一些例如第一级会被设置成0.999,误识别率上升,最后一级一定要比较小,如0.001。按这样的规则设定就可以了。

3.强分类器阈值如何计算

    一个强分类器由若干弱分类器组成,每个弱分类器有一个阈值,一个权值(与错误率相关)和一个不等号方向标志。

    强分类器的阈值如何由这些弱分类器确定?如果仅是要训练一个强分类器,并规定组成其弱分类器的个数,便无需确定一个阈值,只需将一个样本通过各个若分类器权值打分,分数求和大于0.5就ok了。
    如果要训练一个规定识别率和误识别率的强分类器,便要计算出一个阈值了。这个阈值的算法有文献说是将所有训练样本通过该强分类器,会得出不同的分数,将这些分数分别作为阈值计算出相应的误识别率和识别率,当误识别率和识别率达到设定的值时,便将对应的分数当做该强分类器的阈值。这样做可能速度上有些慢,尤其当样本较多时,其实许多样本对应的值是相等或是近似相等的。这样看来,我们可以设定一个足够小的步长在0-sum(权值)之间遍历找到满足设定误识别率和识别率的阈值。



0 0
原创粉丝点击