基于AdaBoost级联分类器的人脸/眼睛位置检测算法概述

AdaBoost分类器概述

—— 才疏学浅, 难免有错误和遗漏, 欢迎补充和勘误.

  • AdaBoost算法在1995年由Freund和Shapired提出,它是机器学习领域中一种重要的特征分类方法,其可以训练一系列的弱分类器 G k ( x ) G_k(x) Gk(x)来获得最终的一个强分类器 F ( x ) F(x) F(x)。但是因为其计算量太大,所以迟迟未能应用在人脸检测领域。直到2001年Jones与Viola两位教授把Haar-like特征以及积分图的概念引入到Adaboost中,才将用Haar级联分类器来检测人脸的方法推入了历史舞台。

  • 下面以二分类人脸检测为例通过把 m m m个样本数据 T T T通过 k k k个弱分类器 G k ( x ) G_k(x) Gk(x)训练成强分类器 F ( x ) F(x) F(x)的过程对Adaboost迭代算法进行概述, k k k为进行到第 m m m轮的弱分类器训练, G k ( x ) G_k(x) Gk(x)为第 k k k个弱分类器:

在这里插入图片描述

图1. AdaBoost分类器的训练过程图
  • 假定有 m m m个样本构成一个样本集合 T T T
    T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x i , y i ) , . . . , ( x m , y m ) } ; i = 1 , 2... m T = \left\{ {\left( {x_1,y_1} \right),\left( {x_2,y_2} \right),...,\left( {x_i,y_i} \right),{\rm{ }}...{\rm{ }},\left( {x_m,y_m} \right)} \right\}{\rm{ }};i = 1,2...m T={(x1,y1),(x2,y2),...,(xi,yi),...,(xm,ym)};i=1,2...m
  • 其中 x i x_i xi为样本的描述, y i ∈ ( 1 , − 1 ) y_i \in (1, - 1) yi(1,1)为样本的标识。在人脸检测中 x i x_i xi可以是每张图片的序号,该图片为正样本时 y i = 1 y_i = 1 yi=1时,即为人脸图像;该图片为负样本时 y i = − 1 y_i = -1 yi=1,即为非人脸图像。下面对该样本进行分类训练:

  1. 参数初始化
  • 在第一轮训练中样本的权重系数分布 D ( 1 ) D(1) D(1)都设置为 1 m \frac{1}{m} m1,其中 ω k i \omega _{ki} ωki代表第 k k k轮第 i i i个样本的权重。
    D ( 1 ) = { ω 11 , ω 12 , . . . ω 1 m } ; ω 1 i = 1 m ; i = 1 , 2... m D(1) = \left\{ {\omega _{11},\omega _{12},...\omega _{1m}} \right\};\omega _{1i} = \frac{1}{m};i = 1,2...m D(1)={ω11,ω12,...ω1m};ω1i=m1;i=1,2...m
  • 在第一轮中把每一个样本点的权重都初始化为 D ( 1 ) = 1 m D(1) = \frac{1}{m} D(1)=m1,这样能够保证在训练第一个弱分类器 G 1 ( x ) G1(x) G1(x)时每个样本点起的作用是一样的。

  1. 计算分类误差率 e k e_k ek
  • 遍历样本集中 x x x的阈值分界点 v v v,对于每一个弱分类器 G k ( x ) G_k(x) Gk(x),计算该轮分类的误差率 e k e_k ek,选取使样本序号 x x x在以 v v v为分界点时分类误差率 e k e_k ek最低时的阈值 v v v ,并最终确定该轮下的弱分类器:
    G k ( x ) = { 1 p i x < p i v 0  otherwise  G_{k}(x)= \begin{cases}1 & p_{i} x<p_{i} v \\ 0 & \text { otherwise }\end{cases} Gk(x)={10pix<piv otherwise 
    弱分类器 G k ( x ) G_k(x) Gk(x)的值为1说明该图片是人脸图像,值为0时说明该图片是非人脸图像; p i p_i pi的作用是确定不等号的方向。分类误差率计算公式为: e k = P ( G k ( x i ) ≠ y i ) = ∑ i = 1 m ω k i I ( G k ( x i ) ≠ y i ) e_k = P(G_k(x_i) \ne y_i) = \sum\limits_{i = 1}^m {\omega _{ki}I} (G_k(x_i) \ne y_i) ek=P(Gk(xi)=yi)=i=1mωkiI(Gk(xi)=yi)
  • 其中 I ( G k ( x i ) ≠ y i ) = { 1 G k ( x i ) ≠ y i 0 G k ( x i ) = y i I\left(G_{k}\left(x_{i}\right) \neq y_{i}\right)= \begin{cases}1 & G_{k}\left(x_{i}\right) \neq y_{i} \\ 0 & G_{k}\left(x_{i}\right)=y_{i}\end{cases} I(Gk(xi)=yi)={10Gk(xi)=yiGk(xi)=yi,即让第 k k k轮第 i i i个样本的权重 ω k i \omega_{ki} ωki乘以0或1再求和,其中当分类器的判断是正确时( G k ( x i ) = y i G_k(x_i) = y_i Gk(xi)=yi)为0,错误时( G k ( x i ) ≠ y i G_k(x_i) \ne y_i Gk(xi)=yi)为1。即经此计算后可以得到该轮分类的误差。

  1. 计算弱分类器的权重系数 α k \alpha _k αk
  • 因为Adaboost是加法模型、前向分步学习算法,又通过对Adaboost算法中指数型的损失函数进行优化,对损失函数Loss求偏导( ∂ L o s s ∂ α \frac{{\partial Loss}}{{\partial \alpha }} αLoss)令其等于0,计算出 α k \alpha _k αk e k e_k ek的关系: α k = 1 2 log ⁡ 1 − e k e k \alpha _k = \frac{1}{2}\log \frac{{1 - e_k}}{{e_k}} αk=21logek1ek
  • 经此计算后,达到分类误差 e k e_k ek越高的弱分类器 G k ( x ) G_k(x) Gk(x)其权重系数 α k \alpha _k αk越小的目的,这样可以提高检测准确率。

  1. 更新下一轮每个样本点的权重系数: ω k + 1 , i = ω k i Z k exp ⁡ ( − α k y i G k ( x i ) ) \omega _{k + 1,i} = \frac{{\omega _{ki}}}{{Z_k}}\exp ( - \alpha _ky_iG_k(x_i)) ωk+1,i=Zkωkiexp(αkyiGk(xi))
  • 其中 Z k Z_k Zk是规范化因子, Z k = ∑ i = 1 m ω k i exp ⁡ ( − α k y i G k ( x i ) ) Z_{k}=\sum_{i=1}^{m} \omega_{k i} \exp \left(-\alpha_{k} y_{i} G_{k}\left(x_{i}\right)\right) Zk=i=1mωkiexp(αkyiGk(xi)),作用是将样本权重归一化。如果某个样本被错误分类,会导致 y i G k ( x i ) < 0 y_iG_k(x_i) < 0 yiGk(xi)<0,导致在下一轮的分类中权重 ω \omega ω变大进而影响样本描述 x x x的分类阈值 v v v,从而达到了更重视错误样本分类工作的目的。
  • 经过该计算后得到了该轮所有的样本权重:
    D ( k + 1 ) = { ω ( k + 1 ) 1 , ω ( k + 1 ) 2 , … ω ( k + 1 ) m } ; ∑ 1 m ω ( k + 1 ) i = 1 D(k+1)=\{\omega_{(k+1) 1}, \omega_{(k+1) 2}, \ldots \omega_{(k+1) m}\} ; \sum_{1}^{m} \omega_{(k+1) i}=1 D(k+1)={ω(k+1)1,ω(k+1)2,ω(k+1)m};1mω(k+1)i=1
  • 再去重复步骤2.-4.,直至所有的弱分类器训练完毕。

  1. 生成最终的强分类器 F ( x ) F(x) F(x)
  • Adaboost生成最终强分类器采用的方法是弱分类器的加权求和法,将每一级弱分类器乘以一个权重后再相加形成最终的强分类器:
    F ( x ) = sign ⁡ ( ∑ k = 1 K α k G k ( x ) ) = { 1 ∑ k = 1 K α k G k ( x ) > 0 0 ∑ k = 1 K α k G k ( x ) = 0 − 1 ∑ k = 1 K α k G k ( x ) < 0 F(x)=\operatorname{sign}\left(\sum_{\mathrm{k}=1}^{K} \alpha_{k} G_{k}(x)\right)=\left\{\begin{array}{cl}1 & \sum_{\mathrm{k}=1}^{K} \alpha_{k} G_{k}(x)>0 \\ 0 & \sum_{\mathrm{k}=1}^{K} \alpha_{k} G_{k}(x)=0 \\ -1 & \sum_{\mathrm{k}=1}^{K} \alpha_{k} G_{k}(x)<0\end{array}\right. F(x)=sign(k=1KαkGk(x))=101k=1KαkGk(x)>0k=1KαkGk(x)=0k=1KαkGk(x)<0
  • 其中 K K K为弱学习器的迭代次数, F ( x ) = 1 F(x) = 1 F(x)=1代表通过, F ( x ) = − 1 F(x) = -1 F(x)=1 代表不通过, F ( x ) = 0 F(x) = 0 F(x)=0 代表不操作。至此,一个由一系列弱分类器通过训练而获得的强分类器形成了。

最后将各个强分类器 F i ( x ) F_i(x) Fi(x)按一定的策略级联得到级联分类器:
在这里插入图片描述

图2. 由多个强分类器构成级联分类器的过程图
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值