私はこれに固執しています。OpenCV SVMが電車に例外を投げている、「不正な引数(クラスは1つだけです)」
私は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);
'extractBOWDescriptor'は正確に何をしますか? 'trainingData'と' labels'のサイズは? – luhb
extractBOWDescriptorは、ファイルのリストをただちに検索し、(SURFフィーチャディテクタを使用して)フィーチャを見つけ出し、フィーチャを抽出し、trainingDataにプッシュして、ラベルにエントリをプッシュします。 – tuck
トレーニングデータのサイズはdictionary_size x 2であり、ラベルはnumber_of_images x 2 – tuck