Sono bloccato su questo.OpenCV SVM lancio dell'eccezione sul treno, "Argomento non valido (esiste solo una classe)"
Sto provando a eseguire alcune classificazioni di oggetti tramite il framework 2d di OpenCV, ma sto riscontrando problemi nell'addestramento del mio SVM.
Sono in grado di estrarre i vocabolari e raggrupparli con BowKMeansTrainer, ma dopo aver estratto le funzionalità dai dati di allenamento da aggiungere al trainer e aver eseguito il metodo SVM.train, ottengo la seguente eccezione.
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
Ho provato modificando dimensione del dizionario, utilizzando diversi formatori, assicurando miei tipi di matrice sono corrette (al meglio delle mie capacità, ancora nuovo opencv).
Qualcuno ha visto questo errore o ha qualche idea su come risolverlo?
Il mio codice è simile al seguente:
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);
Cosa fa esattamente "extractBOWDescriptor'? E qual è la dimensione di 'trainingData' e' labels'? – luhb
extractBOWDescriptor esegue semplicemente un itereat attraverso un elenco di file, trova le caratteristiche (utilizzando il rilevatore di funzioni SURF), estrae quelle funzionalità, le spinge ai dati di formazione e quindi inserisce una voce nelle etichette. – tuck
la dimensione dei dati di allenamento è dictionary_size x 2 e label is number_of_images x 2 – tuck