1

Matlab で vl_feat 実装を使用して SIFT 機能を抽出し、GMM モデルとフィッシャー ベクトルを計算しようとしています。DTD データセットからの 2 つのサブセットのトレーニング イメージとテスト イメージがあります。

  1. 各分割 (トレーニングとテスト) で vl_sift を実行し、128xN 機能を保存します。
  2. それぞれが 128xN の特徴で構成されるセル配列を vl_gmm に適用し、各特徴について [平均共分散重み] を取得してから、計算された gmm モデル値を含む特徴を特徴ごとに vl_fisher に適用します。
  3. PCAを作る
  4. すべてをSVMに入れる

私の問題は、ステップ 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

他に 2 つの問題があります。

  • 一部の画像でSIFTが失敗することが1つあります。したがって、それらを拒否しました

  • SIFT Feature の次元が異なるため、最も長いものを取り、他のものをゼロで埋めて 1xN Feature Vector にしました。

4

0 に答える 0