gpt4 book ai didi

c++ - OpenCV SVM 在火车上抛出异常, "Bad argument (There is only a single class)"

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:08:05 33 4
gpt4 key购买 nike

我卡在这个了。

我正在尝试通过 OpenCV 特征 2d 框架进行一些对象分类,但在训练我的 SVM 时遇到了麻烦。

我能够提取词汇表并使用 BowKMeansTrainer 对它们进行聚类,但在我从训练数据中提取特征以添加到训练器并运行 SVM.train 方法后,出现以下异常。

OpenCV Error: Bad argument (There is only a single class) in     cvPreprocessCategoricalResponses, file /home/tbu/prog/OpenCV-2.4.2/modules/ml/src    /inner_functions.cpp, line 729
terminate called after throwing an instance of 'cv::Exception'
what(): /home/tbuchy/prog/OpenCV-2.4.2/modules/ml/src/inner_functions.cpp:729: error: (-5) There is only a single class in function cvPreprocessCategoricalResponses

我已经尝试修改字典大小,使用不同的培训师,确保我的矩阵类型是正确的(尽我所能,对 opencv 来说仍然是新手)。

有没有人看到过这个错误或对如何修复它有任何见解?

我的代码是这样的:

trainingPaths = getFilePaths();
extractTrainingVocab(trainingPaths);
cout<<"Clustering..."<<endl;
Mat dictionary = bowTrainer.cluster();
bowDE.setVocabulary(dictionary);


Mat trainingData(0, dictionarySize, CV_32FC1);
Mat labels(0, 1, CV_32FC1);
extractBOWDescriptor(trainingPaths, trainingData, labels);


//making the classifier
CvSVM classifier;
CvSVMParams params;
params.svm_type = CvSVM::C_SVC;
params.kernel_type = CvSVM::LINEAR;
params.term_crit = cvTermCriteria(CV_TERMCRIT_ITER, 100, 1e-6);

classifier.train(trainingData, labels, Mat(), Mat(), params);

最佳答案

根据错误,您的标签 似乎只包含一类数据。也就是说,trainingData 中的所有特征都具有相同的标签。

例如,假设您正尝试使用 SVM 来确定图像中是否包含猫。如果 labels 中的每个条目都相同,则要么...

  • 你所有的训练图像都被标记为“是的,这是一只猫”
  • 或者,您所有的训练图像都被标记为“不,这不是猫。”

SVM 试图分离两类(有时更多)数据,因此如果您只提供一类数据,SVM 库会报错。

要查看是否是这个问题,我建议添加一个打印语句来检查 labels 是否只包含一个类别。这是执行此操作的一些代码:

//check: are the printouts all the same?
for(int i=0; i<labels.rows; i++)
for(int j=0; j<labels.cols; j++)
printf("labels(%d, %d) = %f \n", i, j, labels.at<float>(i,j));

一旦您的 extractBOWDescriptor() 将数据加载到 labels 中,我假设 labels 的大小为 (trainingData.rows , trainingData.cols)。如果不是,这可能是个问题。

关于c++ - OpenCV SVM 在火车上抛出异常, "Bad argument (There is only a single class)",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13304714/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com