人脸识别鼻祖!!——级联分类器(Cascade Classifier)详解

发布于:2025-04-12 ⋅ 阅读:(350) ⋅ 点赞:(0)

目录

📘 级联分类器(Cascade Classifier)详解

一、基本定义

二、检测流程总览(4个阶段)

三、核心概念剖析

1️⃣ Haar 特征(Haar Features)

2️⃣ 积分图(Integral Image)

为什么能在常数时间内完成呢?

3️⃣ AdaBoost + 弱分类器训练

(1)AdaBoost 是什么?

(2)AdaBoost 的基本结构

(3)训练过程(逐步讲清楚)

✅ 步骤 1:选择最佳弱分类器

✅ 步骤 2:给这个弱分类器一个权重 α₁

✅ 步骤 3:更新训练样本的权重

✅ 步骤 4:重复步骤 1~3(训练下一个弱分类器)

✅ 最终模型(强分类器)是这样的:

(4)直观比喻(帮你快速理解)

4️⃣ Cascade(级联结构)

四、应用过程(以人脸检测为例)

五、优缺点分析

六、与深度学习的对比

七、OpenCV 调用级联分类器的 API(回顾)

八、总结一句话:


📘 级联分类器(Cascade Classifier)详解


一、基本定义

        级联分类器是一种用于 对象检测(如人脸检测)的方法,它利用 Haar 特征 与一系列 级联的分类器(Cascade of Classifiers) 来快速且准确地判断图像中是否存在特定目标。

        这种方法最早由 Viola 和 Jones 在 2001 年提出,称为 Viola-Jones 面部检测框架,是历史上第一个实时人脸检测算法。


二、检测流程总览(4个阶段)

  1. 特征提取(Haar 特征)

  2. 积分图优化计算效率

  3. AdaBoost 训练弱分类器

  4. Cascade(级联结构)快速筛选窗口


三、核心概念剖析

1️⃣ Haar 特征(Haar Features)

  • 本质是图像中区域的亮度对比,例如:

    • 眼睛通常比脸颊暗

    • 鼻梁比两侧明亮

  • Haar 特征图案示例:

    • ⬛⬜(两块区域的亮度差)

    • ⬛⬜⬛(三块)

    • 多层结构(如正方形、L型)

  • 每个 Haar 特征通过矩形区域之间的像素加权和差异来表示。


2️⃣ 积分图(Integral Image)

积分图,也叫累加图(Summed Area Table),是一个用于加速矩形区域求和的图像数据结构。

定义:
积分图中某点 (x, y) 的值,等于原图中从原点 (0, 0) 到 (x, y) 矩形区域内所有像素的累加和。

S(x, y) = \sum_{i=0}^{x} \sum_{j=0}^{y} I(i, j) 

  • 目的是 加速 Haar 特征的计算。

  • 积分图在任意矩形区域内的像素和计算是O(1) 常数时间完成。

为什么能在常数时间内完成呢?

使用积分图之后,任意矩形区域内像素之和,只需要 4 个值计算一次减法就能得到!


✅ 举个例子:

设你想求下图中矩形 ABCD 的像素和:

A      B
+------+
|      |
|      |
+------+
C      D
  • 使用积分图中的值(示意):

A (x1,y1)       B (x2,y1)
      +--------+
      |        |
      |   区域 |
      +--------+
C (x1,y2)       D (x2,y2)

那么区域和为:

区域和=S(D)−S(B)−S(C)+S(A)

也就是:

S(x2,y2)−S(x2,y1)−S(x1,y2)+S(x1,y1)

只用 4 次查表 + 1 次运算,就能得到任意矩形的像素和!速度超极快有没有~~!


3️⃣ AdaBoost + 弱分类器训练

(1)AdaBoost 是什么?

AdaBoost,全称是 Adaptive Boosting,中文叫“自适应增强”,是一种集成学习算法。

它的核心思想就是:

将多个“弱分类器”组合成一个“强分类器”
比如每个弱分类器只能判断“对不对 51%”,但组合起来能达到 95% 准确率。

(2)AdaBoost 的基本结构
  • 弱分类器(Weak Classifier):单个分类器,性能差,只稍好于随机猜测

    • 在人脸检测中,这就是一个简单的 Haar 特征 + 阈值判断

  • 强分类器(Strong Classifier):多个弱分类器的加权组合,精度很高

(3)训练过程(逐步讲清楚)

我们假设有很多图像样本(正样本:人脸,负样本:非人脸),并且你已经提取好了 Haar 特征。

初始条件:

  • 给所有训练样本一个相等的“权重” w_i = \frac{1}{N}

  • 每次选择一个最好的弱分类器(从几万个 Haar 特征中选)


