我正在编写一个滑动窗口来提取特征并将其输入到CvSVM的predict函数中。然而,我发现svm.predict函数相对较慢。
基本上,窗口以固定的步长滑过图像,并在多个图像尺度上进行操作。
- 遍历图像并为每个窗口提取特征的速度大约需要1000毫秒(1秒)。
- 包含由adaboost训练的弱分类器后,总时间增加到大约1200毫秒(1.2秒)。
- 然而,当我将被弱分类器标记为正的特征传递给svm.predict函数时,总体速度下降到大约16000毫秒(16秒)。
- 尝试先收集所有“正”特征,然后使用TBB的线程传递给svm.predict,结果是19000毫秒(19秒),可能是由于创建线程等所需的开销。
我的OpenCV构建版本包含了TBB(线程处理)和OpenCL(GPU)功能。
有没有人设法加速OpenCV的SVM.predict函数?
我已经在这个问题上卡了相当长的时间,因为通过我的测试数据运行这个检测算法来进行统计和阈值调整非常令人沮丧。
非常感谢您阅读这篇文章!
回答:
(回答发布以正式化上述评论:)
SVM的预测算法需要O(nSV * f)时间,其中nSV是支持向量的数量,f是特征的数量。通过使用更强的正则化训练,即增加超参数C,可以减少支持向量的数量(可能以牺牲预测准确性为代价)。