级联分类器算法原理解析

 更新时间:2022年05月09日 17:21:24   作者:wumh7  
这篇文章主要为大家介绍了级联分类器算法的原理解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

一、人脸检测算法分类

目前人脸检测方法主要分为两大类,基于知识和基于统计。

基于知识的人脸检测方法主要包括:模板匹配,人脸特征,形状与边缘,纹理特征,颜色特征。

基于统计的人脸检测方法主要包括:主成分分析与特征脸法,神经网络模型,隐马尔可夫模型,支持向量机,Adaboost算法。

基于知识的方法将人脸看成不同特征的特定组合,即通过人脸的眼睛、嘴巴、鼻子、耳朵等特征及其组合关系来检测人脸。

基于统计的方法将人脸看成统一的二维像素矩阵,通过大量的样本构建人脸子空间,通过相似度的大小来判断人脸是否存在。

二、Haar分类器算法

本文介绍的Haar分类器方法,包含了Adaboost算法。

Haar算法实际上是运用了boosting算法中的Adaboost算法。Haar分类器利用Adaboost算法构建一个强分类器进行级联,而在底层特征抽取上采用的是高校的矩形特征以及积分图方法。

Haar分类器=类Haar特征+积分图法+Adaboost算法+级联。

Haar分类器主要步骤如下:

1. 提取类Haar特征;

2. 利用积分图法对类Haar特征提取进行加速;

3. 使用Adaboost算法训练强分类器,区分出人脸和非人脸;

4. 使用筛选式级联把强的分类器级联在一起,从而提高检测准确度。

2.1 人脸检测的大概流程

我们用一个小的窗口在一幅图片中不断的滑动,每滑动到一个位置,就对该小窗口内的图像进行特征提取,若提取到的特征通过了所有训练好的强分类器的判定,则我们判定该小窗口的图片内含有人脸。

2.2 Haar-like特征

Viola牛们提出的Haar-like特征如下:

将Haar-like特征在图片上进行滑动,在每个位置计算白色区域对应的像素值的和减去黑色区域对应的像素值的和,从而提取出该位置的特征,人脸区域与非人脸区域提取出的特征值不同,从而区分出人脸区域和非人脸区域。

我们可以用多个矩形特征计算得到一个区分度更大的特征值,从而增加人脸区域和非人脸区域的区分度。那么该怎么组合这些矩形特征才能得到更好的区分度呢?Adaboost算法就是用来解决这个问题的。

2.3 Adaboost算法

Adaboost算法是一种一般性的分类器性能提升算法,不仅仅是限定于一种算法。Adaboost算法可以用来更好地选择矩形特征的组合,而这些矩形特征的组合就构成了分类器,分类器以决策树的方式存储这些矩形特征组合。

Adaboost是基于boosting算法的,而boosting算法涉及到弱分类器和强分类器的概念。弱分类器是基于弱学习的,其分类正确率较低,但是较容易获得,强分类器是基于强学习,其分类正确率较高,但是较难获得。

Kearns和Valiant两个大神提出弱学习和强学习是等价的,并且证明只要样本充足,弱学习可以通过一定的组合获得任意精度的强学习。这个证明为boostting算法提供了理论基础,使其成为一个能够提高分类器性能的一般性方法。

而boosting算法主要存在两个问题,一个是它需要预先知道弱分类器的误差,另一个是它在训练后期会专注于几个难以分类的样本,因此会变得不稳定。针对这些问题,后来Freund和Schapire提出了实际可行的Adaboost算法。

2.4 弱分类器的构建

我们可以用决策树来构建一个简单的弱分类器, 将提取到的特征与分类器的特征进行逐个比较,从而判断该特征是否属于人脸,如下图所示:

该分类器的重点在于阈值的设定。阈值的设定方法如下:

(1)对于每个分类器计算训练样本的特征值;

(2)对这些特征值进行排序;

(3)计算所有属于人脸的样本的特征值的和t1和所有属于非人脸的样本的特征值的和t0;

(4)计算第i个样本前所有属于人脸的样本的特征值的和s1is1i和属于非人脸的样本的特征值的和s0is0i;

(5)计算r=min((s1+(t0i−s0i)),s0+(t1i−s1i))r=min((s1+(t0i−s0i)),s0+(t1i−s1i))。

