SIFT Fisher矢量GMM

时间:2016-12-02 18:15:02

标签: matlab classification sift gmm

我试图用Matlab中的vl_feat实现提取SIFT特征,然后计算GMM模型以及Fisher Vector。我有来自DTD Dataset的两个子集训练和测试图像。

  1. 在每次拆分(火车和测试)上运行vl_sift并保存128xN功能
  2. 将每个由128xN特征组成的单元阵列应用于vl_gmm并获取每个特征[平均covarinace重量],然后将具有计算的gmm模型值的特征应用于每个特征的vl_fisher。
  3. 制作PCA
  4. 全部使用SVM
  5. 我的问题是我在步骤2中不知道如何转换每个图像的特征值以适应vl_gmm和vl_fisher。

    这是我的代码:

    %% SIFT Feature Extraction
    
    FV_train = cell(size(train_name, 1), 1);
    FV_test = cell(size(test_name, 1), 1);
    
    parfor_progress(size(train_name, 1));
    
    parfor n = 1:size(train_name, 1) 
    
    [~, FV_train{n}] = vl_sift(single(histeq(imresize(rgb2gray(imread(strcat(pwd, '/DTD/images', '/', train_name{n}))), [512 512]))));
    [~, FV_test{n}] = vl_sift(single(histeq(imresize(rgb2gray(imread(strcat(pwd, '/DTD/images', '/', test_name{n}))), [512 512]))));
    parfor_progress;
    
    end
    
    parfor_progress(0);
    
    FV_train = FV_train(~cellfun('isempty',FV_train));
    FV_test = FV_test(~cellfun('isempty',FV_test));
    
    FV_train = adaptFV(FV_train);
    FV_test = adaptFV(FV_test);
    
    parfor n = 1:size(FV_train, 1) 
    
    FV_train{n} = double(reshape(FV_train{n},1,size(FV_train{n},2)*size(FV_train{n},1)));
    FV_test{n} = double(reshape(FV_test{n},1,size(FV_test{n},2)*size(FV_test{n},1)));
    
    end
    

    还存在另外两个问题:

    • 有人认为SIFT在某些图片上失败,因此我拒绝了

    • 由于SIFT功能的不同维度,我采用了最长的一个,并用零填充其他的1xN特征向量。

0 个答案:

没有答案