基于haar特征的Adaboost人脸检测技术

本文主要是对使用haar+Adabbost进行人脸检测的一些原理进行说明,主要是快找工作了,督促自己复习下~~

一、AdaBoost算法原理

  AdaBoost算法是一种迭代的算法,对于一组训练集,通过改变其中每个样本的分布概率,而得到不同的训练集Si,对于每一个Si进行训练从而得到一个弱分类器Hi,再将这些若分类器根据不同的权值组合起来,就得到了强分类器。

  第一次的时候,每个样本都是均匀分布,通过训练得到分类器H0,在该训练集中,分类正确的,就降低其分布概率;分类错误的,就提高其分布概率,这样得到的新的训练集S1就主要是针对不太好分类的样本了。再使用S1进行训练,得到分类器H1,依次迭代下去……,设迭代此外为T,则得到T个分类器。

  对于每个分类器的权值,其分类准确性越高,权值越高。

二、Haar特征

  2.1 特征样子

  就是一些矩形特征的模板,在viola&Jones的论文中,有下面这五种

在opencv中的方法中,有下面这14种,

 

 

dlib人脸关键点检测android adaboost人脸检测_迭代

  2.2 特种的个数

  对于一个给定的24X24的窗口,根据不同的位置,以及不同的缩放,可以产生超过160,000个特征。

  

  2.3 特征计算方法——积分图

  有点类似于动态规划的思想,一次计算,多次使用

  对应于两矩形特征2,矩阵A的值可以用i(5)+ii(1)-ii(4)-ii(2)表示,矩阵B的值用ii(6)+ii(2)-ii(3)-ii(5)表示

  根据定义,haar特征的值为白色矩形减去黑色矩形的值。

 

三、选取弱分类器

  一个弱分类器,实际上就是在这160,000+的特征中选取一个特征,用这个特征能够区分出人脸or非人脸,且错误率最低。

  现在有人脸样本2000张,非人脸样本4000张,这些样本都经过了归一化,大小都是24X24的图像。那么,对于160,000+中的任一特征fi,我们计算该特征在这2000人脸样本、4000非人脸样本上的值,这样就得到6000个特征值。将这些特征值排序,然后选取一个最佳的特征值,在该特征值下,对于特征fi来说,样本的加权错误率最低。选择160,000+个特征中,错误率最低的特征,用来判断人脸,这就是一个弱分类器,同时用此分类器对样本进行分类,并更新样本的权重。

  具体过程如下:

  1. 归一化权重:  

                        

dlib人脸关键点检测android adaboost人脸检测_特征值_02

  2、对于每一个特征f,训练一个弱分类器h;计算所以特征的加权错误率εf,        

                        

dlib人脸关键点检测android adaboost人脸检测_特征值_03

  3、选取具有最小错误率εf的弱分类器hi

  4、调整权重

dlib人脸关键点检测android adaboost人脸检测_权值_04

 

四、级联成强分类器

  

dlib人脸关键点检测android adaboost人脸检测_权值_05

五、检测

  检测过程中,通过不断的调整检测窗口的位置、比例,来找到人脸。