私は交通標識を予測するためにSVMを訓練しようとしていますが、私は常に差異入力画像に対して同じ予測結果を得ます。HOG機能を使用している私のSVMはいつも同じクラスを予測しますか?
誰でも私の理由を説明できますか?ここで
が私のコードです:
私はまた、テスト画像とトレーニング画像のHOG値を出力し、比較、それは同じであるが、なぜ結果を予測し、常に同じ値です。あなたのコードから
私は交通標識を予測するためにSVMを訓練しようとしていますが、私は常に差異入力画像に対して同じ予測結果を得ます。HOG機能を使用している私のSVMはいつも同じクラスを予測しますか?
誰でも私の理由を説明できますか?ここで
が私のコードです:
私はまた、テスト画像とトレーニング画像のHOG値を出力し、比較、それは同じであるが、なぜ結果を予測し、常に同じ値です。あなたのコードから
:
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);
私はすでにこれを試しています。 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
あなたのフィーチャマトリックスのサイズを確認できますか? –
トレーニングデータのクラスの分布はどのようになっていますか? –