-
Notifications
You must be signed in to change notification settings - Fork 36
/
Copy pathos_attr_get_database.m
88 lines (69 loc) · 2.52 KB
/
os_attr_get_database.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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
function imdb = os_get_database(osDir)
load(fullfile(osDir, 'imdb/imdb.mat'), 'imdb') ;
imdb.imageDir512 = fullfile(osDir, imdb.imageDir512) ;
imdb.imageDir1024 = fullfile(osDir, imdb.imageDir1024) ;
imdb.maskDir512 = fullfile(osDir, imdb.maskDir512) ;
imdb.maskDir1024 = fullfile(osDir, imdb.maskDir1024) ;
opts.seed = 1;
% To avoid classes which are not labelled yet
% or underrepresented; banded has 87
minPerClass = 80;
cls_names = dir('data/os/labels/*.txt');
cls_names = {cls_names.name};
imdb.classes.name = {};
segIds = {};
labels = {};
for ii = 1 : numel(cls_names)
fid = fopen(fullfile('data/os/labels/', cls_names{ii}));
if (fid > 0)
lines = textscan(fid, '%s%d%d%d');
gt_labels = lines{4};
if (sum(gt_labels == 1) >= minPerClass)
imdb.classes.name{end + 1} = cls_names{ii};
else
continue;
end
segIds{end + 1} = lines{3};
labels{end + 1} = lines{4};
end
end
% use these by default
imdb.imageDir = imdb.imageDir512 ;
imdb.maskDir = imdb.maskDir512 ;
imdb.segmDir = fullfile(osDir, 'segm/512') ;
% split images in train, val, test
n = numel(imdb.images.id) ;
m = round(n/3) ;
sets = [1 * ones(1,m), 2 * ones(1,m), 3 * ones(1,n-2*m)] ;
rng(0) ;
imdb.images.set = sets(randperm(n)) ;
[~,i] = ismember(imdb.segments.imageId, imdb.images.id) ;
imdb.segments.set = imdb.images.set(i) ;
imdb.segments.label = imdb.segments.materialClass ;
% now remove all the segments that belong to classes that are not in use
ok = logical(imdb.meta.inUse(imdb.segments.label)) ;
imdb.segments = soaSubsRef(imdb.segments, ok) ;
imdb.segments.label = zeros(numel(imdb.classes.name), ...
numel(imdb.segments.id));
for ii = 1 : numel(imdb.classes.name)
% don't understand why this doesn't work
%[lia, ~] = ismember(imdb.segments.id, segIds{ii});
%imdb.segments.label(ii, lia) = labels{ii}';
pos_segments = segIds{ii}(labels{ii} == 1);
neg_segments = segIds{ii}(labels{ii} == -1);
[lia, ~] = ismember(imdb.segments.id, pos_segments);
imdb.segments.label(ii, lia) = 1;
[lia, ~] = ismember(imdb.segments.id, neg_segments);
imdb.segments.label(ii, lia) = -1;
end
% finally, merge the background classes
% bkg = [18 25]
%imdb.segments.label(imdb.segments.label == 25) = 18 ;
%imdb.meta.inUse(25) = false ;
%imdb.meta.classes{18} = 'other' ;
%imdb.meta.classes{25} = 'other' ;
imdb.meta.classes = imdb.classes.name;
imdb.meta.inUse = ones(1, numel(imdb.classes.name));
% no difficult regions by default
imdb.segments.difficult = false(1, numel(imdb.segments.id)) ;
save(fullfile(osDir, 'imdb/imdb_attr.mat'), 'imdb') ;