Beispiel #1
0
    def test_remap_labels_ignore_missing_labels_in_secondary_categories(self):
        source_dataset = Dataset.from_iterable([
            DatasetItem(id=1, annotations=[
                Label(0),
            ])
        ], categories={
            AnnotationType.label: LabelCategories.from_iterable(['a', 'b', 'c']),
            AnnotationType.points: PointsCategories.from_iterable([]), # all missing
            AnnotationType.mask: MaskCategories.generate(2) # no c color
        })

        target_dataset = Dataset.from_iterable([
            DatasetItem(id=1, annotations=[
                Label(0),
            ]),
        ], categories={
            AnnotationType.label: LabelCategories.from_iterable(['d', 'e', 'f']),
            AnnotationType.points: PointsCategories.from_iterable([]),
            AnnotationType.mask: MaskCategories.generate(2)
        })

        actual = transforms.RemapLabels(source_dataset,
            mapping={ 'a': 'd', 'b': 'e', 'c': 'f' }, default='delete')

        compare_datasets(self, target_dataset, actual)
    def test_remap_labels(self):
        src_dataset = Dataset.from_iterable(
            [
                DatasetItem(
                    id=1,
                    annotations=[
                        # Should be remapped
                        Label(1),
                        Bbox(1, 2, 3, 4, label=2),
                        Mask(image=np.array([1]), label=3),

                        # Should be kept
                        Polygon([1, 1, 2, 2, 3, 4], label=4),
                        PolyLine([1, 3, 4, 2, 5, 6])
                    ])
            ],
            categories={
                AnnotationType.label:
                LabelCategories.from_iterable('label%s' % i for i in range(5)),
                AnnotationType.mask:
                MaskCategories(colormap=mask_tools.generate_colormap(5)),
            })

        dst_dataset = Dataset.from_iterable(
            [
                DatasetItem(id=1,
                            annotations=[
                                Label(1),
                                Bbox(1, 2, 3, 4, label=0),
                                Mask(image=np.array([1]), label=1),
                                Polygon([1, 1, 2, 2, 3, 4], label=2),
                                PolyLine([1, 3, 4, 2, 5, 6], label=None)
                            ]),
            ],
            categories={
                AnnotationType.label:
                LabelCategories.from_iterable(['label0', 'label9', 'label4']),
                AnnotationType.mask:
                MaskCategories(
                    colormap={
                        k: v
                        for k, v in mask_tools.generate_colormap(5).items()
                        if k in {0, 1, 3, 4}
                    })
            })

        actual = transforms.RemapLabels(src_dataset,
                                        mapping={
                                            'label1': 'label9',
                                            'label2': 'label0',
                                            'label3': 'label9',
                                        },
                                        default='keep')

        compare_datasets(self, dst_dataset, actual)
Beispiel #3
0
    def test_remap_labels(self):
        src_dataset = Dataset.from_iterable([
            DatasetItem(id=1, annotations=[
                # Should be remapped
                Label(1),
                Bbox(1, 2, 3, 4, label=2),
                Mask(image=np.array([1]), label=3),

                # Should be deleted
                Polygon([1, 1, 2, 2, 3, 4], label=4),

                # Should be kept
                PolyLine([1, 3, 4, 2, 5, 6]),
                Bbox(4, 3, 2, 1, label=5),
            ])
        ], categories={
            AnnotationType.label: LabelCategories.from_iterable(
                f'label{i}' for i in range(6)),
            AnnotationType.mask: MaskCategories(
                colormap=mask_tools.generate_colormap(6)),
            AnnotationType.points: PointsCategories.from_iterable(
                [(i, [str(i)]) for i in range(6)])
        })

        dst_dataset = Dataset.from_iterable([
            DatasetItem(id=1, annotations=[
                Label(1),
                Bbox(1, 2, 3, 4, label=0),
                Mask(image=np.array([1]), label=1),

                PolyLine([1, 3, 4, 2, 5, 6], label=None),
                Bbox(4, 3, 2, 1, label=2),
            ]),
        ], categories={
            AnnotationType.label: LabelCategories.from_iterable(
                ['label0', 'label9', 'label5']),
            AnnotationType.mask: MaskCategories(colormap={
                i: v for i, v in enumerate({
                    k: v for k, v in mask_tools.generate_colormap(6).items()
                    if k in { 0, 1, 5 }
                }.values())
            }),
            AnnotationType.points: PointsCategories.from_iterable(
                [(0, ['0']), (1, ['1']), (2, ['5'])])
        })

        actual = transforms.RemapLabels(src_dataset, mapping={
            'label1': 'label9', # rename & join with new label9 (from label3)
            'label2': 'label0', # rename & join with existing label0
            'label3': 'label9', # rename & join with new label9 (from label1)
            'label4': '', # delete the label and associated annotations
            # 'label5' - unchanged
        }, default='keep')

        compare_datasets(self, dst_dataset, actual)
    def test_remap_labels_delete_unspecified(self):
        source_dataset = Dataset.from_iterable(
            [DatasetItem(id=1, annotations=[Label(0)])], categories=['label0'])

        target_dataset = Dataset.from_iterable([
            DatasetItem(id=1),
        ],
                                               categories=[])

        actual = transforms.RemapLabels(source_dataset,
                                        mapping={},
                                        default='delete')

        compare_datasets(self, target_dataset, actual)
