SVM分类器没有保存在“.xml”中?

时间:2014-02-24 15:15:59

标签: c++ xml opencv filesystems libsvm

我正在尝试使用从图像中获取的SIFT描述符来训练SVM。然后我想以.xml格式保存SVM,以便我可以再次加载它。

我的结构:我有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但从未到达{{1 }}

1 个答案:

答案 0 :(得分: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小时。