Опитвам се да обуча SVM със SIFT дескриптори, взети от изображения. След това искам да запазя SVM във формат .xml
, за да мога да го заредя отново.
Моята структура: Имам 10 класа със 100 проби от всеки клас.
Въпрос: Ако използвам 10-50 проби за всеки клас, тогава SVM се запазва и мога да видя classifer.xml
файл в моята папка. Но ако искам да използвам повече проби, напр. ~100 проби на клас, тогава SVM не се запазва.
Мислех, че може да отнеме известно време, докато се запази, но вече чаках толкова дълго (и го направих няколко пъти).
Моят код за SVM обучение е следният:
void svm::svmTrain()
{
cv::Mat trainme; // it should contain the feature vectors
cv::Mat labels; // it will contain the class labels
createTrainingDateUsingBOW( trainme, labels);
//svm parameters
CvTermCriteria criteria = cvTermCriteria(CV_TERMCRIT_EPS, 1000, FLT_EPSILON);
CvSVMParams svm_params = CvSVMParams (CvSVM::C_SVC, CvSVM::POLY, 10.0 , 8.0 , 1.0 , 10.0 , 0.5 , 0.1 , NULL , criteria); //CvSVMParams --it is a struct
//( svm_type, kernel_type, degree , gamma , coef0 , Cvalue, nu , p , class_weights, term_crit)
cout<<"\n saving SVM \n";
cv::SVM svm;
svm.train(trainme, labels, cv::Mat(), cv::Mat(), svm_params);
svm.save("classifier.xml");
cout<<"\n SVM classifier is saved.";
}
PS: Така че, ако моите проби са повече от 40-60 на клас, тогава достигам до saving SVM
от горния код, но никога не достигам до SVM classifier is saved.