【问题标题】:Haar Cascades vs. LBP Cascades in Face Detection [closed]人脸检测中的 Haar Cascades 与 LBP Cascades [关闭]
【发布时间】:2012-02-06 03:36:56
【问题描述】:

我一直在 OpenCV(开源计算机视觉库)中尝试人脸检测,发现可以使用 Haar 级联来检测人脸,因为 OpenCV 提供了几种人脸。但是,我注意到还有几个 LBP 级联。经过一番研究,我发现LBP代表Local Binary Patterns,它也可以用于人脸检测,根据OpenCV Face Detection Documentation

我想知道的是,哪个效果更好?哪一个执行得更快,哪一个更准确?似乎 LBP 执行得更快,但我也不是 100% 确定这一点。谢谢。

【问题讨论】:

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


    【解决方案1】:

    LBP 更快(快几倍)但不太准确。 (比 Haar 少 10-20%)。

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

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

    【讨论】:

    • opencv 在人脸检测中使用 LBP 算法参考了哪篇论文? 《基于多块 LBP 表示的人脸检测》?
    【解决方案2】:

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

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

    当 ground-truth 和 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
    

    【讨论】:

    • 显然 LBP 不太准确
    • 显然,LBP 要快得多。
    【解决方案3】:

    我个人的意见是,您应该为所有与检测相关的任务研究 LBP,因为 LBP 训练可能需要几分钟,而 HAAR 训练可能需要几天时间来处理相同的训练数据集和参数。

    您提出的问题将根据所检测事物的类型、训练设置和检测期间使用的参数以及测试级联的标准而具有不同的性能。

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

    根据Lienhart et al, 2002,在人脸检测的情况下:

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

    此外,detectMultiScale() 中使用的标志会在给定硬件配置上产生巨大的速度和准确性变化。

    为了测试级联,您应该选择一个数据集和一个方法,例如 k-fold cross validation

    【讨论】:

      【解决方案4】:

      可能对你有用:

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

      【讨论】:

        【解决方案5】:

        另外,在训练阶段,LBP 比 Haar 更快。 2000 pos 样本和 300 neg 样本,使用 Haar 类型训练,大约需要 5-6 天才能完成,而使用 LBP,只需要几个小时。

        【讨论】:

          猜你喜欢
          • 2017-08-08
          • 2017-02-23
          • 2013-08-06
          • 2013-12-02
          • 2011-11-14
          • 2017-12-05
          • 2016-02-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多