哈尔瀑布与人脸检测中的LBP叶栅

我一直在OpenCV(开源计算机视觉库)中进行人脸检测的实验,发现可以使用Haar级联来检测人脸,因为OpenCV提供了几个人脸。 不过,我注意到也有几个LBP级联。 经过一番研究,我发现LBP代表Local Binary Patterns,根据OpenCV人脸检测文档 ,它也可以用于人脸检测 。

我想知道的是,哪个更好? 哪一个更快,哪个更准确? 看来LBPperformance的更快,但我也不是100%肯定的。 谢谢。

LBP速度更快(速度提高了几倍),但不够准确。 (比Haarless10-20%)。

如果你想在embedded式系统上检测人脸,我认为LBP是一种select,因为它以整数进行所有的计算。 哈尔使用浮动,这是一个embedded式/移动杀手。

可以训练LBP级联与Haar级联相似(或更好),但开箱即可,Haar级联速度慢大约3倍,根据您的数据,精确检测位置一张脸。 鉴于人脸检测可以在95%以上的准确度范围内运行,精度的提高是相当重要的。

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

当地面实况和OpenCV检测到的坐标之间至less有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 

我个人的意见是,你应该考虑LBP的所有检测相关的任务,只是因为LBP训练可能需要几分钟,而HAAR训练可能需要几天时间才能获得相同的训练数据集和参数。

根据检测到的事物的types,检测过程中使用的训练设置和参数以及testing级联的标准,您询问的问题将具有不同的性能。

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

根据Lienhart等人,2002年 ,在人脸检测的情况下:

  • 您的-numStages-maxDepth-maxWeakCount参数应该足够高以实现所需的-minHitRate-maxFalseAlarmRate
  • 基于树的训练比基于树桩更准确,
  • 柔和的adaboost优于离散和真实的adaboost,
  • 培训样本的最小规模问题,但有关系统的研究尚未完成。

另外,detectMultiScale()中使用的标志会在给定的硬件configuration上产生速度的剧烈变化以及精确度。

为了testing级联,你应该解决一个数据集和一个方法,如k-fold 交叉validation 。

可能会对你有用:

有一个Simd库 ,它具有HAAR和LBP级联分类器的实现。 它可以使用OpenCV的标准HAAR和LBP casscades。 这个实现通过使用SSE4.1,AVX2,AVX-512和NEON(ARM)进行了SIMD优化,所以它的工作速度比原来的OpenCV实现快2-3倍。

而且,在训练阶段,LBP比Haar快。 用2000个样本和300个样本,使用Haar型进行训练,大约需要5-6天才能完成,但是使用LBP只需要几个小时。

Interesting Posts