当前位置: 首页 > 知识库问答 >
问题:

SVM训练错误(示例类型的断言失败)

欧阳洲
2023-03-14
Mat response_hist;
Mat histograms;
Mat classes;
ifstream ifs("train.txt");
int total_samples_in_file = 0;
vector<string> classes_names;
vector<string> lines;


for (int i = 1; i <= trainingSetSize; i++){
    cout << "in for loop iteration"<< i << endl;
    _snprintf_s(filepath, 100, "C:/Users/Randal/Desktop/TestCase1Training/train/%d.bmp", i);
    Mat temp = imread(filepath, CV_LOAD_IMAGE_GRAYSCALE);
    Mat tempBW;
    adaptiveThreshold(temp, tempBW, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, 11, 2);
    detector->detect(tempBW, keypoints1);
    BOW.compute(tempBW, keypoints1, response_hist);
    response_hist.convertTo(response_hist, CV_32F);
    histograms.push_back(response_hist);
}

    //read from the file - ifs and put into a vector
    std::string line;
    float class_num;
    string imgfilepath;
    for (int j = 1; getline(ifs, line); j++)
        {
            istringstream ss(line);             
            ss >> imgfilepath >> class_num;
            classes.push_back(class_num);

        }
Ptr<ml::SVM> svm = ml::SVM::create();

svm->setType(ml::SVM::C_SVC);
svm->setKernel(ml::SVM::POLY);
svm->setGamma(3);

Mat trainingDataMat(histograms);
Mat trainingDataClass(classes);

trainingDataMat.convertTo(trainingDataMat, CV_32F);
trainingDataMat = trainingDataMat.reshape(trainingDataMat.cols, 1);
trainingDataClass.convertTo(classes, CV_32F);
svm->train(trainingDataMat, ml::ROW_SAMPLE, trainingDataClass); //incorrect types? I think it is a problem with ROW_SAMPLE
Mat res;   // output
svm->predict(output, res);

运行此操作时,我得到错误“Assertion failed(Samples.type()==CV_32F samples.type()==CV_32S)in cv::ML::TrainDataImpl::SetData”。但是,我已经放入了几行代码,将我的类Mat和直方图Mat转换为cv_32f类型。问题是与我的输入有关,还是与SVM->Train中的ROW_SAMPLE有关?非常感谢任何帮助。

谢谢

共有1个答案

松鸣
2023-03-14

错误是由于我的输入不正确造成的。我在它的声明中将Mat类的类型更改为CV_32S。我也变了

trainingdatamat_32.reshape(trainingdatamat_32.cols,1);

以具有正确的通道和行数。

这导致了一个关于我正在使用的内核的新错误(SVM参数“poly”)。我不得不在kernel参数的正下方添加另一行:

SVM->SetDegree(3);

这修复了错误。我的输出不正确,但这解决了断言失败。

 类似资料:
  • 我正在尝试编写一个android静态编程语言应用程序,但我得到了以下错误。我哪里出错了? 这是我如何声明我的HashMap: 错误: 类型推断失败。没有足够的信息来推断构造函数HashMap中的参数K。请明确说明

  • 我有一个多类数据集,正在尝试使用对每个类进行分类。 因此,我想知道如何在每个类上训练<code>OneClassSVM()

  • 7.11. 基于类型断言区别错误类型 思考在os包中文件操作返回的错误集合。I/O可以因为任何数量的原因失败,但是有三种经常的错误必须进行不同的处理:文件已经存在(对于创建操作),找不到文件(对于读取操作),和权限拒绝。os包中提供了这三个帮助函数来对给定的错误值表示的失败进行分类: package os func IsExist(err error) bool func IsNotExist(

  • 本文向大家介绍python PyTorch预训练示例,包括了python PyTorch预训练示例的使用技巧和注意事项,需要的朋友参考一下 前言 最近使用PyTorch感觉妙不可言,有种当初使用Keras的快感,而且速度还不慢。各种设计直接简洁,方便研究,比tensorflow的臃肿好多了。今天让我们来谈谈PyTorch的预训练,主要是自己写代码的经验以及论坛PyTorch Forums上的一些回

  • 我试图使用官方OpenNLP网站手册示例来训练一个新模型,以下是示例: 问题出在2º线上, 帮我说:不赞成。改用PlainTextByLineStream(InputStreamFactory,Charset)。但是我不知道如何使用这个构造函数。我想举一个例子,使用同一个语料库文件使用这个未弃用的构造函数。 我已经编写了下一段代码,使用opennlp帮助和两种使用train方法的方法,不推荐的和建

  • 本文向大家介绍浅谈golang类型断言,失败类型断言返回值问题,包括了浅谈golang类型断言,失败类型断言返回值问题的使用技巧和注意事项,需要的朋友参考一下 失败的类型断言,返回的值为最近断言类型的零值 代码入下: 补充:go语言interface{}类型断言的举例使用 在go语言里经常会用到interface{}类型,它是类似于c语言中的void *类型,可以接受任意类型的参数。当我们的函数或