Haar级联和LBP级联在人脸检测中的区别

59

我一直在OpenCV(开源计算机视觉库)中尝试人脸检测,并且发现可以使用Haar级联来检测人脸,因为OpenCV提供了多种级联。然而,我注意到也有几个LBP级联。经过一些研究,我发现LBP代表局部二值模式,根据OpenCV人脸检测文档,它也可以用于人脸检测。

我想知道的是哪个更好?哪一个执行速度更快,哪一个更精确?似乎LBP的执行速度更快,但我也不完全确定。谢谢。

5个回答

70

LBP比Haar更快(快几倍),但是精度较低(比Haar低10-20%)。

如果您想在嵌入式系统上检测人脸,则LBP是默认选择,因为它的计算使用整数。

Haar使用浮点数进行处理,在嵌入式和移动处理器上支持较差。因此,性能损失非常大,足以使其在手机上的使用不切实际。


1
OpenCV在人脸检测中使用的LBP算法参考了哪篇论文?是《基于多块LBP表示的人脸检测》吗? - Samuel

28

一个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

对比:

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

1
显然,LBP的准确性较低。 - FindOutIslamNow
1
显然,LBP更快。 - james-see

14

我个人的看法是,对于所有检测相关任务,您应该考虑使用LBP,因为LBP训练只需几分钟,而对于相同的训练数据集和参数,HAAR训练可能需要数天。

您所提出的问题将根据被检测物体的类型、训练设置和检测过程中使用的参数以及测试级联的标准而有不同的性能表现。

HAAR和LBP级联的准确性取决于用于训练它们的数据集(正样本和负样本)以及训练过程中使用的参数。

根据Lienhart等人(2002年)的研究,在面部检测的情况下:

  • 您的-numStages-maxDepth-maxWeakCount参数应足够高,以达到所需的-minHitRate-maxFalseAlarmRate
  • 基于树的训练比基于单层决策树的更准确,
  • 缓慢的Adaboost优于离散和真实的Adaboost,
  • 训练样本的最小尺寸很重要,但关于它的系统研究还没有完成。

此外,在detectMultiScale()中使用的标志在给定的硬件配置上速度和准确性方面产生了显着变化。

对于级联测试,您应该选择数据集和一种方法,例如k-fold 交叉验证


11

这可能对你有用:

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


7

此外,在训练阶段,LBP比Haar更快。使用2000个正样本和300个负样本进行Haar类型的训练,需要5-6天才能完成,但是使用LBP只需要几个小时。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接