먼저 시각적 단어 사전을 구하거나 구체적으로 표현해야합니다. k을 사용하는 모든 이미지의 SIFT 기능을 클러스터링합니다. 즉, 클러스터링을 의미합니다. [1]에서, 예를 들어, 64 또는 256 클러스터를 권장합니다.
이를 위해 우리는 모든 설명자를 하나의 행렬로 연결해야합니다. 그런 다음 vl_kmeans
함수로 전달할 수 있습니다. 또한 vl_kmeans
함수는 입력이 single
또는 double
이어야하기 때문에 설명자를 uint8
에서 single
으로 변환합니다.
all_descr = single([sift_descr{:}]);
centroids = vl_kmeans(all_descr, 64);
둘째, 당신은 차원이 할당 매트릭스를 만들 필요가 NumberOfClusters --NumberOfDescriptors하여 클러스터에 각각의 기술자를 할당. 이 할당 매트릭스를 만들면 많은 유연성을 얻을 수 있습니다. 즉, 소프트 또는 하드 할당을 수행 할 수 있습니다. 가장 가까운 이웃 검색 또는 kd- 트리 또는 기타 근사 또는 계층 적 최근 접 방안을 사용할 수 있습니다.
이 자습서에서 그들은 kd-trees를 사용하므로 다음과 같이 고집합니다. 첫째, kd-tree를 만들어야합니다. 이 작업은 바로 centroids
을 찾은 후 소속 :
kdtree = vl_kdtreebuild(centroids);
그런 다음, 우리는 각각의 이미지에 대한 VLAD 벡터를 구성 할 준비가 된 것입니다. 따라서 모든 이미지를 다시 살펴보고 독립적으로 VLAD 벡터를 계산해야합니다. 먼저 튜토리얼에서 설명한대로 할당 매트릭스를 만듭니다. 그런 다음 vl_vlad
함수를 사용하여 SIFT 설명자를 인코딩 할 수 있습니다. 얻어진 VLAD 벡터는 크기를 NumberOfClusters있을 것이다 * SiftDescriptorSize, 즉이 예에서 64 * 128 ..
enc = zeros(64*128, numel(sift_descr));
for k=1:numel(sift_descr)
% Create assignment matrix
nn = vl_kdtreequery(kdtree, centroids, single(sift_descr{k}));
assignments = zeros(64, numel(nn), 'single');
assignments(sub2ind(size(assignments)), nn, 1:numel(nn))) = 1;
% Encode using VLAD
enc(:, k) = vl_vlad(single(sift_descr{k}), centroids, assignments);
end
마지막으로, 데이터베이스의 모든 이미지에 대한 고차원 VLAD 벡터를 갖는다. 일반적으로 VLAD 설명자의 크기를 줄이기를 원할 것입니다. PCA를 사용합니다. 데이터베이스에없는
지금 주어진 새로운 이미지, 당신은 SIFT는 vl_sift
를 사용하여 기능을 추출 vl_kdtreequery
으로 할당 행렬을 생성하고, vl_vlad
을 사용하여 해당 이미지에 대한 VLAD 벡터를 만들 수 있습니다. 그래서, 당신은 새로운 무게 중심을 찾아야하거나 새로운 KD-트리를 생성하지 않습니다
% Load image and extract SIFT features
new_image = imread('filename.jpg');
new_image = single(rgb2gray(new_image));
[~, new_sift] = vl_sift(new_image);
% Create assignment matrix
nn = vl_kdtreequery(kdtree, centroids, single(new_sift));
assignments = zeros(64, numel(nn), 'single');
assignments(sub2ind(size(assignments)), nn, 1:numel(nn))) = 1;
% Encode using VLAD
new_vlad = vl_vlad(single(new_sift), centroids, assignments);
[1] Arandjelovic, R., & Zisserman, A. (2013). VLAD에 관한 모든 것. IEEE 컴퓨터 시각 및 패턴 인식 (CVPR) 회의, 1578-1585. https://doi.org/10.1109/CVPR.2013.207
대단히 감사합니다. 정말 고마워요. –