使用 VLFEAT 实现单词袋对象识别



我正在尝试在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 定义的类进行匹配?

您是否查看了他们的加州理工学院 101 示例代码,即 BoW 方法的完整实现。

以下是他们使用飞马进行分类并评估结果的部分:

% --------------------------------------------------------------------
%                                                            Train SVM
% --------------------------------------------------------------------
lambda = 1 / (conf.svm.C *  length(selTrain)) ;
w = [] ;
for ci = 1:length(classes)
  perm = randperm(length(selTrain)) ;
  fprintf('Training model for class %sn', 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) ;

最新更新