Esempio n. 1
0
    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())
Esempio n. 2
0
    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())
Esempio n. 3
0
    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)))
Esempio n. 4
0
    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)
Esempio n. 5
0
    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())
Esempio n. 6
0
    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)
Esempio n. 7
0
    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)
Esempio n. 8
0
    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())
Esempio n. 9
0
    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)