【问题标题】:OpenCV: Improving the speed of Cascades detectionOpenCV:提高级联检测的速度
【发布时间】:2014-09-16 22:34:13
【问题描述】:

我需要使用 OpenCV Cascades 实时检测人员。目前我正在使用 OpenCV 附带的经过训练的级联文件,但稍后我将训练自己的 LBP 级联以实现更快的速度。我确实有一个问题。

加速检测级联的方法有哪些?例如,查看this video。它非常快,使用 Haar 级联并且很好。我可以做些什么来达到这个速度,特别是对于实时应用程序?有什么技巧和窍门吗?

【问题讨论】:

    标签: opencv image-processing computer-vision cascade-classifier


    【解决方案1】:

    我不确定您在视频示例中所说的“速度”是什么意思,因为很难确定在那里进行的检测是什么“速度”。在计算机视觉中,当我们谈论检测的“速度”时,我们通常指的是单个或一组视频的每秒帧数 (FPS) 或算法的毫秒运行时间。如果算法实现的 FPS 与输入视频的 FPS 相同,则称为实时或 1x 处理速度。如果处理 FPS 大于输入 FPS,则您的处理速度比实时处理快,如果它更小,那么您的处理速度比实时慢。我会假设你说“速度”时的意思是一样的。

    鉴于此,让我给你两种方法来加快检测速度。我真的建议阅读这两篇在过去几年中真正为行人检测设定标准的论文:The Fastest Pedestrian Detector in the West 和Pedestrian detection at 100 frames per second,它们都优化了在传统检测设置中执行多尺度检测的计算瓶颈。后者具有公开可用的代码here 和here。但这是需要改进的领域之一:规模大小。

    OpenCV 中本机实现的方法基于 Viola-Jones 方法的variant,该方法扩展了检测中使用的 Haar 类特征集。另一个需要考虑的改进领域称为windowing。传统的检测方法,包括在 OpenCV 中本地实现的检测方法,要求您在图像上按比例滑动窗口,通常是从左上角到右下角逐行滑动。解决此问题的经典方法称为 Efficient Subwindow Search (ESS),它执行 branch-and-bound 优化。已经有很多扩展基于此构建,但它是开始和了解对象检测基础知识的绝佳场所。

    当然,加速检测过程的一种非常明显的方法是并行化您的代码,例如多线程或GPU。有几种公开可用的 GPU 实现,例如here 使用基于支持向量机的检测器。

    【讨论】:

      【解决方案2】:

      如果您需要提高 HAAR 级联检测的速度,我建议您使用Simd Library,它改进了 HAAR 和 LBP 级联分类器的implementations(它们使用 SSE4.1、AVX2 和 NEON(ARM) ,所以它的工作速度比原来的 OpenCV 快 2-3 倍)。请注意,它可以使用来自 OpenCV 的标准 HAAR 和 LBP 级联。

      【讨论】:

        【解决方案3】:

        处理图像处理时的一个主要因素是输入图像的大小。考虑缩小图像。在您的示例中,汽车以已知方向和合理可预测的速度移动,因此在检测到汽车的情况下,可以在下一帧中搜索该区域周围图像的感兴趣区域部分检测速度更快。

        【讨论】:

          【解决方案4】:

          https://www.cs.cmu.edu/~efros/courses/LBMV07/Papers/viola-cvpr-01.pdf

          这是一篇关于提高级联检测速度的论文,希望对您有所帮助

          http://www.nicta.com.au/pub?doc=1138

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-10-26
            • 2019-10-12
            • 2013-10-23
            • 1970-01-01
            • 1970-01-01
            • 2022-06-30
            • 2011-04-15
            相关资源
            最近更新 更多