-
Notifications
You must be signed in to change notification settings - Fork 0
/
One2oneDataNonsmoothHighorderSumTest.m
71 lines (58 loc) · 3.55 KB
/
One2oneDataNonsmoothHighorderSumTest.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
59
60
61
62
63
64
65
66
67
68
69
70
71
function [] = One2oneDataNonsmoothHighorderSumTest(SPdata,SPparam,LORparam)
pfig = ProgressBar('Parsing Images (Data Nonsmooth High-order Sum Test)');
range = 1:length(SPdata.testFileList);
for i = range
[folder,onlyName] = fileparts(SPdata.testFileList{i});
baseFileName = fullfile(folder,onlyName);
%% Get data term
[dataCost,imSP,~] = GetSuperParsingDataCost(baseFileName,i,SPdata,SPparam);
%% Get nonsmooth pairwise term
labelOutFileName = fullfile(SPparam.HOMEDATA,'PropagatedLabels',...
[baseFileName '_retSetSize_' num2str(LORparam.retSetSize) '_kNN_' num2str(LORparam.kNN)...
'_w_Q_' num2str(LORparam.w_Q) '_w_U_' num2str(LORparam.w_U)...
'_K_' num2str(SPparam.K) '_lambda_' num2str(LORparam.lambda) '_one2one_propagatedLabel_app_geo.mat']);
if ~exist(labelOutFileName,'file')
fprintf('%s does not exist..! exiting..\n',labelOutFileName);
error('Error in One2oneOptimizationWithQPBO.m');
else
load(labelOutFileName,'context2ndIdx','context3rdIdx','propagatedLabels','reducedLabels','testSize');
end;
if ~exist('reducedLabels','var')
fprintf('reducedLabels does not exist..! exiting..\n');
error('Error in One2oneOptimizationWithQPBO.m');
end;
% numLabels = length(SPdata.Labels{1,1}); % note: Labels{1,1} = Labels{labelType,Kndx}
unfoldPropagatedLabels = UnfoldPropagatedLabels(propagatedLabels,reducedLabels,SPdata.Labels{1,1},LORparam.retSetSize,testSize); % note: Labels{1,1} = Labels{labelType,Kndx}
% Gen minMaxUnfoldPropagatedLabels & minSumUnfoldPropagatedLabels
sumUnfoldPropagatedLabels = zeros(size(unfoldPropagatedLabels{1}));
minUnfoldPropagatedLabels = 1e+100;
for retSetIdx = 1:LORparam.retSetSize
sumUnfoldPropagatedLabels = sumUnfoldPropagatedLabels + unfoldPropagatedLabels{retSetIdx};
if ~isempty(propagatedLabels{retSetIdx})
if minUnfoldPropagatedLabels > min(min(propagatedLabels{retSetIdx}(end-testSize+1:end,:)))
minUnfoldPropagatedLabels = min(min(propagatedLabels{retSetIdx}(end-testSize+1:end,:)));
end;
end;
end;
tempUnfoldPropagatedLabels = sumUnfoldPropagatedLabels(end-testSize+1:end,:);
tempUnfoldPropagatedLabels(tempUnfoldPropagatedLabels == 0) = inf;
minSumUnfoldPropagatedLabels = min(min(tempUnfoldPropagatedLabels));
testSuffix = '';
testName = ['D_HwSumPropagatedLabels' '_retSetSize_' num2str(LORparam.retSetSize)...
'_kNN_' num2str(LORparam.kNN) '_l_' num2str(LORparam.lambda)...
'_a_' num2str(LORparam.alpha) '_nIter_' num2str(LORparam.numQPBOIter)...
'_nStart_' num2str(LORparam.numMultiStart)...
'_Dinit_' num2str(LORparam.dataInitFlag) '_Qpre_' num2str(LORparam.QPBOpreFlag) '_' testSuffix];
for j = 1:LORparam.numMultiStart
[Lsp,EnergyVal] = mexLOROptUndirectedHighOrderSum(unfoldPropagatedLabels,dataCost{1},...
[-log(minSumUnfoldPropagatedLabels^3) 0 0
LORparam.alpha LORparam.numQPBOIter LORparam.dataInitFlag LORparam.QPBOpreFlag 0]); % note: dataCost{1} = dataCost{labelType*Kndx}
L = ProjectLabelToImage(imSP,Lsp);
[EnergyValStored] = GenOutFileComparingEnergy(baseFileName,L,Lsp,EnergyVal,LORparam.HOMETESTDATA,...
LORparam.outFileSuffix,testName,SPdata.Labels{1,1}); % note: Labels{1,1} = Labels{labelType,Kndx}
fprintf('Iter %d\t: Previous: %f\tAchieved.. %f\n',j,EnergyVal,EnergyValStored);
end;
ProgressBar(pfig,find(i==range),length(range));
end;
close(pfig);
return;