Randel 0 Жалоба Опубликовано January 18, 2013 Здравствуйте! Использую для задачи классификации (2 класса) в том числе метод SVM из opencv. Код: void buildSVM(cv::Mat& setN, cv::Mat& setC, cv::SVM &svm) { Mat responses (setN.rows+setC.rows,1,CV_32S); Mat trainData (setN.rows+setC.rows,setN.cols,CV_32F); for (int i=0;i<setN.rows;i++) { for (int j=0;j<setN.cols;j++) trainData.at<float>(i,j)=setN.at<float>(i,j); responses.at<int>(i,0)=0; } for (int i=0;i<setC.rows;i++) { for (int j=0;j<setC.cols;j++) trainData.at<float>(i+setN.rows,j)=setC.at<float>(i,j); responses.at<int>(i+setN.rows,0)=1; } CvSVMParams params; params.svm_type = SVM::C_SVC; //SVM::NU_SVC; params.kernel_type = CvSVM::RBF; //CV::LINEAR;//CvSVM::POLY; //CvSVM::SIGMOID; svm.train_auto(trainData,responses,Mat(), Mat(), params, 10, CvSVM::get_default_grid(CvSVM::C), CvSVM::get_default_grid(CvSVM::GAMMA), CvSVM::get_default_grid(CvSVM:),CvSVM::get_default_grid(CvSVM::NU), CvSVM::get_default_grid(CvSVM::COEF), CvSVM::get_default_grid(CvSVM::DEGREE),false); }[/code] Так вот, для пары параметров SVM::C_SVC и CvSVM::RBF все прекрасно работает. Аналогично и для SVM::C_SVC + CV::LINEAR, SVM::C_SVC+ CvSVM::SIGMOID; Но по какой-то причине программа падает с "runtime eroor" при попытке построить классификатор типа SVM::NU_SVC с любым ядром. А также вылетает при C_SVC + CV::POLY; Я думал, может причина в типе данных матрицы trainData. Но уже все перепробовал - не помогает. Пробовал разные базы данных - все равно безрезультатно. В чем может быть ошибка? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано January 18, 2013 Тоже сталкивался с падением SVM с C_SVC + CV::POLY при высоких степенях полинома (3-4 вроде работали) это может быть просто баг посмотрите тут: http://code.opencv.org/search/index/opencv?q=SVM можно попробовать использовать альтернативные библиотеки: LibSVM или SVM light Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах