OpenCV:提高级联检测的速度

时间:2014-07-25 06:38:05

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

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

加快级联检测的方法有哪些?例如,请查看this video。它真的很快,使用Haar级联和漂亮。我能做些什么来达到这个速度,特别是对于实时应用?任何技巧和黑客?

4 个答案:

答案 0 :(得分:4)

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

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

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

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

答案 1 :(得分:3)

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

答案 2 :(得分:0)

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

这里有一篇关于你的级联检测速度的文件,Ihope这将有助于

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

答案 3 :(得分:0)

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