计算得到的最小的rr值即为所求阈值。有了阈值,我们便用决策树构成了一个简单的弱分类器,如下所示:

其中x子图像窗口,f是特征,p的作用是控制不等号方向,使得不等号都为"<",θθ是阈值。

2.5 强分类器的构造

这个部分我还是似懂非懂。按照我的理解,强分类为的构造是这样的:

(1)首先选出部分样本,给它们赋予权重1/N,其中N为总的样本的个数;

(2)用选出的样本训练弱分类器;

(3)提高错误分类的样本的权重,并舍弃正确分类的样本,加入新的样本,新的样本的权重还是之前的1/N,进行新一轮的弱分类器的训练;

(4)经过T轮后,训练出T个弱分类器;

(5)将这T个弱分类器根据他们的分类错误率加权求和构成一个强的分类器,如下所示:

其中αtαt是第t个弱分类器的权重,βtβt是第t个弱分类器的错误率。强分类器相当于先让各个弱分类器进行投票,然后让投票结果根据各弱分类器的错误率进行加权相加,最后与平均的投票结果进行比较得到最终结果。

Reference:

https://www.jb51.net/article/222465.htm

以上就是级联分类器算法原理解析的详细内容,更多关于级联分类器算法的资料请关注脚本之家其它相关文章!

相关文章

  • 基于Leaflet的VideoOverlay视频图层叠加实战教程

    基于Leaflet的VideoOverlay视频图层叠加实战教程

    这篇文章主要介绍了基于Leaflet的VideoOverlay视频图层叠加实战,本文首先介绍了DistortableVideo组件的相关知识,它的github仓库信息,相关源代码的目录说明,使用依赖信息,需要的朋友可以参考下
    2023-02-02
  • git分支(branch)操作相关命令及分支命令的使用

    git分支(branch)操作相关命令及分支命令的使用

    这篇文章主要介绍了git分支(branch)操作相关命令及分支命令的使用的相关资料,需要的朋友可以参考下
    2017-10-10
  • Visual Studio安装git插件的方法步骤

    Visual Studio安装git插件的方法步骤

    这篇文章主要介绍了Visual Studio安装git插件的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • 分享10个程序员常用的的代码文本编辑器

    分享10个程序员常用的的代码文本编辑器

    通常操作系统和软件开发包中都包含文本编辑器,可以用来编辑配置文件,文档文件和源代码,这里分享一下程序员常用的代码编辑器,需要的朋友可以参考下
    2016-09-09
  • vscode常用插件整理汇总

    vscode常用插件整理汇总

    本文给大家整理汇总了17个常用的vscode装B插件,都是作者费心整理出来的,希望大家能够喜欢
    2020-02-02
  • 调用无文档说明的 Web API过程描述

    调用无文档说明的 Web API过程描述

    这篇文章主要为大家介绍了调用无文档说明的Web API过程描述,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪<BR>
    2022-03-03
  • select下拉菜单实现二级联动效果

    select下拉菜单实现二级联动效果

    这篇文章主要介绍了select下拉菜单实现二级联动效果,在一些项目开发中经常会遇到这样的需求,今天小编通过实例代码给大家讲解,需要的朋友可以参考下
    2019-10-10
  • Visual Assist X 番茄助手安装教程与汉化技巧

    Visual Assist X 番茄助手安装教程与汉化技巧

    Visual Assist X 是一款 Microsoft Visual Studio 扩展工具,能够帮助填补 Microsoft Visual Studio 在撰写 C/C++ 和 C# 程序之不足并提升其效率,本文给大家分享Visual Assist X 番茄助手安装与汉化教程,感兴趣的朋友一起看看吧
    2023-06-06
  • 一文彻底理清session、cookie、token的区别

    一文彻底理清session、cookie、token的区别

    session和token本质上是没有区别的,都是对用户身份的认证机制,只是他们实现的校验机制不一样而已,下面这篇文章主要给大家介绍了关于session、cookie、token区别的相关资料,需要的朋友可以参考下
    2023-02-02
  • 教你编写 Pipeline 脚本的方法

    教你编写 Pipeline 脚本的方法

    Pipeline 编写较为麻烦,为此,DataKit 中内置了简单的调试工具,用以辅助大家来编写 Pipeline 脚本,这篇文章主要介绍了如何编写 Pipeline 脚本,需要的朋友可以参考下
    2022-10-10

最新评论