Haar Cascades与人脸检测中的LBP级联

时间:2012-01-09 15:53:58

标签: opencv cascade face-detection haar-wavelet viola-jones

我一直在OpenCV(开源计算机视觉库)中进行面部检测实验,发现人们可以使用Haar级联来检测面部,因为其中有几个提供了OpenCV。但是,我注意到还有几个LBP级联。经过一些研究,我发现LBP代表局部二进制模式,根据OpenCV Face Detection Documentation,它也可以用于人脸检测。

我想知道的是哪个更好?哪一个表现得更快,哪一个更准确?似乎LBP表现得更快,但我也不是100%肯定。感谢。

5 个答案:

答案 0 :(得分:59)

LBP更快(速度提高几倍)但准确度更低。 (比哈尔少10-20%)。

如果你想在嵌入式系统上检测面部,我认为LBP是选择,因为它以整数进行所有计算。哈尔使用浮动,这是嵌入式/移动的杀手。

答案 1 :(得分:22)

LBP级联可以训练以与Haar级联相似(或更好)执行,但是开箱即用,Haar级联速度大约慢3倍,并且根据您的数据,准确检测的效率提高约1-2%一张脸的位置。鉴于人脸检测可以在95%+精度范围内运行,这种准确度的提高非常显着。

以下是使用MUCT数据集时的一些结果。

当地面实况和OpenCV检测到的坐标之间至少有50%的重叠时,会注意到正确的检测。

Cascade:haarcascade_frontalface_alt2.xml
Datafile:muct.csv
|---------------------------------------------------|
|   Hits  |  Misses  | False Detects  | Multi-hit   |
|  3635   |   55     |   63           |    5        |
|---------------------------------------------------|
Time:4m2.060s

VS

Cascade:lbpcascade_frontalface.xml
Datafile:muct.csv
|---------------------------------------------------|
|   Hits  |  Misses  | False Detects  | Multi-hit   |
| 3569    |  106     |   77           |    3        |
|---------------------------------------------------|
Time:1m12.511s

答案 2 :(得分:13)

我个人认为,您应该查看LBP所有与检测相关的任务,因为LBP培训可能需要几分钟,而HAAR培训可能需要数天才能获得相同的培训数据集和参数。

您提出的问题将具有不同的性能,具体取决于被检测物的类型,训练设置和检测期间使用的参数以及测试级联的标准。

HAAR和LBP级联的准确性取决于用于训练它们的数据集(阳性和阴性样本)以及训练期间使用的参数。

根据Lienhart et al, 2002,在面部检测的情况下:

  • 您的-numStages-maxDepth-maxWeakCount参数应足够高,以达到所需的-minHitRate-maxFalseAlarmRate
  • 基于树的培训比基于树桩的培训更准确,
  • 温和的adaboost优于离散和真正的adaboost,
  • 训练样本的最小尺寸很重要,但尚未对其进行系统研究。

此外,detectMultiScale()中使用的标志会在给定硬件配置上产生速度和精度的急剧变化。

要测试级联,您应确定数据集以及k-fold cross validation等方法。

答案 3 :(得分:10)

可能会对你有用:

Simd Library,其中有implementation个HAAR和LBP级联分类器。它可以使用OpenCV的标准HAAR和LBP casscades。该实现具有使用SSE4.1,AVX2,AVX-512和NEON(ARM)的SIMD优化,因此其工作速度比原始OpenCV快2-3倍。

答案 4 :(得分:7)

此外,在训练阶段,LBP比哈尔快。使用哈尔类型的2000个样本和300个样本进行训练,完成需要大约5-6天,但是使用LBP只需要几个小时。