人脸检测:经典的VJ人脸检测器(类Harr特征,积分图加速法,级联的Adaboost强分类器)

本文介绍了著名的VJ人脸检测算法,该算法是人脸检测技术发展的里程碑。它利用积分图加速法提取类Harr特征,使用Adaboost算法训练强分类器,最后将强分类器级联对人脸和背景分类。详细阐述了积分图加速法、Adaboost算法过程及强分类器级联的原理。

著名的VJ人脸检测算法就是一种基于Adaboost分类器的方法。该检测器由Paul Viola和Michael Jones在2001年的 Robust Real-Time Face Detection 提出。在当年的硬件条件下VJ算法可以达到每秒15帧图像的处理速度,是人脸检测技术发展的一个里程碑。虽然性能跟现在基于深度学习的方法没法比,但肯定也是值得去拜读的。

VJ算法利用积分图加速法快速提取图像的类Harr特征,然后使用Adaboost算法训练得到若干个强分类器,组成级联结构,对人脸和背景进行最后的分类。论文的三大贡献分别为:积分图加速法提取类Harr特征,基于Adaboost的学习算法,使用级联的方式组合强分类器。我们分开叙述。

1. 积分图加速法提取类Harr特征

在这里插入图片描述


VJ人脸检测器中所用到的类Harr特征....

VJ人脸检测器中所用到的类Harr特征

类Harr特征属于一种卷积运算模板,可以用其捕捉图像的边缘、变化等信息。而人脸的五官有着和轮廓有着独特的亮度和边缘信息,很符合类Harr特征的特点。在众多的类Harr特征模板中,Viola和Jones选取了四个可以提取边缘特征,线性特征以及对角线特征的模板。
类Harr特征值由以下操作得到:将类Harr特征模板放在图像上之后,用白色区域所覆盖的图像像素和减去黑色区域所覆盖图像中的像素和,在线性特征模板中,会对黑色区域像素之和乘以2,这是为了抵消黑白区域面积不相等所带来的影响。通过改变类Haar特征模板的位置及大小,可以在检测窗内穷举出上万个特征**,因此计算量巨大。

在这里插入图片描述

积分图加速法

  由类Harr特征值的计算过程可以看出,其中涉及了大量的像素求和运算,为了更快地提取图像的类Harr特征,作者使用了一种称为积分图(Integral Image)的方法。假设有一张图像,其坐标(x, y)处的积分图可以定义为:
I ( x , y ) = ∑ x ′ ≤ x ∑ y ′ ≤ y f ( x ′ , y ′ ) I(x, y) = \sum_{x^{\prime} \leq x} \sum_{y^{\prime} \leq y} f\left(x^{\prime}, y^{\prime}\right) I(x,y)=xxyyf(x,y)

在提取类Harr特征之前,首先计算出整幅图像的积分图。那么在提取特征时,图中矩形ABCD的像素和可以利用积分图表示如下:
S a b c d = I ( D ) − I ( B ) − I ( C ) + I ( A ) S_{a b c d}=I(D)-I(B)-I(C)+I(A) Sabcd=I(D)I(B)I(C)+I(A)

积分图加速法大大降低了运算量。

2. Adaboost学习算法

提到了大量类Harr特征值之后,就该使用Adaboost算法做分类训练了
关于Adaboost的好文推荐:详解AdaBoost原理, 这里我只记录关键点吧。
Boosting是一种将弱分类器组合起来形成强分类器的算法框架。这种“三个臭皮匠顶个诸葛亮”的思路是有理论基础的。
Boosting 体现了提升思想,每一个弱学习器重点关注前一个训练器不足的地方进行训练,通过加权投票的方式,得出预测结果。Boosting学习是串行的,弱学习器的学习有先后顺序。
而Adaboost是其中的一种,采用了exponential loss function(其实就是用指数的权重),根据不同的loss function还可以有其他算法,比如L2Boosting, logitboost。

2.1 Boosting

Boosting其架构如下图:
在这里插入图片描述

在Boosting的迭代式训练时,每个训练样本的初始权值是相同的,训练中根据弱学习器的误差计算弱学习器的权重,并调整样本的权重来改变样本的分布,使先前弱学习器难分的样本在后续训练中得到更大的关注,循环该过程,直到弱学习器的数目达到指定数量(是一个超参)。最终将所有弱学习器进行组合加权,得到集成的强学习器。
弱分类器:
一个检测窗中包含大量的类Harr特征,对于检测窗x中的第j个特征值,可以训
练一个如下式所示的弱分类器:
h j ( x ) = { 1  如果  p j f j ( x ) < p j θ j 0  其他  h_{j}(x)=\left\{\begin{array}{ll} 1 & \text { 如果 } p_{j} f_{j}(x)<p_{j} \theta_{j} \\ 0 & \text { 其他 } \end{array}\right. hj(x)={ 10 如果 pjfj(x)<pjθj 其他 
其中 f j ( x ) f_{j}(x) f

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值