Классификатор 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