我正在编写一个滑动窗口来提取功能并将其提供给CvSVM的预测功能。 然而,我偶然发现的是svm.predict函数相对较慢。
基本上,窗口通过图像以固定的步幅长度,在图像比例的数量上滑动。
我的OpenCV构建编译为包括TBB(线程)和OpenCL(GPU)功能。
有没有人设法加快OpenCV的SVM.predict功能?
我已经在这个问题上停留了很长一段时间,因为通过我的测试数据运行这种检测算法进行统计和阈值调整是令人沮丧的。
非常感谢您通过此阅读!
答案 0 :(得分:4)
(上面的答案正式化了我的评论:)
SVM的预测算法需要O( nSV * f )时间,其中<em> nSV 是支持向量的数量和 f 是功能的数量。通过更强的正则化训练,即通过增加超参数 C (可能以预测准确度为代价),可以减少支持向量的数量。
答案 1 :(得分:2)
我不确定你提取的功能是什么,但是根据功能的大小(3780)我会说你正在提取HOG。在cv::HOGDescriptor
类中有一种非常强大,优化且快速的HOG“预测”方法。你需要做的就是
setSvmDetector()
对象cv::HOGDescriptor
方法
detect()
或detectMultiScale()
方法进行检测以下文档提供了有关如何实现您要执行的操作的非常好的信息:http://opencv.willowgarage.com/wiki/trainHOG虽然我必须警告您原始程序中存在一个小问题,但它会教您如何处理此问题问题得当。
答案 2 :(得分:0)
如Fred Foo所述,您必须减少支持向量的数量。根据我的经验,培训基础的5-10%足以具有良好的预测水平。
提高速度的另一种方法: