-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathHCSDH_retrieval.m
58 lines (53 loc) · 1.71 KB
/
HCSDH_retrieval.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
clear all;clc;
BITs = [64];
% T=[27]';
rand('seed',1013);
%********************************************************************
% load database
% database should contain traindata, testdata, traingnd, testgnd
%% Caltech
testnum = 1; %
trainnum=19800; %
load caltech256-gist.mat
test data = testdata(T,:);
testgnd = testgnd(T,:);
traindata=traindata(1:trainnum,:);
traingnd=traingnd(1:trainnum,:);
cateTrainTest = bsxfun(@eq, traingnd, testgnd');
%***************************************************************
% Feature transformation
%***************************************************************
method = 'HCSDH';
feature = 'kernel';
n_anchors = 1000;
% Kernel trans
anchor = traindata(randsample(trainnum, n_anchors),:);
sigma = 0.4; % for normalized data
X = exp(-sqdist(traindata,anchor)/(2*sigma*sigma));
testX = exp(-sqdist(testdata,anchor)/(2*sigma*sigma));
%************************************************************
%*********************************
% iterating by code length L
bit = BITs;
%***************************************************************
% run FSDH
%***************************************************************
tic;
[~, R] = HCSDH(X, traingnd, bit);
trainTime = toc;
%****************************************************************
% Hamming Ranking
%****************************************************************
B = X*R > 0;
tH = testX*R > 0;
H = B;
hammRadius = 2;
B = compactbit(H);
tB = compactbit(tH);
tic;
hammTrainTest = hammingDist (tB, B)';
[~, HammingRank]=sort(hammTrainTest,1);
retrievalTime1 = toc;
%% evaluate top-K precision & diversity precision
K=1000;
AP = cat_ap_topK(cateTrainTest,HammingRank,K)