0

想问一下是否有任何适合视频的人脸检测方案需要最少的训练时间,最好是几天而不是像 Viola-Jones 那样的几周。我读过 LBP,但它也需要大量的训练样本,但不确定需要多长时间。训练 LBP 是否与使用相似数量的训练集的 Viola-Jones 方法消耗的时间一样多?我将在 Linux 操作系统上运行的 raspberry pi 等微处理器上实现这一点。将希望在 C 上实现它以提高速度,因为我希望它能够检测 10fps - 20fps 视频流中的图像。

4

1 回答 1

11

OpenCV 附带一个名为traincascade的工具,用于训练 LBP、Haar 和 HOG。特别是对于人脸检测,他们甚至以traincascade所需的格式发布了 24x24 像素人脸的 3000 张图像数据集。

根据我的经验,在三种类型的traincascade支持中,LBP 需要最少的时间来训练,对于 Haar 来说需要几个小时而不是几天。

对其训练过程的快速概述是,对于给定数量的阶段(一个不错的选择是 20),它试图找到拒绝尽可能多的非人脸而不拒绝人脸的特征。拒绝非人脸和保留人脸之间的平衡由最小命中率(OpenCV 选择 99.5%)和误报率(OpenCV 选择 50%)控制。用于制作 OpenCV 自己的 LBP 级联的特定元算法是 Gentle AdaBoost (GAB)。

在 OpenCV 中实现的 LBP 变体如下所述:

廖胜才、朱向心、雷振、张伦和斯坦 Z. Li。学习用于人脸识别的多尺度块局部二进制模式。国际生物识别会议 (ICB),2007 年,第 828-837 页。

在 OpenCV 中使用默认参数实际上相当于:

OpenCV LBP 级联运行时概述

检测器检查图像中的 24x24 窗口以寻找人脸。从级联分类器的第 1 阶段到第 20 阶段,如果它可以表明当前的 24x24 窗口可能不是人脸,它会拒绝它并在窗口上移动一个或两个像素到下一个位置;否则进入下一阶段。

在每个阶段,检查 3-10 个左右的 LBP 特征。每个 LBP 特征在窗口内都有一个偏移量和一个大小,它所覆盖的区域完全包含在当前窗口内。在给定位置评估 LBP 特征可能导致通过或失败。根据 LBP 特征是成功还是失败,将特定于该特征的正或负权重添加到累加器中。

一旦评估了阶段的所有 LBP 特征,就会将累加器的值与阶段阈值进行比较。如果累加器低于阈值,则阶段失败,如果高于阈值,则通过。同样,如果一个阶段失败,则退出级联并且窗口移动到下一个位置。

LBP特征评估相对简单。在窗口内该特征的偏移处,九个矩形以 3x3 配置布局。对于特定的 LBP 特征,这九个矩形的大小都相同,范围从 1x1 到 8x8。

计算九个矩形中所有像素的总和,即它们的积分。然后,将中心矩形的积分与其八个邻居的积分进行比较。这八次比较的结果是八位(1 或 0),它们组合成一个 8 位 LBP。

这个 8 位位向量用作 2^8 == 256 位 LUT 的索引,由训练过程计算并特定于每个 LBP 特征,确定 LBP 特征是通过还是失败。

这就是它的全部。

于 2013-11-20T02:50:42.107 回答