Я занимаюсь машинным обучением в OpenCV и использую Деревья решений. Я сейчас пользуюсь OpenCV 3.0.0-rc1. Всякий раз, когда я пытаюсь обучить деревья решений своими данными и ярлыками, я получаю либо
прекращение вызова после выброса экземпляра ‘std :: bad_alloc’
что (): std :: bad_alloc
или же
Ошибка сегментации
В зависимости от того, что я положил в setMaxDepth (); если число больше 22, это bad_alloc, иначе это ошибка seg.
Вот мой исходный код:
//import data
Mat trainData=imread("/home/jetson/Documents/CB/ml/td.jpg",CV_LOAD_IMAGE_GRAYSCALE);
Mat labels=imread("/home/jetson/Documents/CB/ml/lab.jpg",CV_LOAD_IMAGE_GRAYSCALE);
//convert to the right type
trainData.convertTo(trainData,CV_32FC1);
labels.convertTo(labels,CV_32SC1);
transpose(trainData,trainData);
Ptr<ml::TrainData> tData = ml::TrainData::create(trainData, ml::ROW_SAMPLE, labels);
cout <<"Training data ready\n";
Ptr<ml::DTrees> dec_trees = ml::DTrees::create();
//params
dec_trees->setMaxDepth(1);
dec_trees->setMinSampleCount(10);
dec_trees->setRegressionAccuracy(0.01f);
dec_trees->setUseSurrogates(false);
dec_trees->setMaxCategories(2);
dec_trees->setCVFolds(10);
dec_trees->setUse1SERule(true);
dec_trees->setTruncatePrunedTree(true);
dec_trees->setPriors(Mat());
cout <<"Params set\n";
dec_trees->train(tData);
cout <<"Done!\n";`
В дополнение к этому, когда я пытаюсь обучить модель SVM с теми же данными, используя те же шаги (ниже), это работает просто отлично.
Ptr<ml::SVM> svm = ml::SVM::create();
//params
svm->setType(ml::SVM::C_SVC);
svm->setKernel(ml::SVM::POLY);
svm->setGamma(3);
svm->setDegree(0.1);
cout <<"Params set\n";
svm->train(tData);
cout <<"Done!\n";
Я должен указать, что ошибка возникает, когда я пытаюсь обучить модель. Я использую параметры по умолчанию для деревьев решений, как предложено на странице документации OpenCV.
Кто-нибудь знает, что здесь не так и как решить мою проблему?
Заранее спасибо.
РЕДАКТИРОВАТЬ: я обновил OpenCV до версии 3.0.0, и проблемы остаются теми же
Задача ещё не решена.