我的目标是训练一个 SVM 并获得支持向量,我可以将其插入 opencv 的 HOGdescriptor 进行对象检测。
我收集了 4000~ 个正例和 15000~ 个负例,并使用 opencv 提供的 SVM 进行训练。结果给了我太多的误报。(每张图像最多 20 个)我会剪掉误报并将它们添加到底片池中进行重新训练。我有时会得到更多的误报!我尝试将我的 hogdescriptor 的 L2HysThreshold 向上调整到 300,但没有显着改善。我的正面和负面的池足够大吗?
SVM 训练也比预期的要快得多。我尝试使用大小为 2916 和 12996 的特征向量,分别使用灰度图像和彩色图像。SVM 训练从未超过 20 分钟。我使用 auto_train。我是机器学习的新手,但据我所知,使用像我这样大的数据集进行训练至少需要一天时间,不是吗?
我相信 cvSVM 没有做太多的学习,根据http://opencv-users.1802565.n2.nabble.com/training-a-HOG-descriptor-td6363437.html,它不适合这个目的。有 cvSVM 经验的人对此有更多意见吗?
我正在考虑使用 SVMLight http://svmlight.joachims.org/ ,但看起来没有办法可视化 SVM 超平面。我有哪些选择?
我使用 opencv2.4.3 并为 hogdescriptor 尝试了以下设置
hog.winSize = cv::Size(100,100);
hog.cellSize = cv::Size(5,5);
hog.blockSize = cv::Size(10,10);
hog.blockStride = cv::Size(5,5); //12996 feature vector
hog.winSize = cv::Size(100,100);
hog.cellSize = cv::Size(10,10);
hog.blockSize = cv::Size(20,20);
hog.blockStride = cv::Size(10,10); //2916 feature vector