私はこれで立ち往生しています。
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);