2013-05-28 11 views
7

Sto sviluppando un progetto di classificazione di immagini utilizzando il modello BOW e SVM. Voglio scoprire che le SVM predicono la probabilità ma non esiste tale funzione in opencv svm. C'è un modo per fare questo? Voglio scoprire la probabilità di previsione in SVM di classe n.OPencv SVM previsione probabilità

risposta

3

No, non è possibile farlo con CvSVM. L'implementazione SVM di OpenCV è basata su una versione molto vecchia di libsvm. Scarica l'ultima versione di libsvm e usala invece. Ovviamente dovrai scrivere un wrapper per convertire i formati dei dati. Vedi http://www.csie.ntu.edu.tw/~cjlin/libsvm/

+2

in alternativa, è possibile implementare Platt ridimensionamento sulla decisione valori di se stessi come un fase di post-elaborazione per ottenere le probabilità. –

+2

Questo è ancora l'approccio preferito di aprile 2015? – Poyan

-1

Si potrebbe provare a generare una matrice di confusione, questo dovrebbe dire la probabilità di ogni immagine appartenente a una delle classi. Confusion Matrix

E qui si ha un frammento che ho trovato, anche se è incompleta può darvi alcune idee:

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

non ho ancora provarlo, così nel caso si arriva a rendere lavoro che apprezzerebbe che si comunica qui :)

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

+1

Non sarei d'accordo. La probabilità della Confusion Matrix è un approccio frequentista data la verità fondamentale. La matrice di confusione è inutile per un'immagine non vista. –