Pea*_*Gen 3 opencv image-processing computer-vision cascade-classifier
我需要使用 OpenCV Cascades 实时检测人员。目前我正在使用 OpenCV 附带的经过训练的级联文件,但稍后我将训练我自己的 LBP 级联以实现更高的速度。我有一个问题。
有什么方法可以加快级联检测的速度?例如,看看这个视频。它真的很快,使用 Haar 级联并且很好。我可以做些什么来达到这种速度,特别是对于实时应用程序?任何技巧和窍门?
我不确定您在视频示例中所说的“速度”是什么意思,因为很难确定在那里进行检测的“速度”是多少。在计算机视觉中,当我们谈论检测的“速度”时,我们通常指的是每秒帧数 (FPS) 或算法对单个或一组视频的毫秒运行时间。如果算法实现的 FPS 与输入视频的 FPS 相同,则称为实时或 1 倍处理速度。如果处理 FPS 大于输入 FPS,则您的处理速度比实时处理快,如果它更小,则您的处理速度比实时慢。当你说“速度”时,我会假设你的意思是一样的。
鉴于此,让我为您提供两种加速检测的方法。我真的建议阅读这两篇论文,它们在过去几年中真正为行人检测树立了标杆:The Fastest Pedestrian Detector in the West和Pedestrian detection at 100 frames per second,两者都优化了在多尺度执行检测的计算瓶颈在传统的检测设置中。后者在此处和此处具有公开可用的代码。但这是需要改进的领域之一:规模大小。
在 OpenCV 中本地实现的方法基于Viola-Jones 方法的变体,该方法扩展了检测中使用的类 Haar 特征集。另一个需要考虑的改进领域称为窗口化。传统的检测方法,包括在 OpenCV 中本地实现的方法,要求您在图像上按比例滑动窗口,通常是从左上角到右下角逐行滑动。解决此问题的经典方法称为高效子窗口搜索 (ESS),它执行分支定界优化。已经有许多扩展构建于此,但它是开始和理解对象检测基础知识的绝佳场所。
现在,当然,加速检测过程的一种非常明显的方法是并行化您的代码,例如多线程或 GPU。有几种公开可用的 GPU 实现,例如这里使用基于支持向量机的检测器。