コード例 #1
0
    def test_can_write_and_parse_dataset_meta_file(self):
        src_label_map = Cityscapes.CITYSCAPES_LABEL_MAP

        with TestDir() as test_dir:
            source_dataset = Dataset.from_iterable([],
                categories=Cityscapes.make_cityscapes_categories(src_label_map))

            CityscapesConverter.convert(source_dataset, test_dir,
                save_dataset_meta=True)
            dst_label_map = parse_meta_file(test_dir)

            self.assertEqual(src_label_map, dst_label_map)
コード例 #2
0
    def test_can_import(self):
        # is_crowd marks labels allowing to specify instance id
        source_dataset = Dataset.from_iterable([
            DatasetItem(id='defaultcity/defaultcity_000001_000031',
                subset='test',
                image=np.ones((1, 5, 3)),
                annotations=[
                    Mask(np.array([[1, 1, 0, 0, 0]]), label=3,
                        attributes={'is_crowd': True}),
                    Mask(np.array([[0, 0, 1, 0, 0]]), id=1, label=27,
                        attributes={'is_crowd': False}),
                    Mask(np.array([[0, 0, 0, 1, 1]]), id=2, label=27,
                        attributes={'is_crowd': False}),
                ]
            ),
            DatasetItem(id='defaultcity/defaultcity_000001_000032',
                subset='test',
                image=np.ones((1, 5, 3)),
                annotations=[
                    Mask(np.array([[1, 1, 0, 0, 0]]), id=1, label=31,
                        attributes={'is_crowd': False}),
                    Mask(np.array([[0, 0, 1, 0, 0]]), label=12,
                        attributes={'is_crowd': True}),
                    Mask(np.array([[0, 0, 0, 1, 1]]), label=3,
                        attributes={'is_crowd': True}),
                ]
            ),
            DatasetItem(id='defaultcity/defaultcity_000002_000045',
                subset='train',
                image=np.ones((1, 5, 3)),
                annotations=[
                    Mask(np.array([[1, 1, 0, 1, 1]]), label=3,
                        attributes={'is_crowd': True}),
                    Mask(np.array([[0, 0, 1, 0, 0]]), id=1, label=24,
                        attributes={'is_crowd': False}),
                ]
            ),
            DatasetItem(id='defaultcity/defaultcity_000001_000019',
                subset = 'val',
                image=np.ones((1, 5, 3)),
                annotations=[
                    Mask(np.array([[1, 0, 0, 1, 1]]), label=3,
                        attributes={'is_crowd': True}),
                    Mask(np.array([[0, 1, 1, 0, 0]]), id=24, label=1,
                        attributes={'is_crowd': False}),
                ]
            ),
        ], categories=Cityscapes.make_cityscapes_categories())

        parsed_dataset = Dataset.import_from(DUMMY_DATASET_DIR, 'cityscapes')

        compare_datasets(self, source_dataset, parsed_dataset)
コード例 #3
0
    def test_can_import_with_train_label_map(self):
        source_dataset = Dataset.from_iterable([
            DatasetItem(id='defaultcity/defaultcity_000001_000031',
                subset='test',
                image=np.ones((1, 5, 3)),
                annotations=[
                    Mask(np.array([[1, 1, 0, 0, 0]]), label=19,
                        attributes={'is_crowd': True}),
                    Mask(np.array([[0, 0, 1, 1, 1]]), label=14,
                        attributes={'is_crowd': True}),
                ]
            ),
            DatasetItem(id='defaultcity/defaultcity_000001_000032',
                subset='test',
                image=np.ones((1, 5, 3)),
                annotations=[
                    Mask(np.array([[1, 1, 0, 0, 0]]), label=16,
                        attributes={'is_crowd': True}),
                    Mask(np.array([[0, 0, 1, 0, 0]]), label=3,
                        attributes={'is_crowd': True}),
                    Mask(np.array([[0, 0, 0, 1, 1]]), label=19,
                        attributes={'is_crowd': True}),
                ]
            ),
            DatasetItem(id='defaultcity/defaultcity_000002_000045',
                subset='train',
                image=np.ones((1, 5, 3)),
                annotations=[
                    Mask(np.array([[1, 1, 0, 1, 1]]), label=19,
                        attributes={'is_crowd': True}),
                    Mask(np.array([[0, 0, 1, 0, 0]]), label=11,
                        attributes={'is_crowd': True}),
                ]
            ),
            DatasetItem(id='defaultcity/defaultcity_000001_000019',
                subset = 'val',
                image=np.ones((1, 5, 3)),
                annotations=[
                    Mask(np.array([[1, 1, 1, 1, 1]]), label=19,
                        attributes={'is_crowd': True}),
                ]
            ),
        ], categories=Cityscapes.make_cityscapes_categories(
            label_map=TRAIN_CITYSCAPES_LABEL_MAP))

        parsed_dataset = Dataset.import_from(DUMMY_TRAIN_DATASET_DIR, 'cityscapes')

        compare_datasets(self, source_dataset, parsed_dataset)
