培训cv:ml :: DTrees时如何修复“断言失败”

时间:2019-01-13 19:53:59

标签: c++ opencv decision-tree training-data

我想训练具有生猪特征的决策树。 当我尝试训练我的cv :: ml :: DTrees模型时,收到以下错误:

OpenCV(3.4.3) Error: Assertion failed (n >= 0) in cv::ml::TrainDataImpl::getValues, file C:\build\3_4_winpack-build-win64-vc14\opencv\modules\ml\src\data.cpp, line 890

我了解,样本(功能)的数量必须与响应(标签)的数量相匹配,并且两者均必须> = 0。 我的cv :: Mat特性和cv :: Mat标签具有相同的行数(388)。

这是我尝试执行的操作:

cv::Ptr<cv::ml::DTrees> model = cv::ml::DTrees::create();
cv::Ptr<cv::ml::TrainData> data = cv::ml::TrainData::create(feats, cv::ml::ROW_SAMPLE, labels);
model->train(data);

model-> train(data)调用此函数时失败:

void getValues( int vi, InputArray _sidx, float* values ) const CV_OVERRIDE
    {
        Mat sidx = _sidx.getMat();
        int i, n = sidx.checkVector(1, CV_32S), nsamples = getNSamples();
        CV_Assert( 0 <= vi && vi < getNAllVars() );
        CV_Assert( n >= 0 );
        const int* s = n > 0 ? sidx.ptr<int>() : 0;
        if( n == 0 )
            n = nsamples;
        }
}

有人可以指出正确的方向来解决此问题吗?

编辑: 如果将MinSampleCount设置为388(样本数),我不会收到错误,但预测将无法正常工作(它始终返回标签5)。

0 个答案:

没有答案