2016-06-17 5 views
0

私は交通標識を予測するためにSVMを訓練しようとしていますが、私は常に差異入力画像に対して同じ予測結果を得ます。HOG機能を使用している私のSVMはいつも同じクラスを予測しますか?

誰でも私の理由を説明できますか?ここで

が私のコードです:

http://pastebin.com/6y2MgTb8

私はまた、テスト画像とトレーニング画像のHOG値を出力し、比較、それは同じであるが、なぜ結果を予測し、常に同じ値です。あなたのコードから

+1

トレーニングデータのクラスの分布はどのようになっていますか? –

答えて

0

hog.compute(img_gray, descriptorsValues, Size(0, 0), Size(0, 0), locations); 
//vector to Mat 
Mat fm = Mat(descriptorsValues); 

//Classification data 
Ptr<SVM> svm = Algorithm::load<SVM>(nameSVM); 
std::cout << "Model Loaded" << std::endl; 

Mat image1d(1, fm.rows, CV_32FC1); 
imshow("gradient 1", image1d); 

float result = svm->predict(image1d); 

あなたが誤って空の新しいイメージ(image1d)を作成し、分類のために、この初期化されていないマトリックスを使用しています。代わりに次のsvm予測関数の呼び出しを使用してください:

float result = svm->predict(fm); 
+0

私はすでにこれを試しています。 OpenCVエラー:Cv :: ml :: SVMImpl :: predictファイルC:\ builds \ master_PackSlave-win64-で、OpenCVエラー:アサーションが失敗しました(samples.cols == var_count && samples.type()== CV_32F) vc12-shared \ opencv \ modules \ ml \ src \ svm.cpp、1930行目です。この問題の解決策は、 "fm"をimage1dに変換することです。 – tuananh1007

+0

あなたのフィーチャマトリックスのサイズを確認できますか? –

関連する問題