【发布时间】:2013-08-29 05:18:22
【问题描述】:
我的目标是训练一个支持向量机并获得支持向量,我可以将其插入到 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
【问题讨论】:
-
如果您使用的描述符是大约 3000 或 10,000 的维度,您不应该使用更多的训练数据吗?我记得,根据经验,训练数据的大小应该是问题维度的 10 倍左右。这不正确吗?