我需要使用OpenCV Cascades实时检测人员。目前,我正在使用OpenCV随附的经过训练的级联文件,但是稍后我将训练自己的LBP级联以提高速度。我有一个问题。
加快级联检测的方法有哪些?例如,看看this video。它真的非常快,使用Haar级联并且很好。我可以做些什么来达到这种速度,特别是对于实时应用程序?有什么花招和技巧吗?
最佳答案
我不确定您的视频示例中的“速度”是什么意思,因为很难确定在此处进行检测的“速度”是多少。在计算机视觉中,当我们谈论检测的“速度”时,通常是指单个或一组视频的每秒帧数(FPS)或算法的毫秒级运行时间。如果通过算法获得的FPS与输入视频的FPS相同,则称为实时或1倍处理速度。如果处理的FPS大于输入的FPS,则您的处理速度要比实时处理的速度快,如果处理的FPS小于输入的FPS,则处理速度要比实时处理的速度慢。当您说“速度”时,我会假设您的意思是相同的。
鉴于此,让我为您提供两种加快检测速度的方法。我真的建议您阅读这两篇在过去几年中真正为行人检测设定标准的论文:The Fastest Pedestrian Detector in the West和Pedestrian detection at 100 frames per second,它们都优化了在传统检测设置中以多种规模执行检测的计算瓶颈。后者具有公开可用的代码here和here。但这是需要改进的 Realm 之一:标尺尺寸。
在OpenCV中本机实现的方法基于Viola-Jones方法的variant,该方法扩展了检测中使用的类似Haar的特征集。要考虑的另一个改进 Realm 称为窗口化。传统的检测方法(包括在OpenCV中本机实现的检测方法)要求您在图像上按比例缩放窗口,通常是从左上角到右下角逐行滑动。解决此问题的经典方法称为Efficient Subwindow Search(ESS),它执行branch-and-bound优化。以此为基础进行了许多扩展,但这是一个开始并了解对象检测基础的好地方。
当然,现在加快检测过程的一种非常明显的方法是并行化代码,例如多线程或GPU。有几种GPU实现可公开获得,例如here使用基于支持 vector 机的检测器。
关于opencv - OpenCV:提高级联检测的速度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24949499/