123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- import copy
- import os.path as osp
- import unittest
- from mmcv.transforms import Compose
- from mmdet.datasets.transforms import MultiBranch, RandomOrder
- from mmdet.utils import register_all_modules
- from .utils import construct_toy_data
- register_all_modules()
- class TestMultiBranch(unittest.TestCase):
- def setUp(self):
- """Setup the model and optimizer which are used in every test method.
- TestCase calls functions in this order: setUp() -> testMethod() ->
- tearDown() -> cleanUp()
- """
- data_prefix = osp.join(osp.dirname(__file__), '../../data')
- img_path = osp.join(data_prefix, 'color.jpg')
- seg_map = osp.join(data_prefix, 'gray.jpg')
- self.meta_keys = ('img_id', 'img_path', 'ori_shape', 'img_shape',
- 'scale_factor', 'flip', 'flip_direction',
- 'homography_matrix')
- self.results = {
- 'img_path':
- img_path,
- 'img_id':
- 12345,
- 'img_shape': (300, 400),
- 'seg_map_path':
- seg_map,
- 'instances': [{
- 'bbox': [0, 0, 10, 20],
- 'bbox_label': 1,
- 'mask': [[0, 0, 0, 20, 10, 20, 10, 0]],
- 'ignore_flag': 0
- }, {
- 'bbox': [10, 10, 110, 120],
- 'bbox_label': 2,
- 'mask': [[10, 10, 110, 10, 110, 120, 110, 10]],
- 'ignore_flag': 0
- }, {
- 'bbox': [50, 50, 60, 80],
- 'bbox_label': 2,
- 'mask': [[50, 50, 60, 50, 60, 80, 50, 80]],
- 'ignore_flag': 1
- }]
- }
- self.branch_field = ['sup', 'sup_teacher', 'sup_student']
- self.weak_pipeline = [
- dict(type='ShearX'),
- dict(type='PackDetInputs', meta_keys=self.meta_keys)
- ]
- self.strong_pipeline = [
- dict(type='ShearX'),
- dict(type='ShearY'),
- dict(type='PackDetInputs', meta_keys=self.meta_keys)
- ]
- self.labeled_pipeline = [
- dict(type='LoadImageFromFile'),
- dict(
- type='LoadAnnotations',
- with_bbox=True,
- with_mask=True,
- with_seg=True),
- dict(type='Resize', scale=(1333, 800), keep_ratio=True),
- dict(type='RandomFlip', prob=0.5),
- dict(
- type='MultiBranch',
- branch_field=self.branch_field,
- sup_teacher=self.weak_pipeline,
- sup_student=self.strong_pipeline),
- ]
- self.unlabeled_pipeline = [
- dict(type='LoadImageFromFile'),
- dict(type='Resize', scale=(1333, 800), keep_ratio=True),
- dict(type='RandomFlip', prob=0.5),
- dict(
- type='MultiBranch',
- branch_field=self.branch_field,
- unsup_teacher=self.weak_pipeline,
- unsup_student=self.strong_pipeline),
- ]
- def test_transform(self):
- labeled_pipeline = Compose(self.labeled_pipeline)
- labeled_results = labeled_pipeline(copy.deepcopy(self.results))
- unlabeled_pipeline = Compose(self.unlabeled_pipeline)
- unlabeled_results = unlabeled_pipeline(copy.deepcopy(self.results))
- # test branch sup_teacher and sup_student
- sup_branches = ['sup_teacher', 'sup_student']
- for branch in sup_branches:
- self.assertIn(branch, labeled_results['data_samples'])
- self.assertIn('homography_matrix',
- labeled_results['data_samples'][branch])
- self.assertIn('labels',
- labeled_results['data_samples'][branch].gt_instances)
- self.assertIn('bboxes',
- labeled_results['data_samples'][branch].gt_instances)
- self.assertIn('masks',
- labeled_results['data_samples'][branch].gt_instances)
- self.assertIn('gt_sem_seg',
- labeled_results['data_samples'][branch])
- # test branch unsup_teacher and unsup_student
- unsup_branches = ['unsup_teacher', 'unsup_student']
- for branch in unsup_branches:
- self.assertIn(branch, unlabeled_results['data_samples'])
- self.assertIn('homography_matrix',
- unlabeled_results['data_samples'][branch])
- self.assertNotIn(
- 'labels',
- unlabeled_results['data_samples'][branch].gt_instances)
- self.assertNotIn(
- 'bboxes',
- unlabeled_results['data_samples'][branch].gt_instances)
- self.assertNotIn(
- 'masks',
- unlabeled_results['data_samples'][branch].gt_instances)
- self.assertNotIn('gt_sem_seg',
- unlabeled_results['data_samples'][branch])
- def test_repr(self):
- pipeline = [dict(type='PackDetInputs', meta_keys=())]
- transform = MultiBranch(
- branch_field=self.branch_field, sup=pipeline, unsup=pipeline)
- self.assertEqual(
- repr(transform),
- ("MultiBranch(branch_pipelines=['sup', 'unsup'])"))
- class TestRandomOrder(unittest.TestCase):
- def setUp(self):
- """Setup the model and optimizer which are used in every test method.
- TestCase calls functions in this order: setUp() -> testMethod() ->
- tearDown() -> cleanUp()
- """
- self.results = construct_toy_data(poly2mask=True)
- self.pipeline = [
- dict(type='Sharpness'),
- dict(type='Contrast'),
- dict(type='Brightness'),
- dict(type='Rotate'),
- dict(type='ShearX'),
- dict(type='TranslateY')
- ]
- def test_transform(self):
- transform = RandomOrder(self.pipeline)
- results = transform(copy.deepcopy(self.results))
- self.assertEqual(results['img_shape'], self.results['img_shape'])
- self.assertEqual(results['gt_bboxes'].shape,
- self.results['gt_bboxes'].shape)
- self.assertEqual(results['gt_bboxes_labels'],
- self.results['gt_bboxes_labels'])
- self.assertEqual(results['gt_ignore_flags'],
- self.results['gt_ignore_flags'])
- self.assertEqual(results['gt_masks'].masks.shape,
- self.results['gt_masks'].masks.shape)
- self.assertEqual(results['gt_seg_map'].shape,
- self.results['gt_seg_map'].shape)
- def test_repr(self):
- transform = RandomOrder(self.pipeline)
- self.assertEqual(
- repr(transform), ('RandomOrder(Sharpness, Contrast, '
- 'Brightness, Rotate, ShearX, TranslateY, )'))
|