2013-05-28 16 views
7

私はBOWモデルとSVMを使って画像分類プロジェクトを開発しています。 SVMが確率を予測したいのですが、opencv svmにそのような機能はありません。これを行う方法はありますか?私は、n-class SVMで予測確率を見つけたいと思っています。OPencv SVM予測確率

答えて

3

いいえCvSVMではこれを行うことはできません。 OpenCVのSVM実装は非常に古いバージョンのlibsvmに基づいています。 libsvmの最新バージョンをダウンロードし、代わりに使用してください。もちろん、データ形式を変換するためのラッパーを作成する必要があります。 http://www.csie.ntu.edu.tw/~cjlin/libsvm/

+2

を別の方法として、あなたは、意思決定の確率を得るために後処理ステップとして自分自身を値でスケーリングプラットを実装することができます。 –

+2

これはまだ2015年4月の方が望ましいアプローチですか? – Poyan

-1

あなたは混乱行列を生成することができます。これは、各画像がいずれかのクラスに属する確率を教えてくれるはずです。ケースには、あなたがそれを作るために得るよう

map<string,map<string,int> > confusion_matrix; // confusionMatrix[classA][classB] = number_of_times_A_voted_for_B; 
map<string,CvSVM> classes_classifiers; //This we created earlier 

vector<string> files; //load up with images 
vector<string> classes; //load up with the respective classes 

for(..loop over a directory?..) { 
Mat img = imread(files[i]),resposne_hist; 

vector<KeyPoint> keypoints; 
detector->detect(img,keypoints); 
bowide->compute(img, keypoints, response_hist); 

float minf = FLT_MAX; string minclass; 
for (map<string,CvSVM>::iterator it = classes_classifiers.begin(); it !=  classes_classifiers.end(); ++it) { 
    float res = (*it).second.predict(response_hist,true); 
    if (res < minf) { 
    minf = res; 
    minclass = (*it).first; 
    } 
} 
confusion_matrix[minclass][classes[i]]++; 
} 

は、私は、まだそれをテストしていない: Confusion Matrix

そして、ここでは、それは不完全ですが、あなたはそれがあなたにいくつかのアイデアを与える可能性があり、私が見つけたスニペットを持っています仕事は私はあなたがここにそれを伝えることを理解するであろう:)

ソース:a-simple-object-classifier-with-bag-of-words

+1

私は同意しません。混同行列の確率は、地上の真理を考えると、頻繁に行われるアプローチです。見えない画像には混乱行列は無用です。 –