コード例 #4
0
    def test_inplace_save_writes_only_updated_data(self):
        src_mask_cat = MaskCategories.generate(2, include_background=False)

        expected = Dataset.from_iterable([
            DatasetItem(1, subset='a', image=np.ones((2, 1, 3)),
                annotations=[
                    Mask(np.ones((2, 1)), label=2, id=1)
                ]),
            DatasetItem(2, subset='a', image=np.ones((3, 2, 3))),

            DatasetItem(2, subset='b', image=np.ones((2, 2, 3)),
                annotations=[
                    Mask(np.ones((2, 2)), label=1, id=1)
                ]),
        ], categories=Cityscapes.make_cityscapes_categories(OrderedDict([
            ('a', src_mask_cat.colormap[0]),
            ('b', src_mask_cat.colormap[1]),
        ])))

        with TestDir() as path:
            dataset = Dataset.from_iterable([
                DatasetItem(1, subset='a', image=np.ones((2, 1, 3)),
                    annotations=[
                        Mask(np.ones((2, 1)), label=1)
                    ]),
                DatasetItem(2, subset='b', image=np.ones((2, 2, 3)),
                    annotations=[
                        Mask(np.ones((2, 2)), label=0)
                    ]),
                DatasetItem(3, subset='c', image=np.ones((2, 3, 3)),
                    annotations=[
                        Mask(np.ones((2, 2)), label=0)
                    ]),

            ], categories={
                AnnotationType.label: LabelCategories.from_iterable(['a', 'b']),
                AnnotationType.mask: src_mask_cat
            })
            dataset.export(path, 'cityscapes', save_images=True)

            dataset.put(DatasetItem(2, subset='a', image=np.ones((3, 2, 3))))
            dataset.remove(3, 'c')
            dataset.save(save_images=True)

            self.assertEqual({'a', 'b'},
                set(os.listdir(osp.join(path, 'gtFine'))))
            self.assertEqual({
                    '1_gtFine_color.png', '1_gtFine_instanceIds.png',
                    '1_gtFine_labelIds.png'
                },
                set(os.listdir(osp.join(path, 'gtFine', 'a'))))
            self.assertEqual({
                    '2_gtFine_color.png', '2_gtFine_instanceIds.png',
                    '2_gtFine_labelIds.png'
                },
                set(os.listdir(osp.join(path, 'gtFine', 'b'))))
            self.assertEqual({'a', 'b'},
                set(os.listdir(osp.join(path, 'imgsFine', 'leftImg8bit'))))
            self.assertEqual({'1_leftImg8bit.png', '2_leftImg8bit.png'},
                set(os.listdir(osp.join(path, 'imgsFine', 'leftImg8bit', 'a'))))
            self.assertEqual({'2_leftImg8bit.png'},
                set(os.listdir(osp.join(path, 'imgsFine', 'leftImg8bit', 'b'))))
            compare_datasets(self, expected,
                Dataset.import_from(path, 'cityscapes'),
                require_images=True, ignored_attrs=IGNORE_ALL)
コード例 #5
0
 def categories(self):
     label_map = OrderedDict()
     label_map['a'] = None
     label_map['b'] = None
     return Cityscapes.make_cityscapes_categories(label_map)
コード例 #6
0
 def categories(self):
     label_map = OrderedDict()
     label_map['background'] = (0, 0, 0)
     label_map['label_1'] = (1, 2, 3)
     label_map['label_2'] = (3, 2, 1)
     return Cityscapes.make_cityscapes_categories(label_map)
コード例 #7
0
 def categories(self):
     return Cityscapes.make_cityscapes_categories()