2013-05-28 116 views
7

Tôi đang phát triển một dự án phân loại hình ảnh bằng cách sử dụng mô hình BOW và SVM. Tôi muốn tìm ra xác suất SVM dự đoán nhưng không có chức năng như vậy trong svm opencv. Có cách nào để làm điều này không? Tôi muốn tìm ra xác suất dự đoán trong SVM lớp n.OPencv SVM dự đoán xác suất

Trả lời

3

Không, bạn không thể làm điều này với CvSVM. Triển khai SVM của OpenCV dựa trên phiên bản libsvm rất cũ. Tải xuống phiên bản libsvm mới nhất và sử dụng phiên bản đó thay thế. Tất nhiên bạn sẽ phải viết một trình bao bọc để chuyển đổi định dạng dữ liệu. Xem http://www.csie.ntu.edu.tw/~cjlin/libsvm/

+2

Ngoài ra, bạn có thể thực hiện Platt rộng vào quyết định giá trị bản thân như một bước sau chế biến để có được xác suất. –

+2

Đây có phải là phương pháp tiếp cận ưa thích nhất vào tháng 4 năm 2015 không? – Poyan

-1

Bạn có thể thử tạo ma trận nhầm lẫn, điều này sẽ cho bạn biết xác suất của từng hình ảnh thuộc bất kỳ lớp nào. Confusion Matrix

Và ở đây bạn có một đoạn tôi thấy, mặc dù nó chưa đầy đủ nó có thể cung cấp cho bạn một số ý tưởng:

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

tôi không thử nghiệm nó, vì vậy trong trường hợp bạn có được để làm cho nó công việc tôi sẽ đánh giá cao mà bạn giao tiếp nó ở đây :)

nguồn: a-simple-object-classifier-with-bag-of-words

+1

Tôi sẽ không đồng ý. Xác suất ma trận nhầm lẫn là một cách tiếp cận thường xuyên cho sự thật mặt đất. Ma trận nhầm lẫn là vô dụng đối với một hình ảnh không nhìn thấy. –

Các vấn đề liên quan