3

matlab で BOW オブジェクト認識コードを実装しようとしています。プロセスは少し複雑で、手順に関する適切なドキュメントを見つけるのに苦労しました。以下の私の計画が理にかなっている場合、誰かが再確認できますか? ここでVLSIFTライブラリを広範囲に使用しています

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 によって定義されたクラスと画像を一致させるにはどうすればよいですか?

4

1 に答える 1

2

BoW アプローチの完全な実装であるCaltech 101 サンプル コードを見ましたか。

ペガソで分類し、結果を評価する部分は次のとおりです。

% --------------------------------------------------------------------
%                                                            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) ;
于 2013-04-03T16:31:45.280 に答える