Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 基于gist和SVM训练的图像分类_Matlab_Classification_Svm_Scene_Gist - Fatal编程技术网

Matlab 基于gist和SVM训练的图像分类

Matlab 基于gist和SVM训练的图像分类,matlab,classification,svm,scene,gist,Matlab,Classification,Svm,Scene,Gist,首先,我想说,我对简历真的很陌生,可能有一些明显的事情我没有想到,所以请不要犹豫,提及这类事情 我正在尝试实现场景分类,为了简单起见,目前在室内和室外图像之间 我的想法是使用一个gist描述符,它创建一个带有场景特定参数的向量 为了获得可靠的分类,我使用了室内和室外图像,每个图像100个样本,使用了gist描述符,用它们创建了一个训练矩阵,并在上面使用了“svmtrain”。下面是一个非常简单的代码,显示了我是如何训练gist向量的: train_label= zeros(size(200,1)

首先,我想说,我对简历真的很陌生,可能有一些明显的事情我没有想到,所以请不要犹豫,提及这类事情

我正在尝试实现场景分类,为了简单起见,目前在室内和室外图像之间

我的想法是使用一个gist描述符,它创建一个带有场景特定参数的向量

为了获得可靠的分类,我使用了室内和室外图像,每个图像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”kernell的约束和gamma参数可以改进分类,但是:

  • 我不知道如何使用多维数据向量进行优化(在2D中,而我的是512),有没有建议如何开始

  • 我可能完全错了方向,请指出是否是这样

  • 编辑: 谢谢你,黑暗门!我将尝试使用这个工具箱进行校准,并可能尝试改进我的特征提取。 希望当我有一个工作分类,我会张贴在这里

    编辑2:忘记更新,通过从SUN数据库中获取室内和城市室外图像的主要描述符,并使用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
    
  • 我建议你使用它是非常有效的。libsvm的相关帖子。您提到的相关Matlab库也可以使用相同的逻辑

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

  • 祝你好运。

    我不同意你的观点,但不要期望你的分类器校准会返回巨大的差异。在rbf支持向量机中设置正确的C和sigma参数是至关重要的,并且可以导致精度的任何变化。事实上,我说过我们不期望分类器的校准会返回巨大的差异,这是指用户对非常糟糕的结果的评论。这意味着分类器本身无法创造奇迹。一开始,用户就特别提到了分类器。谢谢你的评论。