2

私はOpenCVCvNormalBayesClassifierから使用しようとしています。しかし、既にトレーニングしたモデルを更新できません。モデルを最初にトレーニングするコードは次のとおりです。

Mat training_data = Mat(counter_instances, ALLFEATURESIZE, CV_32FC1);
Mat training_classifications = Mat(counter_instances, 1, CV_32SC1);;

CvNormalBayesClassifier *bayes = new CvNormalBayesClassifier;
//filling the training data, 1 row per instance. 
//filling the classification data, 1 row and 1 column per instance, integer as class label
bayes->train(training_data, training_classifications);
bayes->save("bayes.model");

したがって、これはエラーなしで機能し、モデルが保存されます。

しかし、このモデルを読み込んで更新しようとすると、エラーが発生します。私はこのコードを使用しています:

Mat newTraining_data = Mat(1, ALLFEATURESIZE, CV_32FC1);
//fill data with one instance
Mat newLabel = Mat(1, 1, CV_32SC1);
newLabel.at<int>(0, 0) = (int) label; //some label
bayes->load("bayes.model");
bayes->train(newTraining_data, newLabel, Mat(), Mat(), true);

これは私が得るエラーです:

OpenCV Error: Bad argument (There is only a single class) in 
cvPreprocessCategoricalResponses, file /tmp/buildd/libopencv-2.3.1+svn6514+branch23
/modules/ml/src/inner_functions.cpp, line 729

最初に使用したすべてのインスタンスを入れようとし、新しいインスタンスで 1 行だけ追加しました。これは何とか機能しますが、完全な新しいモデルをトレーニングするのに必要なのと同じくらい長い時間がかかります。どれが本当に長い...

私は何を間違っていますか?それを正しく行う方法は?

誰もこれを手伝ってくれない場合:ロード/保存機能、更新機能、および予測されたクラスが返される確率を備えた Naive Bayes の C++ 実装を知っている人はいますか?

4

0 に答える 0