http://blog.csdn.net/njzhujinhua/article/details/38343683
人脸检测是人脸识别的第一道工序,其技术比较成熟,但因为其检测性能因素,直到Viola和Jones于CVPR2001上文章【1】发表之后才使得其能进行实际应用。
VJ描述的物体检测框架包括三部分:
【1】feature:
VJ使用的特征仅与一个矩形区域内像素取值的和有关,类似于Haar函数,一种最简单的小波,如下图所示:
其特征取值为白色区域对应图像的像素值之和减去灰色区域对应图像的像素值之和。一副图像中这样的特征数量太多,其计算复杂性是个问题,为此作者引入积分图技术,这使得Haar特征的计算可以在常数时间内完成,使得其计算效率大大提高。VJ用到的特征只有水平与数值的特征,显得十分粗糙不精细,但其计算的简便性使其大大优于其他算法。
积分图是一张与原图大小一致的图,其每个像素/点的取值为其原图左上角所有像素取值的和。
假设积分图中某点x的取值记为ii(x)
当要计算矩形D的像素和时只需要使用ii(p4)-ii(p2)-ii(p3)+ii(p1)即可
【2】Learning
给定特征集以及正负样本的训练集,有很多的机器学习算法都可以得出其分类函数,如NN,SVM等,但考虑到前面得到的Haar特征数量巨大,即使其计算再快要想实时计算也是很难的。
VJ采用的目标检测框架第二个贡献是基于Adaboost的分类器学习方法, 其用此选择特征并训练分类器。
Adaboost的最初目的是提升一个简单分类器的性能,其通过组合多个弱分类器得到一个强分类器。所谓的弱分类器指其仅比随机猜略好。
为了对弱分类器提升,可理解为一系列弱分类器的相继学习过程,在一次学习结束后对于那些错误分类的样本通过增加其权重并重新进行学习以得到比上一次更好的分类器。因而Adaboost也是一种重采样技术。
Adaboost的过程可以达到特征选择的目的, 作者为此目的限制每个弱分类器仅依赖于一个特征。
作者定义一个弱分类器hi(x)(直接截图了)
这里x是一个24×24的图像子窗口区域
在循环中的第二步,错误率实际依赖于h_j(x_i)如果其与y_i一致即分类正确时,h_j(x_i)-y_i为0,如果分类错误则为1,错误率即增加了。第三步选择错误最少的分类器。第4步则更新每个每个样本的权重,错误率都是小于0.5的故beta_t也是小于1的,因而如果该样本分类正确,则其权重下降,否则权重不变。(Adaboost中是分类正确则权重下降,分类错误则权重提升,且提升公式也略有不同,还涉及到比重的归一化)
【3】
文中第三个贡献是通过将AdaBoost构建的强分类器进行级联来进行人脸/物体检测,其可以在提高检测性能的同时大幅加快检测速度。
级联分类器其实现方法是先将多个强分类器按复杂度排序, 简单的在前面。这些强分类器虽然对检测率有很高要求,为了效率误识屡屡可以放低。尤其是第一级的时候。
其首先构建简单的(小而高效)boosted分类器,这种分类器在检测出几乎所有正样本时可以拒绝大部分负样本。在一个复杂的低误识率的分类器执行之前通过这个较简单的分类器排除掉大部分子窗口。即只要前一级分类器拒绝的窗口不再进入下一级分类器,直接将其拒绝, 本质是一颗退化的决策树。
VJ在本文中给出的是一种添加特征的方法以构造逐渐复杂的强分类器。
在人脸检测中,级联的第一个分类器叫做attentional operator,他仅使用2个特征就能做到0漏检和40%的FPR,从而可以快速确定可能有人脸的区域。在后一级的分类器构建时逐渐增加特征以满足本级分类器的要求。
总结:
在VJ之前识别率就很高了,本文亮点不再识别率,而在识别效率。其1是采用Haar特征, 计算简单,又引入积分图技术进行加速。二是使用AdaBoost将很容易构造出的弱分类器组合成强分类器。第三使用级联cascade策略将构造这些强分类器的退化决策树,使不满足的区域直接被排除,大大提高计算效率。
参考文献
[1] Robust Real-time Object Detection.Paul Viola,Michael Jones. IJCV 2004.
[2]模式分类 Richard Duda