SVM分类器测试仅适用于大于训练集的图像

时间:2014-06-26 13:03:09

标签: opencv image-processing svm svmlight

我第一次实施了用于静态图像的物体检测的sw。我的第一个目标是检测简单的圆圈,然后我将移动到更复杂的对象。不幸的是,在验证分类器时我似乎遇到了问题。

我的选择是使用HOG描述符(使用OpenCv)和svm作为分类器(使用svmlight)。代码编译和工作,但有些东西听起来很奇怪,可能与svm有关。

我有:

  • 由5个图像组成的训练集48x48px的不同圆圈和5个图像48x48px的非圆圈(我知道它们太少了以便有一个固体分类器但是,最多知道,它是测试一切正常)
  • 由4个图像48x48px组成的测试集(圆圈与用于训练的圆圈一样大)和1个图像大得多(765x600px),具有多个大小的圆圈和其他几何形状。

会发生什么:

  • 当图像为48x48时,未检测到测试集中的圆圈,即使在测试集中有一些图像在训练阶段使用。
  • 在图像765x800(包含任意大小的圆圈)中,正确识别与训练集大小相同或更大的圆圈。

我使用以下参数:

  • hog:winSize = 48x48px,winStride = 4x4px,cellSize = 4px,blockSize = 8px,blockStride = 4x4px
  • 分类器:使用线性分类器进行svm回归,C = 0.01。 (RBF结果比线性更差)

这是使用参数I' m执行检测的api。

vector<Rect> found;
double hitThreshold = 0.; // tolerance
Size padding(Size(32, 32));
double scale = 1.05;
int groupThreshold = 2;
hog.detectMultiScale(testImg, found, hitThreshold, win_stride, padding, scale, groupThreshold);

是否有任何理由不检测图像48x48px中的圆圈并检测到较大图像中的圆圈?我希望48x48px图像能够正确分类,以验证分类器。当在48x48px图像中没有检测到任何内容时,我添加了更大的图像。

此外,听起来更奇怪的是,在48x48ps测试集中,训练集中使用了一些图像,我认为必须识别它们,而不是它们! (我知道训练集和测试集必须不同,但是当没有检测到任何东西时我就这样做了。)

这是我第一次使用hog描述符和svm,因为配置错误或图像选择可能无法正常工作..

欢迎任何帮助!

提前致谢:)

0 个答案:

没有答案