def _load_sbd_mask_annotations(self, index, gt_roidbs):
"""
Load gt_masks information from SBD's additional data
"""
if index % 1000 == 0:
print '%d / %d' % (index, len(self._image_index))
image_name = self._image_index[index]
inst_file_name = os.path.join(self._data_path, 'inst', image_name + '.mat')
gt_inst_mat = scipy.io.loadmat(inst_file_name)
gt_inst_data = gt_inst_mat['GTinst']['Segmentation'][0][0]
unique_inst = np.unique(gt_inst_data)
background_ind = np.where(unique_inst == 0)[0]
unique_inst = np.delete(unique_inst, background_ind)
gt_roidb = gt_roidbs[index]
cls_file_name = os.path.join(self._data_path, 'cls', image_name + '.mat')
gt_cls_mat = scipy.io.loadmat(cls_file_name)
gt_cls_data = gt_cls_mat['GTcls']['Segmentation'][0][0]
gt_masks = []
for ind, inst_mask in enumerate(unique_inst):
box = gt_roidb['boxes'][ind]
im_mask = (gt_inst_data == inst_mask)
im_cls_mask = np.multiply(gt_cls_data, im_mask)
unique_cls_inst = np.unique(im_cls_mask)
background_ind = np.where(unique_cls_inst == 0)[0]
unique_cls_inst = np.delete(unique_cls_inst, background_ind)
assert len(unique_cls_inst) == 1
assert unique_cls_inst[0] == gt_roidb['gt_classes'][ind]
mask = im_mask[box[1]: box[3]+1, box[0]:box[2]+1]
gt_masks.append(mask)
# Also record the maximum dimension to create fixed dimension array when do forwarding
mask_max_x = max(gt_masks[i].shape[1] for i in xrange(len(gt_masks)))
mask_max_y = max(gt_masks[i].shape[0] for i in xrange(len(gt_masks)))
return {
'gt_masks': gt_masks,
'mask_max': [mask_max_x, mask_max_y],
'flipped': False
}
评论列表
文章目录