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)
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)
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)
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)
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)