简体   繁体   English

如何为SVM培训OpenCV3形成数据

[英]How to form data for SVM training OpenCV3

I am trying to write utility for training svm classifier for image classification in OpenCV3. 我正在尝试编写实用程序来训练svm分类器以在OpenCV3中进行图像分类。 But I have Floating point exception (core dumped) error during training process. 但是我在训练过程中出现了浮点异常(核心转储)错误。

My main problem is that I don't know, I'm not sure exactly how to form training data to feed svm.train method. 我的主要问题是我不知道,我不确定如何形成训练数据来馈送svm.train方法。

This is code which is forming training data. 这是形成训练数据的代码。

TrainingDataType SVMTrainer::prepareDataForTraining() {

    cv::Mat trainingData(m_numOfAllImages, 28*28, CV_32FC1);
    cv::Mat trainingLabels(m_numOfAllImages, 1, CV_32FC1);

    int rowNum = 0;


    // Item is pair of classId (int) and vector of images.
    for(auto item : m_data){
        int classId = item.first;
        for(auto item1 : item.second){
            Mat temp = item1.reshape(1,1);
            temp.copyTo(trainingData.row(rowNum));

            trainingLabels.at<float>(rowNum) = item.first;
            ++rowNum;
        }
    }

    return cv::ml::TrainData::create(trainingData,
                                     cv::ml::SampleTypes::ROW_SAMPLE, 
                                     trainingLabels) ;

}

void SVMTrainer::train(std::string& configPath){
    // Read and store images in memory.
    formClassifierData(configPath);

    m_classifier = cv::ml::SVM::create();
    // Training parameters:
    m_classifier->setType(cv::ml::SVM::C_SVC);
    m_classifier->setKernel(cv::ml::SVM::POLY);
    m_classifier->setGamma(3);  
    m_classifier->setDegree(3);

    TrainingDataType trainData =  prepareDataForTraining();

    m_classifier->trainAuto(trainData);

}

All images are already prepared with dimensions 28*28, black&white. 所有图像均已准备好尺寸为28 * 28(黑白)。

And actual train call is in this method 而实际的火车通话就是这种方法

Can somebody tell me what I am doing wrong. 有人可以告诉我我在做什么错。

Thanks, 谢谢,

Its simple. 这很简单。 Change the label format to CV_32SC1. 将标签格式更改为CV_32SC1。 It will definitely resolve your issue in opencv 3.0 ml. 它将完全解决您在opencv 3.0 ml中的问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM