使用vlfeat

时间:2015-04-22 20:48:49

标签: matlab image-processing machine-learning svm vlfeat

vlfeat中的phow_caltech101演示应用程序为Caltech101数据集上的图像分类创建了一个完整的Bag of Words流程,粗略地说:

  • 特征提取
  • 视觉词汇建设
  • 空间直方图计算
  • SVM培训
  • SVM测试和评估,

获取可用于稍后对新的非分类实例进行分类的模型。 直方图计算的唯一问题是空间直方图,这意味着如果我有一个大小为n的视觉词汇表,我会期望直方图的大小为n x(size_collection),包含每个训练实例中每个视觉词的出现次数。

然而,空间直方图根据指定的模型存储在结构中,默认情况下它有两个空间参数spatialX和spatialY,这导致结构的大小为spatialX * spatialY *(size_vocabulary),稍后将其标准化这是用于训练SVM的那个。

现在,如果我想使用标准化或不标准化的普通直方图,但是直方图给出了每个图像的视觉单词的1-1对应,或者从空间直方图中获取此信息,该怎么办?另外,当我描绘Bag of Words过程时,使用空间直方图而不是我考虑的经典直方图有多高效?

任何帮助表示感谢。

更新:

以下是计算直方图的代码的一部分,您可以看到如何以大小的直方图矢量(number_visual_words)结束而不是以大小的直方图(spatialX * spatialY * number_visual_words)结束。让我澄清一下,在这种情况下,模型定义为spatialX = [2 4]和spatialY = [2 4]。

for i = 1:length(model.numSpatialX)
  binsx = vl_binsearch(linspace(1,width,model.numSpatialX(i)+1), frames(1,:)) ;
  binsy = vl_binsearch(linspace(1,height,model.numSpatialY(i)+1), frames(2,:)) ;

  % combined quantization
  bins = sub2ind([model.numSpatialY(i), model.numSpatialX(i), numWords], ...
             binsy,binsx,binsa) ;
  hist = zeros(model.numSpatialY(i) * model.numSpatialX(i) * numWords, 1) ;
  hist = vl_binsum(hist, ones(size(bins)), bins) ;
  hists{i} = single(hist / sum(hist)) ;
end
hist = cat(1,hists{:}) ;
hist = hist / sum(hist) ;

问题的一部分是我还没有使用空间直方图,所以我不确定比#34;正常"它们是直方图。也许之前曾使用过这种直方图的人可以提供更有帮助的见解。

0 个答案:

没有答案