def test_dataset_with_guessed_labelmap(self): class SrcExtractor(TestExtractorBase): def __iter__(self): yield DatasetItem(id=1, annotations=[ Bbox(2, 3, 4, 5, label=0, id=1), Bbox(1, 2, 3, 4, label=1, id=2), ]) def categories(self): label_cat = LabelCategories() label_cat.add(VOC.VocLabel(1).name) label_cat.add('non_voc_label') return { AnnotationType.label: label_cat, } class DstExtractor(TestExtractorBase): def __iter__(self): yield DatasetItem(id=1, annotations=[ Bbox(2, 3, 4, 5, label=self._label( VOC.VocLabel(1).name), id=1, group=1, attributes={ 'truncated': False, 'difficult': False, 'occluded': False, }), Bbox(1, 2, 3, 4, label=self._label('non_voc_label'), id=2, group=2, attributes={ 'truncated': False, 'difficult': False, 'occluded': False, }), ]) def categories(self): label_map = VOC.make_voc_label_map() label_map['non_voc_label'] = [None, [], []] for label_desc in label_map.values(): label_desc[0] = None # rebuild colormap return VOC.make_voc_categories(label_map) with TestDir() as test_dir: self._test_save_and_load(SrcExtractor(), VocConverter(label_map='guess'), test_dir, target_dataset=DstExtractor())
def test_dataset_with_source_labelmap_undefined(self): class SrcExtractor(TestExtractorBase): def __iter__(self): yield DatasetItem(id=1, annotations=[ Bbox(2, 3, 4, 5, label=0, id=1), Bbox(1, 2, 3, 4, label=1, id=2), ]) def categories(self): label_cat = LabelCategories() label_cat.add('Label_1') label_cat.add('label_2') return { AnnotationType.label: label_cat, } class DstExtractor(TestExtractorBase): def __iter__(self): yield DatasetItem(id=1, annotations=[ Bbox(2, 3, 4, 5, label=self._label('Label_1'), id=1, group=1, attributes={ 'truncated': False, 'difficult': False, 'occluded': False, }), Bbox(1, 2, 3, 4, label=self._label('label_2'), id=2, group=2, attributes={ 'truncated': False, 'difficult': False, 'occluded': False, }), ]) def categories(self): label_map = OrderedDict() label_map['background'] = [None, [], []] label_map['Label_1'] = [None, [], []] label_map['label_2'] = [None, [], []] return VOC.make_voc_categories(label_map) with TestDir() as test_dir: self._test_save_and_load(SrcExtractor(), VocConverter(label_map='source'), test_dir, target_dataset=DstExtractor())
def test_background_masks_dont_introduce_instances_but_cover_others(self): dataset = Dataset.from_iterable([ DatasetItem(1, image=np.zeros((4, 1, 1)), annotations=[ Mask([1, 1, 1, 1], label=1, attributes={'z_order': 1}), Mask([0, 0, 1, 1], label=2, attributes={'z_order': 2}), Mask([0, 0, 1, 1], label=0, attributes={'z_order': 3}), ]) ], categories=['background', 'a', 'b']) with TestDir() as test_dir: VocConverter.convert(dataset, test_dir, apply_colormap=False) cls_mask = load_mask( osp.join(test_dir, 'SegmentationClass', '1.png')) inst_mask = load_mask( osp.join(test_dir, 'SegmentationObject', '1.png')) self.assertTrue(np.array_equal([0, 1], np.unique(cls_mask))) self.assertTrue(np.array_equal([0, 1], np.unique(inst_mask)))
def test_can_save_dataset_with_image_info(self): class TestExtractor(TestExtractorBase): def __iter__(self): return iter([ DatasetItem(id=1, image=Image(path='1.jpg', size=(10, 15))), ]) with TestDir() as test_dir: self._test_save_and_load(TestExtractor(), VocConverter(label_map='voc'), test_dir)
def test_dataset_with_voc_labelmap(self): class SrcExtractor(TestExtractorBase): def __iter__(self): yield DatasetItem(id=1, annotations=[ Bbox(2, 3, 4, 5, label=self._label('cat'), id=1), Bbox(1, 2, 3, 4, label=self._label('non_voc_label'), id=2), ]) def categories(self): label_cat = LabelCategories() label_cat.add(VOC.VocLabel.cat.name) label_cat.add('non_voc_label') return { AnnotationType.label: label_cat, } class DstExtractor(TestExtractorBase): def __iter__(self): yield DatasetItem( id=1, annotations=[ # drop non voc label Bbox(2, 3, 4, 5, label=self._label('cat'), id=1, group=1, attributes={ 'truncated': False, 'difficult': False, 'occluded': False, }), ]) def categories(self): return VOC.make_voc_categories() with TestDir() as test_dir: self._test_save_and_load(SrcExtractor(), VocConverter(label_map='voc'), test_dir, target_dataset=DstExtractor())
def test_relative_paths(self): class TestExtractor(TestExtractorBase): def __iter__(self): return iter([ DatasetItem(id='1', image=np.ones((4, 2, 3))), DatasetItem(id='subdir1/1', image=np.ones((2, 6, 3))), DatasetItem(id='subdir2/1', image=np.ones((5, 4, 3))), ]) with TestDir() as test_dir: self._test_save_and_load(TestExtractor(), VocConverter(label_map='voc', save_images=True), test_dir)
def test_can_save_dataset_with_images(self): class TestExtractor(TestExtractorBase): def __iter__(self): return iter([ DatasetItem(id=1, subset='a', image=np.ones([4, 5, 3])), DatasetItem(id=2, subset='a', image=np.ones([5, 4, 3])), DatasetItem(id=3, subset='b', image=np.ones([2, 6, 3])), ]) with TestDir() as test_dir: self._test_save_and_load(TestExtractor(), VocConverter(label_map='voc', save_images=True), test_dir)
def test_dataset_with_fixed_labelmap(self): class SrcExtractor(TestExtractorBase): def __iter__(self): yield DatasetItem(id=1, annotations=[ Bbox(2, 3, 4, 5, label=0, id=1), Bbox(1, 2, 3, 4, label=1, id=2, group=2, attributes={'act1': True}), Bbox(2, 3, 4, 5, label=2, id=3, group=2), Bbox(2, 3, 4, 6, label=3, id=4, group=2), ]) def categories(self): label_cat = LabelCategories() label_cat.add('foreign_label') label_cat.add('label', attributes=['act1', 'act2']) label_cat.add('label_part1') label_cat.add('label_part2') return { AnnotationType.label: label_cat, } label_map = { 'label': [None, ['label_part1', 'label_part2'], ['act1', 'act2']] } class DstExtractor(TestExtractorBase): def __iter__(self): yield DatasetItem(id=1, annotations=[ Bbox(1, 2, 3, 4, label=0, id=1, group=1, attributes={ 'act1': True, 'act2': False, 'truncated': False, 'difficult': False, 'occluded': False, } ), Bbox(2, 3, 4, 5, label=1, group=1), Bbox(2, 3, 4, 6, label=2, group=1), ]) def categories(self): return VOC.make_voc_categories(label_map) with TestDir() as test_dir: self._test_save_and_load( SrcExtractor(), VocConverter(label_map=label_map), test_dir, target_dataset=DstExtractor())
def test_can_save_dataset_with_no_subsets(self): class TestExtractor(TestExtractorBase): def __iter__(self): return iter([ DatasetItem(id=1, annotations=[ Label(2), Label(3), ]), DatasetItem(id=2, annotations=[ Label(3), ]), ]) with TestDir() as test_dir: self._test_save_and_load(TestExtractor(), VocConverter(label_map='voc'), test_dir)