【发布时间】:2013-04-17 23:54:44
【问题描述】:
我正在编写一个滑动窗口来提取特征并将其输入 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 是特征的数量。你能检查一下 SVM 模型,看看它有多少个支持向量吗?
-
我查了一下,有4417个支持向量,特征大小是3780。
-
这是一个相当大的 SVM。如果您使用更强的正则化进行训练,SV 的数量可能会减少。
-
只是从你的头顶,使用 RandomForest 比 SVM 更快吗? (不考虑精度损失)
-
抱歉,我实际上并不熟悉 OpenCV。我只是碰巧对 SVM 进行了一些攻击。
标签: opencv machine-learning computer-vision svm object-detection