我在OpenCV中使用SVM和HOG来实现人员检测。使用我自己的数据集:3000个阳性样本和6000个阴性样本。我的问题是SVM每次检测人时都需要学习吗?如果是这样的话,学习时间和预测时间可能会非常耗时。有什么方法可以实现实时人员检测吗?提前谢谢。
谢谢你的回答。我已经得到了训练后的xml结果(3000个正和6000个负(,所以我可以用这个结果来写另一个独立的程序,只需要使用svm.load((和svm.predict((?太好了。此外,我发现1000个检测窗口大小的图像(128x64(的预测时间也相当耗时(约10秒(,那么它如何处理使用1或2个像素实时扫描步长的正常监控摄像头捕获(320x240或更高(?
我根据原始论文实现了HOG,每个单元8x8个像素,每个块2x2个单元(50%重叠(,因此一个检测窗口的3780维矢量(128x64(。时间问题是由巨大的特征向量引起的吗?我应该缩小每个窗口的尺寸吗?
这是一个针对一般主题的非常具体的问题。
简言之:不,你不需要每次都想使用SVM来学习。这是一个两步走的过程。第一步,学习(在你的情况下,通过向你的学习算法提供许多标记的(包含、不包含(包含人或不包含人的图片(,产生一个模型,用于第二步:测试(在你情况下,检测人(。
不,您不必每次都重新训练svm。
训练一次,然后svm将训练好的模型保存到xml/yml文件中。
稍后您只需要svm.load((,而不是(重新(训练,并进行预测