Revision 47beaff6f6912baaae27db21d88c90f6edbea2e7 authored by Bartosz Zielinski on 11 August 2017, 15:34:09 UTC, committed by Bartosz Zielinski on 11 August 2017, 15:34:09 UTC
1 parent 9482979
Raw File
os_attr_get_database.m
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') ;
back to top