我正在写一个滑动窗口提取特征,并将其送入CvSVM的预测功能。 不过,我已经偶然发现的是,svm.predict功能是比较慢的。
基本窗口滑动通固定步长,使图像尺度的数目的图像。
- 遍历图像加上每个窗口中提取特征的速度需要约1000毫秒(1秒)。
- 通过AdaBoost的训练的弱分类纳入导致约1200毫秒(1.2秒)
- 然而,当我通过功能(已被标记为弱分类正)到svm.predict功能,整体运行速度减慢至约16000毫秒(16秒)
- 试图收集所有的“积极”的特点首先,传递给svm.predict利用TBB的线程导致19000毫秒(19秒)之前,可能是由于创建线程所需要的开销,等等。
我OpenCV的构建被编译为包括TBB(线程)和OpenCL(GPU)的功能。
有没有人管理,加快OpenCV的的SVM.predict功能?
我一直停留在这个问题上相当一段时间,因为它是令人沮丧通统计和阈值调整我的测试数据运行此检测算法。
非常感谢读通过这个!
(答案发布到正式我的意见,上述:)
对于SVM预测算法需要O(NSV * F)时间,其中NSV是支持向量的数量,f是特征的数量。 可以通过用更强的正则化,通过(在预测准确性成本可能)增加超参数Ç即训练可以减少支持向量的数量。
我不知道什么功能,你都提取但是从你的特征(3780)的尺寸,我会说你是提取HOG。 有生猪“预测”的一个非常强大的,优化的,快速的方法cv::HOGDescriptor
类。 所有你需要做的是
- 提取您的训练猪
- 把它们放在svmLight格式
- 使用svmLight线性核训练模型
- 计算必要用于预测的3780 + 1维矢量
- 喂矢量
setSvmDetector()
的方法cv::HOGDescriptor
对象 - 使用
detect()
或detectMultiScale()
进行检测的方法
下面的文档有关于如何实现你正在试图做的非常好的信息: http://opencv.willowgarage.com/wiki/trainHOG虽然我必须警告你,没有在原程序的一个小问题,但它教会你如何正确地处理这个问题。