Beispiel #5
0
    def test_remap_labels_delete_unspecified(self):
        source_dataset = Dataset.from_iterable([
            DatasetItem(id=1, annotations=[
                Label(0, id=0), # will be removed
                Label(1, id=1),
                Bbox(1, 2, 3, 4, label=None),
            ])
        ], categories=['label0', 'label1'])

        target_dataset = Dataset.from_iterable([
            DatasetItem(id=1, annotations=[
                Label(0, id=1),
            ]),
        ], categories=['label1'])

        actual = transforms.RemapLabels(source_dataset,
            mapping={ 'label1': 'label1' }, default='delete')

        compare_datasets(self, target_dataset, actual)
Beispiel #6
0
    def test_remap_labels_delete_unspecified(self):
        class SrcExtractor(Extractor):
            def __iter__(self):
                return iter([DatasetItem(id=1, annotations=[Label(0)])])

            def categories(self):
                label_cat = LabelCategories()
                label_cat.add('label0')

                return {AnnotationType.label: label_cat}

        class DstExtractor(Extractor):
            def __iter__(self):
                return iter([DatasetItem(id=1, annotations=[])])

            def categories(self):
                return {AnnotationType.label: LabelCategories()}

        actual = transforms.RemapLabels(SrcExtractor(),
                                        mapping={},
                                        default='delete')

        compare_datasets(self, DstExtractor(), actual)
Beispiel #7
0
    def test_remap_labels(self):
        class SrcExtractor(Extractor):
            def __iter__(self):
                return iter([
                    DatasetItem(
                        id=1,
                        annotations=[
                            # Should be remapped
                            Label(1),
                            Bbox(1, 2, 3, 4, label=2),
                            Mask(image=np.array([1]), label=3),

                            # Should be kept
                            Polygon([1, 1, 2, 2, 3, 4], label=4),
                            PolyLine([1, 3, 4, 2, 5, 6], label=None)
                        ]),
                ])

            def categories(self):
                label_cat = LabelCategories()
                label_cat.add('label0')
                label_cat.add('label1')
                label_cat.add('label2')
                label_cat.add('label3')
                label_cat.add('label4')

                mask_cat = MaskCategories(
                    colormap=mask_tools.generate_colormap(5))

                return {
                    AnnotationType.label: label_cat,
                    AnnotationType.mask: mask_cat,
                }

        class DstExtractor(Extractor):
            def __iter__(self):
                return iter([
                    DatasetItem(id=1,
                                annotations=[
                                    Label(1),
                                    Bbox(1, 2, 3, 4, label=0),
                                    Mask(image=np.array([1]), label=1),
                                    Polygon([1, 1, 2, 2, 3, 4], label=2),
                                    PolyLine([1, 3, 4, 2, 5, 6], label=None)
                                ]),
                ])

            def categories(self):
                label_cat = LabelCategories()
                label_cat.add('label0')
                label_cat.add('label9')
                label_cat.add('label4')

                mask_cat = MaskCategories(
                    colormap={
                        k: v
                        for k, v in mask_tools.generate_colormap(5).items()
                        if k in {0, 1, 3, 4}
                    })

                return {
                    AnnotationType.label: label_cat,
                    AnnotationType.mask: mask_cat,
                }

        actual = transforms.RemapLabels(SrcExtractor(),
                                        mapping={
                                            'label1': 'label9',
                                            'label2': 'label0',
                                            'label3': 'label9',
                                        },
                                        default='keep')

        compare_datasets(self, DstExtractor(), actual)