这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 企业专区 » OpenVINO生态社区 » 【原创】项目实战—人脸检测之级联分类器理论(一)

共11条 1/2 1 2 跳转至

【原创】项目实战—人脸检测之级联分类器理论(一)

高工
2020-08-20 09:34:05     打赏

项目实战—人脸检测之级联分类器理论(一)

至本次教程开始,我们将进入实战篇,当然仍然会设计到一些理论部分,比如机器学习相关的知识,级联分类器等等。接下来,我们将使用OpenCV自带的级联分类器实现一个简单的人脸检测的功能。

首先逐步开始研究级联分类器。

级联分类器,即使用类 Haar 特征工作的级联增强分类器,是集成学习的一种特殊情况,称为 boost。它通常依赖于 Adaboost 分类器(以及其他模型,如 Real AdaboostGentle Adaboost Logitboost)。

我们如何检测图上是否有人脸呢?有一种名为 Viola-Jones 的目标检测框架的算法,包括了实时人脸检测所需的所有步骤:

·           提取 Haar 特征,特征来自 Haar 小波

·           创建图像

·           Adaboost 训练

·           级联分类器

Haar 特征选择

人脸上最常见的一些共同特征如下:

·           与脸颊相比,眼部颜色较深

·           与眼睛相比,鼻梁区域较为明亮

·           眼睛、嘴巴、鼻子的位置较为固定......

这些特征称为 Haar 特征。特征提取过程如下所示:

                                              image.png

在上图中,第一个特征测量眼部和上脸颊之间的强度差异。特征值计算的方法很简单,对黑色区域中的像素求和再减去白色区域中的像素即可。

然后,将这个矩形作为卷积核作用到整个图像。为了不产生遗漏,我们需要用到每个卷积核的所有的维度和位置。简单的 24 * 24 的图像可能会产生超过 160000 个特征,每个特征由像素值的和/差组成。这样在计算上无法实现实时人脸检测。那么,该如何加快这个过程呢?

一旦通过矩形框识别到有用区域,则在与之完全不同的区域上就无需再做计算了。这一点可以通过 Adaboost 实现。

使用积分图像原理计算矩形框特征的方法更快。我们将在以后介绍这一点。

image.png

原始论文中提到几种可用于 Haar 特征提取的矩形框:

·           双矩形特征计算的是两个矩形区域内像素和的差,主要用于检测边缘 (a,b)

·           三矩形特征计算的是中心矩形和减去两个外部矩形和的差,主要用于检测线 (c,d)

·           四矩形特征计算的是矩形对角线对之间的差 (e)

image.png

特征提取完成后,使用 Adaboost 分类器将它们应用于训练集,该分类器结合了一组弱分类器来创建准确的集成模型。只需 200 个特征(最初是 16 万个),实现了 95%的准确率。该论文的作者提取了 6000 个特征。

积分图像

以卷积核的形式计算特征需要花费很长时间。出于这个原因,作者 Viola Jones 提出了图像的中间表示:积分图像。积分图像的作用是仅使用四个值简单地计算矩形和。我们来看看它是如何工作的!

假设我们想要确定一个坐标为 (x,y) 的给定像素的矩形特征。然后,像素的积分图像是给定像素的上方和左侧的像素之和。

image.png

其中 ii(x,y) 是积分图像,i(x,y) 是原始图像。

当计算整个积分图像时,有一种只需要遍历一次原始图像的递归方法。实际上,我们可以定义以下一对递归形式:

image.png

其中 s(x,y) 是累积行和,而 s(x−1)=0, ii(−1,y)=0

这是怎么实现的呢?假设我们想要估算区域 D 的像素总和。我们已经定义了 3 个其他区域:AB C

·           1 处的积分图像的值是矩形 A 中的像素的总和。

·           2 处的值为 A + B

·           3 处的值为 A + C

·           4 处的值是 A + B + C + D

因此,区域 D 中的像素之和可以简单地计算为: 4+1−(2+3)

这样我们仅使用 4 个数组值就计算出了矩形 D 的值。

image.png

人们应该知道矩形在实际中是非常简单的特征,但对于人脸检测已经足够了。当涉及复杂问题时,可调滤波器往往更灵活多变。

image.png

使用 Adaboost 学习分类函数

给定一组带标签的训练图像(正负样本均有),Adaboost 用于:

·           提取一小部分特征

·           训练分类器

由于 16 万个特征中的大多数特征与之极不相关,因此我们设计一个增强模型的弱学习算法,用来提取单个矩形特征,将最好的正负样本区分开。

虽然这个过程十分的有效,但是仍然存在一个重大问题,而正是由于这个问题,导致了级联分类器的诞生,我们将在下一个教程中详述。

 

 

 

 

 

 

 

 


对计算机视觉感兴趣?这个社区推荐给你~

>>点击了解OpenVINO生态开发社区



高工
2020-08-21 22:29:20     打赏
2楼

挺厉害~


工程师
2020-08-22 15:07:13     打赏
3楼

这个理论很有实践意义


工程师
2020-08-23 16:55:44     打赏
4楼

不错 学到了


工程师
2020-08-23 17:03:00     打赏
5楼

感谢楼主分享


工程师
2020-08-23 17:07:15     打赏
6楼

期待更新


工程师
2020-08-23 17:12:54     打赏
7楼

谢谢分享


工程师
2020-08-23 17:17:48     打赏
8楼

期待楼主更新


工程师
2020-08-23 17:23:30     打赏
9楼

学习到了


工程师
2020-08-23 20:02:58     打赏
10楼

感谢分享


共11条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]