2012-06-18 7 views
3

Я пытаюсь реализовать код распознавания объектов BOW в Matlab. Процесс немного сложный, и у меня было много проблем с поиском надлежащей документации по этой процедуре. Так может кто-то проверить, имеет ли смысл мой план? Я использую VLSIFT library широко здесьреализация Bags of Words распознавание объектов с помощью VLFEAT

Training: 
1. Extract SIFT image descriptor with VLSIFT 
2. Quantize the descriptors with k-means(vl_hikmeans) 
3. Take quantized descriptors and create histogram(VL_HIKMEANSHIST) 
4. Create SVM from histograms(VL_PEGASOS?) 

Я понимаю, шаг 1-3, но я не совсем уверен, что если функция SVM правильно. VL_PEGASOS принимает следующее:

W = VL_PEGASOS(X, Y, LAMBDA) 

Как именно я могу использовать эту функцию с помощью гистограммы, что я создаю?

И наконец, во время этапа распознавания, как мне сопоставить образ с классом, определенным SVM?

ответ

2

Вы просмотрели их Caltech 101 example code, то есть полную реализацию подхода BoW.

Вот та часть, где они классифицируют с Pegasos и оценить результаты:

% -------------------------------------------------------------------- 
%               Train SVM 
% -------------------------------------------------------------------- 

lambda = 1/(conf.svm.C * length(selTrain)) ; 
w = [] ; 
for ci = 1:length(classes) 
    perm = randperm(length(selTrain)) ; 
    fprintf('Training model for class %s\n', classes{ci}) ; 
    y = 2 * (imageClass(selTrain) == ci) - 1 ; 
    data = vl_maketrainingset(psix(:,selTrain(perm)), int8(y(perm))) ; 
    [w(:,ci) b(ci)] = vl_svmpegasos(data, lambda, ... 
            'MaxIterations', 50/lambda, ... 
            'BiasMultiplier', conf.svm.biasMultiplier) ; 

    model.b = conf.svm.biasMultiplier * b ; 
    model.w = w ; 

% -------------------------------------------------------------------- 
%            Test SVM and evaluate 
% -------------------------------------------------------------------- 

% Estimate the class of the test images 
scores = model.w' * psix + model.b' * ones(1,size(psix,2)) ; 
[drop, imageEstClass] = max(scores, [], 1) ; 

% Compute the confusion matrix 
idx = sub2ind([length(classes), length(classes)], ... 
       imageClass(selTest), imageEstClass(selTest)) ; 
confus = zeros(length(classes)) ; 
confus = vl_binsum(confus, ones(size(idx)), idx) ; 
Смежные вопросы