2013-05-28 10 views
7

Ich entwickle ein Bildklassifikationsprojekt mit BOW-Modell und SVM. Ich möchte herausfinden, die SVMs Vorhersage Wahrscheinlichkeit, aber es gibt keine solche Funktion in opencv svm. Gibt es eine Möglichkeit, dies zu tun? Ich möchte die Vorhersagewahrscheinlichkeit in n-Klasse SVM herausfinden.OPencv SVM Wahrscheinlichkeit vorherzusagen

Antwort

3

Nein, Sie können dies nicht mit CvSVM tun. Die SVM-Implementierung von OpenCV basiert auf einer sehr alten Version von libsvm. Laden Sie die neueste Version von libsvm herunter und verwenden Sie sie stattdessen. Natürlich müssen Sie einen Wrapper schreiben, um Datenformate zu konvertieren. Siehe http://www.csie.ntu.edu.tw/~cjlin/libsvm/

+2

Alternativ könnten Sie implementieren Platt Skalierung auf die Entscheidung selbst als Nachbearbeitungsschritt Werte Wahrscheinlichkeiten zu erhalten. –

+2

Ist dies immer noch der bevorzugte Ansatz im April 2015? – Poyan

-1

Sie könnten versuchen, eine Konfusionsmatrix zu generieren, dies sollte Ihnen die Wahrscheinlichkeit jedes Bildes, das zu einer der Klassen gehört, mitteilen. Confusion Matrix

Und hier haben Sie einen Ausschnitt Ich fand, obwohl es unvollständig ist es Ihnen ein paar Ideen können:

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]]++; 
} 

ich habe es noch nicht getestet, so in dem Fall, dass Sie es machen bekommen ich würde Arbeit zu schätzen wissen, dass Sie es hier kommunizieren :)

Quelle: a-simple-object-classifier-with-bag-of-words

+1

würde ich nicht zustimmen. Die Confusion-Matrix-Wahrscheinlichkeit ist ein frequentistischer Ansatz angesichts der Grundwahrheit. Die Verwirrungsmatrix ist für ein unsichtbares Bild nutzlos. –

Verwandte Themen