使用Gist和SVM训练进行图像分类

3
我想先说一下,我对CV非常新手,可能有些显而易见的事情我没有考虑到,请不要犹豫,如果有什么建议请直接提出。
我正在尝试实现场景分类,目前只是简单的室内和室外图像分类。
我的想法是使用Gist描述符,它可以创建一个包含场景某些参数的向量。
为了获得可靠的分类结果,我使用了100个室内和100个室外图像,分别使用Gist描述符创建训练矩阵,并且使用'svmtrain'进行训练。以下是一个相当简单的代码,展示了如何训练Gist向量:
train_label= zeros(size(200,1),1);
train_label(1:100,1) = 0;         % 0 = indoor
train_label(101:200,1) = 1;        % 1 = outdoor

training_mat(1:100,:) = gist_indoor1;
training_mat(101:200,:) = gist_outdoor1;
test_mat = gist_test;

SVMStruct = svmtrain(training_mat ,train_label, 'kernel_function', 'rbf', 'rbf_sigma', 0.6);
Group       = svmclassify(SVMStruct, test_mat);

问题在于结果相当糟糕。 我阅读了优化“rbf”内核的约束和gamma参数可能会改善分类的内容,但是: 1. 我不确定如何使用多维数据向量进行优化(Mathworks网站上给出的优化示例为2D,而我的为512),有什么建议吗? 2. 我可能完全偏离了方向,请指出。
编辑:谢谢Darkmoor!我将尝试使用这个工具箱进行校准,并尝试改进我的特征提取。希望当我有一个可用的分类时,我会在这里发布它。
编辑2:忘记更新了,通过从SUN数据库获取室内和城市户外图像的GIST描述符,并使用libsvm工具箱使用优化参数进行训练,我设法在测试来自我的公寓和街道外的图片时实现了95%的分类率。
我对来自数据库的城市户外场景和自然场景执行了相同的操作,并在测试来自我的国家的各种场景时获得了类似的准确性。

我用来创建数据矩阵的代码取自这里,只做了非常小的修改:

% GIST Parameters:
clear param
param.imageSize = [256 256]; % set a normalized image size
param.orientationsPerScale = [8 8 8 8]; % number of orientations per scale (from HF to LF)
param.numberBlocks = 4;
param.fc_prefilt = 4;

%Obtain images from folders
sdirectory = 'C:\Documents and Settings\yotam\My Documents\Scene_Recognition\test_set\indoor&outdoor_test';
jpegfiles = dir([sdirectory '/*.jpg']);

% Pre-allocate gist:
Nfeatures = sum(param.orientationsPerScale)*param.numberBlocks^2;
gist = zeros([length(jpegfiles) Nfeatures]); 

% Load first image and compute gist:
filename = [sdirectory '/' jpegfiles(1).name];
img = imresize(imread(filename),param.imageSize);
[gist(1, :), param] = LMgist(img, '', param); % first call
% Loop:
for i = 2:length(jpegfiles)
   filename = [sdirectory '/' jpegfiles(i).name];
   img = imresize(imread(filename),param.imageSize);
   gist(i, :) = LMgist(img, '', param); % the next calls will be faster
end
1个回答

0
  1. 我建议你使用libsvm,它非常高效。有关交叉验证的libsvm的相关帖子。相同的逻辑也可以用于你提到的相关Matlab库。

  2. 你的逻辑是正确的。提取特征并尝试对其进行分类。无论如何,不要期望你的分类器校准会返回巨大的差异。关键思想是特征提取以获得结果的巨大差异,当然还要结合你的分类器校准 ;)

祝你好运。


我不同意“不要期望你的分类器校准会有巨大的差异”的说法。在rbf SVM中设置正确的C和sigma参数是至关重要的,可以导致任何精度上的变化。 - lejlot
我所说的“我们不希望你的分类器校准会返回巨大的差异”是指用户对“相当糟糕”的结果的评论。这意味着分类器本身不能创造奇迹。用户特别指的是分类器。感谢您的评论。 - Darkmoor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接