嵌入级联分类器
读"C. Huang, H. Ai, B. Wu, and S. Lao, 'Boosting Nested Cascade Detector for Multi-View Face Detection',ICPR, 2004,Vol II:415-418"笔记
论文主要贡献点
提出一种基于Haar 特征查找表的弱分类器,并使用Real Adaboost学习出一种强分类器。
提出一种嵌套级联分类器(nested cascade detector),该分类器能够更好更快的提升分类性能。通过nested weak classifier 的引入,极大的减少的特征的个数。
Real Adaboost讨论
其实这篇论文并没有对Real Adaboost算法进行改进,只是把cascade detector中的分类器设计AdaBoost替换成了Real AdaBoost的方法。
这方面的主要贡献点,我认为体现在,文章从巴氏距离(Bhattacharyya Distance)的角度解释了Real AdaBoost过程中特征选择的原因。
我们已经介绍过在Real AdaBoost选择特征时,先将某一维特征空间划分为若干区间,然后再在不同区间分类,其分类器的输出为
而特征的选择是
其中
当时我们是从最小化指数误差来推导的,现在从巴氏距离角度来理解特征选择的过程。
对于任意两个随机分布,其巴氏距离定义为:
在寻找特征时肯定希望正负样本的分布距离尽可能的大,这样比较容易区分正负类。
当使用Real AdaBoost时,每个维度被划分为N个区间,那么在该维度上正负样本分布的巴氏距离为:
所以我们在最小化时就是在最大化.
In conclusion, we state that in order to train a best LUT-type weak classifier under a distribution $D_t$, first a Haar feature which gets the maximum $J_B$ should be selected.
这里LUT-type 是指Look-Up-Table类型,因为每位特征划分成N个区间,每个区间都有对应的输出,所以可以采用查找表的方式分类。
嵌套级联分类器
级联分类器中下一级分类器的训练样本是上一级分类器检出的样本,而如果使用Real AdaBoost训练得到分类器,那么分类器输出的结果就不仅仅是正负样本的示性函数,而有确定的实数值,仅简单的将‘正样本’平等对待输入到下一级分类器,就极大的忽略了实值输出所蕴含的差异性。
在级联分类器中每一个分类器要求较高的检测率,而误检率在可接受范围内即可,这会导致分类器检测出的正样本仍然具有明显的可分性。
如下图所示的分布,左图是样本的原始分布,经过一级AdaBoost分类器后,所有的‘正样本’的分布如右图所示。易发现为了取得较高的检测率,在‘正样本’中有许多真实负样本,而由其分布可发现这些样本还是能够较好的分离的。
所以,文中为了利用上级分类器得到实值结果所蕴含的分类信息,在原有的cascade detector基础上,在每一层增加了一个弱分类器,该弱分类器使用的特征正是上一级分类器给出的实值输出。
总体上,nested cascade detector由四部分组成:Haar特征,一般弱分类器,嵌入的弱分类器(利用上层实值输出的分类器)和强分类器,其结构图如下:
nested weak classifier 一样可以使用分区间的方法构造,这样每一层Real AdaBoost的输出为:
最终分类器的输出为
k为分类器层数。
注:在每一层强分类器的设计中,nested weak classifier 被作为第一个弱分类器。
Experimentally, conf(x) has a much larger Bhattacharyya distance than a Haar feature, so the nested weak classifier is a 'strong' one, which is placed as the first component in each layer except for the first layer.
多视角人脸检测
文章中应用nested cascade detector实现多视角地人脸检测,人脸rotation-out-plane的姿态被分为5类:左侧脸、左半侧脸、正脸、右半侧脸、右侧脸,然后对每一类都构建一个nested cascade detector,实验结果表明对该类应用能取得很好的效果。
下图是该检测过程示意图:
这里有一个模块,被称为Pose estimator,相当于一个预选择的过程,通过对姿势的筛选,使样本能够相对精确的进入对应的分类器,加快分类速度。