Мешок слов (BOW) в VLFeat

Я создаю проект «Классификация изображений» с помощью Bag-of-Visual-Words (BoVW), используя библиотеку VLFeat. Конвейер BoVW включает в себя:

  1. ПРОСЕЯТЬ
  2. k-значит
  3. Построение гистограммы
  4. Классификация SVM

Я могу использовать vl_sift и vl_kmeans для (1) и (2), но я не знаю, как построить функции гистограммы и использовать их в SVM.


person Huy Phan    schedule 16.04.2014    source источник
comment
у меня была лексика. Но я не знаю, как создать гистограмму. Не могли бы вы помочь мне решить эту проблему :(. Спасибо   -  person Huy Phan    schedule 16.04.2014


Ответы (1)


учитывая, что у вас уже есть "словарь" от vl_kmeans:

[centers] = vl_kmeans(data, numClusters); 

Чтобы построить гистограмму изображения I, вам нужно получить дескрипторы 128-D этого изображения, используя vl_sift:

[~,D] = vl_sift(I)  

Каждый столбец D является дескриптором одной точки интереса (или кадра) на изображении I. Теперь вам нужно построить гистограмму I на основе D и словаря centers. Самый простой способ — использовать цикл for:

H = zeros(1,numClusters);
for i=1:size(D,2)
  [~, k] = min(vl_alldist(D(:,i), centers)) ;
  H(k) = H(k) + 1;
end

Теперь вам решать, нормализовать гистограмму H или нет, прежде чем передавать ее в SVM. Обратите внимание, что, возможно, существует более быстрый способ построения гистограммы, не требующий цикла; но я думаю, что мой код (в Matlab) достаточно ясен, чтобы объяснить алгоритм.

person Tu Bui    schedule 29.04.2014
comment
что подразумевается под этим утверждением, и что такое данные, эти дескрипторы [centers] = vl_kmeans(data, numClusters); - person vicky; 24.03.2016
comment
@vicky этот оператор выполняет алгоритм кластеризации k-средних для данных, где данные — это матрица признаков (каждое значение на столбец); а numClusters — количество желаемых кластеров. Для получения дополнительной информации перейдите по ссылке. - person Tu Bui; 26.03.2016