SVM класификаторът не се записва в .xml?

Опитвам се да обуча 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.


person skm    schedule 24.02.2014    source източник


Отговори (1)


опитайте тази замяна, ще откриете, че отнема твърде много време за обучение, след тренировка едва ли отнема минута, за да запазите файла.

cout<<"\n training SVM \n";

cv::SVM svm;
svm.train(trainme, labels, cv::Mat(), cv::Mat(), svm_params);
cout<<"\n saving SVM \n";
svm.save("classifier.xml");

cout<<"\n SVM classifier is saved.";

Никога лично не съм имал опит със SVM, но с до 1000 проби, той няма да се обучи за по-малко от час. В моя случай, когато пробвах неща за рибари с подобен брой проби, отне повече от 2-3 часа.

person 4nonymou5    schedule 24.02.2014
comment
с 35 проби/клас се записва в рамките на минута, но ако избера 40 проби/клас...не се записва...не е ли странно? (Все още не съм пробвал твоето предложение) - person skm; 24.02.2014
comment
о, да, звучи странно, не мога да отгатна причината за това. - person 4nonymou5; 25.02.2014