✅ 步骤 1:选择最佳弱分类器

  • 遍历所有候选 Haar 特征

  • 对每一个特征:

    • 用某个阈值划分样本 → 得出一个分类器(左边是人脸?右边是人脸?)

    • 计算它在训练集上的加权分类误差率

选择误差率最小的那个,记为第一个弱分类器 h_1(x)

✅ 步骤 2:给这个弱分类器一个权重 α₁

\alpha_1 = \frac{1}{2} \ln \left(\frac{1 - e_1}{e_1}\right)

e_1是分类错误率,越小表示这个分类器越好,因此 α 值就越大

✅ 步骤 3:更新训练样本的权重

错分的样本权重会增大,对的样本权重会减小。

会不会对这句话有疑问?

什么?让错误的权重大?对!!!

我们先来看看 AdaBoost 的本质目标:

“每一轮都找一个新的弱分类器,专门去改正之前的错误。”

而如果你不把“错的样本”权重调高,那么下一轮就不容易“看到”它,模型会继续忽略它!

所以我们通过“调高它的权重”,让它在下一轮被更多考虑,帮助模型慢慢把它分对。

然后我们继续

新的权重更新公式如下:

w_i^{(new)} = w_i^{(old)} \cdot e^{-\alpha_1 y_i h_1(x_i)}

  • y_i ​ 是样本真实标签(+1 or -1)

  • h_1(x_i) 是第一个弱分类器的预测结果

然后对所有样本的权重进行归一化(让它们加起来为1)

✅ 步骤 4:重复步骤 1~3(训练下一个弱分类器)

这时,样本的权重已经发生变化了:

  • 原来容易分对的样本:权重变小

  • 原来总是分错的样本:权重变大,下一轮更容易被注意到

✅ 最终模型(强分类器)是这样的:

H(x) = \text{sign}\left( \sum_{t=1}^{T} \alpha_t h_t(x) \right)

也就是说,每个弱分类器投票,乘以自己的权重 α,结果加权求和。谁得分高,就分到哪一类。

(4)直观比喻(帮你快速理解)

想象你是一个老师,有一堆学生都只会一点点判断(弱分类器):

  • 小明:我觉得鼻子很宽就是人脸(51%准确)

  • 小红:我觉得有眼睛阴影就是人脸(52%准确)

  • 小刚:我觉得脸部周围颜色变化强烈是人脸(53%准确)

         你把他们这些“低水平专家”组合起来,注意他们“说得对”还是“说错了”,让错的声音小一点,对的声音大一点,反复调整他们的“话语权” → 你就得到了一个聪明的团队(强分类器)。


4️⃣ Cascade(级联结构)

  • 核心思想是:分阶段逐步淘汰非目标区域,提高速度。

  • 每一层是一个强分类器:

    • 如果一层判定为“不是目标”,立刻丢弃该区域

    • 如果一层通过,进入下一层更精细判断

🔁 流程图理解:

图像窗口 → 第1层:大致判断 → 第2层:更细判断 → …… → 最后一层:最终确
  • 这样可以将大多数无关区域在前几层快速排除,节省计算时间。


四、应用过程(以人脸检测为例)

1. 将图像转为灰度图
2. 设置不同大小的滑动窗口
3. 每个窗口提取 Haar 特征
4. 使用级联分类器判断是否为目标
5. 返回检测到的人脸区域坐标

五、优缺点分析

优点 缺点
实时性强,速度快 对光照、角度敏感
实现简单,OpenCV 支持好 准确率不如深度学习方法
无需 GPU,加速方便 需要大量样本训练,泛化能力较差

六、与深度学习的对比

项目 Haar 级联 CNN(如 MTCNN)
精度 中 高
速度 快(CPU 友好) 慢(需 GPU)
实现 简单 复杂
数据需求 中等 较大
应用推荐 实时嵌入式设备 高精度场景、人脸识别等

七、OpenCV 调用级联分类器的 API(回顾)


# 加载训练好的分类器
classifier = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

# 进行目标检测
objects = classifier.detectMultiScale(
    image, 
    scaleFactor=1.1, 
    minNeighbors=5, 
    minSize=(30, 30)
)

  • scaleFactor: 图像每次缩小的比例(控制检测精度和速度)

  • minNeighbors: 每个目标至少要被检测到多少次才认为是真正目标

  • minSize: 检测的最小对象尺寸


八、总结一句话:

Haar 级联分类器是通过层层筛选结构,把人脸从大图中一步步“筛”出来的快速目标检测方法,它开创了实时人脸检测的新时代。

 


微信公众号

今日签到

点亮在社区的每一天
去签到