|
|
|
import copy |
|
import unittest |
|
|
|
import numpy as np |
|
|
|
from mmdet.datasets.transforms import (GeomTransform, Rotate, ShearX, ShearY, |
|
TranslateX, TranslateY) |
|
from mmdet.structures.bbox import HorizontalBoxes |
|
from mmdet.structures.mask import BitmapMasks, PolygonMasks |
|
from .utils import check_result_same, construct_toy_data |
|
|
|
|
|
class TestGeomTransform(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.check_keys = ('img', 'gt_bboxes', 'gt_bboxes_labels', 'gt_masks', |
|
'gt_ignore_flags', 'gt_seg_map') |
|
self.results_mask = construct_toy_data(poly2mask=True) |
|
self.img_border_value = (104, 116, 124) |
|
self.seg_ignore_label = 255 |
|
|
|
def test_geomtransform(self): |
|
|
|
with self.assertRaises(AssertionError): |
|
transform = GeomTransform( |
|
prob=-0.5, level=1, min_mag=0.0, max_mag=1.0) |
|
|
|
|
|
with self.assertRaises(AssertionError): |
|
transform = GeomTransform( |
|
prob=0.5, level=-1, min_mag=0.0, max_mag=1.0) |
|
|
|
|
|
with self.assertRaises(AssertionError): |
|
transform = ShearX(prob=0.5, level=2, min_mag=1.0, max_mag=0.0) |
|
|
|
|
|
with self.assertRaises(AssertionError): |
|
transform = GeomTransform( |
|
prob=0.5, |
|
level=1, |
|
min_mag=0.0, |
|
max_mag=1.0, |
|
img_border_value=(128, 128, 128, 128)) |
|
|
|
|
|
with self.assertRaises(ValueError): |
|
transform = GeomTransform( |
|
prob=0.5, |
|
level=1, |
|
min_mag=0.0, |
|
max_mag=1.0, |
|
img_border_value=[128, 128, 128]) |
|
|
|
|
|
with self.assertRaises(AssertionError): |
|
transform = GeomTransform( |
|
prob=0.5, |
|
level=1, |
|
min_mag=0.0, |
|
max_mag=1.0, |
|
img_border_value=(128, -1, 256)) |
|
|
|
|
|
transform = GeomTransform( |
|
prob=0., |
|
level=10, |
|
min_mag=0.0, |
|
max_mag=1.0, |
|
img_border_value=self.img_border_value) |
|
results_wo_aug = transform(copy.deepcopy(self.results_mask)) |
|
check_result_same(self.results_mask, results_wo_aug, self.check_keys) |
|
|
|
def test_repr(self): |
|
transform = GeomTransform( |
|
prob=0.5, |
|
level=5, |
|
min_mag=0.0, |
|
max_mag=1.0, |
|
) |
|
self.assertEqual( |
|
repr(transform), ('GeomTransform(prob=0.5, ' |
|
'level=5, ' |
|
'min_mag=0.0, ' |
|
'max_mag=1.0, ' |
|
'reversal_prob=0.5, ' |
|
'img_border_value=(128.0, 128.0, 128.0), ' |
|
'mask_border_value=0, ' |
|
'seg_ignore_label=255, ' |
|
'interpolation=bilinear)')) |
|
|
|
|
|
class TestShearX(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.check_keys = ('img', 'gt_bboxes', 'gt_bboxes_labels', 'gt_masks', |
|
'gt_ignore_flags', 'gt_seg_map') |
|
self.results_mask = construct_toy_data(poly2mask=True) |
|
self.results_poly = construct_toy_data(poly2mask=False) |
|
self.results_mask_boxtype = construct_toy_data( |
|
poly2mask=True, use_box_type=True) |
|
self.img_border_value = (104, 116, 124) |
|
self.seg_ignore_label = 255 |
|
|
|
def test_shearx(self): |
|
|
|
with self.assertRaises(AssertionError): |
|
transform = ShearX(prob=0.5, level=2, min_mag=-30.) |
|
|
|
with self.assertRaises(AssertionError): |
|
transform = ShearX(prob=0.5, level=2, max_mag=100.) |
|
|
|
|
|
transform = ShearX( |
|
prob=1.0, |
|
level=0, |
|
img_border_value=self.img_border_value, |
|
seg_ignore_label=self.seg_ignore_label, |
|
) |
|
results_wo_shearx = transform(copy.deepcopy(self.results_mask)) |
|
check_result_same(self.results_mask, results_wo_shearx, |
|
self.check_keys) |
|
|
|
|
|
transform = ShearX( |
|
prob=1.0, |
|
level=10, |
|
max_mag=45., |
|
reversal_prob=1.0, |
|
img_border_value=self.img_border_value) |
|
results_sheared = transform(copy.deepcopy(self.results_mask)) |
|
results_gt = copy.deepcopy(self.results_mask) |
|
img_gt = np.array([[1, 2, 3, 4], [0, 5, 6, 7], [0, 0, 9, 10]], |
|
dtype=np.uint8) |
|
img_gt = np.stack([img_gt, img_gt, img_gt], axis=-1) |
|
img_gt[1, 0, :] = np.array(self.img_border_value) |
|
img_gt[2, 0, :] = np.array(self.img_border_value) |
|
img_gt[2, 1, :] = np.array(self.img_border_value) |
|
results_gt['img'] = img_gt |
|
results_gt['gt_bboxes'] = np.array([[1, 0, 4, 2]], dtype=np.float32) |
|
results_gt['gt_bboxes_labels'] = np.array([13], dtype=np.int64) |
|
gt_masks = np.array([[0, 1, 0, 0], [0, 0, 1, 1], [0, 0, 0, 1]], |
|
dtype=np.uint8)[None, :, :] |
|
results_gt['gt_masks'] = BitmapMasks(gt_masks, 3, 4) |
|
results_gt['gt_ignore_flags'] = np.array(np.array([1], dtype=bool)) |
|
results_gt['gt_seg_map'] = np.array( |
|
[[255, 13, 255, 255], [255, 255, 13, 13], [255, 255, 255, 13]], |
|
dtype=self.results_mask['gt_seg_map'].dtype) |
|
check_result_same(results_gt, results_sheared, self.check_keys) |
|
|
|
|
|
results_sheared = transform(copy.deepcopy(self.results_poly)) |
|
gt_masks = [[np.array([3, 2, 1, 0, 3, 1], dtype=np.float32)]] |
|
results_gt['gt_masks'] = PolygonMasks(gt_masks, 3, 4) |
|
check_result_same(results_gt, results_sheared, self.check_keys) |
|
|
|
def test_shearx_use_box_type(self): |
|
|
|
transform = ShearX( |
|
prob=1.0, |
|
level=0, |
|
img_border_value=self.img_border_value, |
|
seg_ignore_label=self.seg_ignore_label, |
|
) |
|
results_wo_shearx = transform(copy.deepcopy(self.results_mask_boxtype)) |
|
check_result_same(self.results_mask_boxtype, results_wo_shearx, |
|
self.check_keys) |
|
|
|
|
|
transform = ShearX( |
|
prob=1.0, |
|
level=10, |
|
max_mag=45., |
|
reversal_prob=1.0, |
|
img_border_value=self.img_border_value) |
|
results_sheared = transform(copy.deepcopy(self.results_mask_boxtype)) |
|
results_gt = copy.deepcopy(self.results_mask_boxtype) |
|
img_gt = np.array([[1, 2, 3, 4], [0, 5, 6, 7], [0, 0, 9, 10]], |
|
dtype=np.uint8) |
|
img_gt = np.stack([img_gt, img_gt, img_gt], axis=-1) |
|
img_gt[1, 0, :] = np.array(self.img_border_value) |
|
img_gt[2, 0, :] = np.array(self.img_border_value) |
|
img_gt[2, 1, :] = np.array(self.img_border_value) |
|
results_gt['img'] = img_gt |
|
results_gt['gt_bboxes'] = HorizontalBoxes( |
|
np.array([[1, 0, 4, 2]], dtype=np.float32)) |
|
results_gt['gt_bboxes_labels'] = np.array([13], dtype=np.int64) |
|
gt_masks = np.array([[0, 1, 0, 0], [0, 0, 1, 1], [0, 0, 0, 1]], |
|
dtype=np.uint8)[None, :, :] |
|
results_gt['gt_masks'] = BitmapMasks(gt_masks, 3, 4) |
|
results_gt['gt_ignore_flags'] = np.array(np.array([1], dtype=bool)) |
|
results_gt['gt_seg_map'] = np.array( |
|
[[255, 13, 255, 255], [255, 255, 13, 13], [255, 255, 255, 13]], |
|
dtype=self.results_mask['gt_seg_map'].dtype) |
|
check_result_same(results_gt, results_sheared, self.check_keys) |
|
|
|
def test_repr(self): |
|
transform = ShearX(prob=0.5, level=10) |
|
self.assertEqual( |
|
repr(transform), ('ShearX(prob=0.5, ' |
|
'level=10, ' |
|
'min_mag=0.0, ' |
|
'max_mag=30.0, ' |
|
'reversal_prob=0.5, ' |
|
'img_border_value=(128.0, 128.0, 128.0), ' |
|
'mask_border_value=0, ' |
|
'seg_ignore_label=255, ' |
|
'interpolation=bilinear)')) |
|
|
|
|
|
class TestShearY(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.check_keys = ('img', 'gt_bboxes', 'gt_bboxes_labels', 'gt_masks', |
|
'gt_ignore_flags', 'gt_seg_map') |
|
self.results_mask = construct_toy_data(poly2mask=True) |
|
self.results_poly = construct_toy_data(poly2mask=False) |
|
self.results_mask_boxtype = construct_toy_data( |
|
poly2mask=True, use_box_type=True) |
|
self.img_border_value = (104, 116, 124) |
|
self.seg_ignore_label = 255 |
|
|
|
def test_sheary(self): |
|
|
|
with self.assertRaises(AssertionError): |
|
transform = ShearY(prob=0.5, level=2, min_mag=-30.) |
|
|
|
with self.assertRaises(AssertionError): |
|
transform = ShearY(prob=0.5, level=2, max_mag=100.) |
|
|
|
|
|
transform = ShearY( |
|
prob=1.0, |
|
level=0, |
|
img_border_value=self.img_border_value, |
|
seg_ignore_label=self.seg_ignore_label, |
|
) |
|
results_wo_sheary = transform(copy.deepcopy(self.results_mask)) |
|
check_result_same(self.results_mask, results_wo_sheary, |
|
self.check_keys) |
|
|
|
|
|
transform = ShearY(prob=1., level=10, max_mag=45., reversal_prob=0.) |
|
results_sheared = transform(copy.deepcopy(self.results_mask)) |
|
results_gt = copy.deepcopy(self.results_mask) |
|
img_gt = np.array( |
|
[[1, 6, 11, 128], [5, 10, 128, 128], [9, 128, 128, 128]], |
|
dtype=np.uint8) |
|
img_gt = np.stack([img_gt, img_gt, img_gt], axis=-1) |
|
results_gt['img'] = img_gt |
|
results_gt['gt_bboxes'] = np.array([[1, 0, 2, 1]], dtype=np.float32) |
|
results_gt['gt_bboxes_labels'] = np.array([13], dtype=np.int64) |
|
gt_masks = np.array([[0, 1, 0, 0], [0, 1, 0, 0], [0, 0, 0, 0]], |
|
dtype=np.uint8)[None, :, :] |
|
results_gt['gt_masks'] = BitmapMasks(gt_masks, 3, 4) |
|
results_gt['gt_ignore_flags'] = np.array(np.array([1], dtype=bool)) |
|
results_gt['gt_seg_map'] = np.array( |
|
[[255, 13, 255, 255], [255, 13, 255, 255], [255, 255, 255, 255]], |
|
dtype=self.results_mask['gt_seg_map'].dtype) |
|
check_result_same(results_gt, results_sheared, self.check_keys) |
|
|
|
|
|
results_sheared = transform(copy.deepcopy(self.results_poly)) |
|
gt_masks = [[np.array([1, 1, 1, 0, 2, 0], dtype=np.float32)]] |
|
results_gt['gt_masks'] = PolygonMasks(gt_masks, 3, 4) |
|
check_result_same(results_gt, results_sheared, self.check_keys) |
|
|
|
def test_sheary_use_box_type(self): |
|
|
|
transform = ShearY( |
|
prob=1.0, |
|
level=0, |
|
img_border_value=self.img_border_value, |
|
seg_ignore_label=self.seg_ignore_label, |
|
) |
|
results_wo_sheary = transform(copy.deepcopy(self.results_mask_boxtype)) |
|
check_result_same(self.results_mask_boxtype, results_wo_sheary, |
|
self.check_keys) |
|
|
|
|
|
transform = ShearY(prob=1., level=10, max_mag=45., reversal_prob=0.) |
|
results_sheared = transform(copy.deepcopy(self.results_mask_boxtype)) |
|
results_gt = copy.deepcopy(self.results_mask_boxtype) |
|
img_gt = np.array( |
|
[[1, 6, 11, 128], [5, 10, 128, 128], [9, 128, 128, 128]], |
|
dtype=np.uint8) |
|
img_gt = np.stack([img_gt, img_gt, img_gt], axis=-1) |
|
results_gt['img'] = img_gt |
|
results_gt['gt_bboxes'] = HorizontalBoxes( |
|
np.array([[1, 0, 2, 1]], dtype=np.float32)) |
|
results_gt['gt_bboxes_labels'] = np.array([13], dtype=np.int64) |
|
gt_masks = np.array([[0, 1, 0, 0], [0, 1, 0, 0], [0, 0, 0, 0]], |
|
dtype=np.uint8)[None, :, :] |
|
results_gt['gt_masks'] = BitmapMasks(gt_masks, 3, 4) |
|
results_gt['gt_ignore_flags'] = np.array(np.array([1], dtype=bool)) |
|
results_gt['gt_seg_map'] = np.array( |
|
[[255, 13, 255, 255], [255, 13, 255, 255], [255, 255, 255, 255]], |
|
dtype=self.results_mask['gt_seg_map'].dtype) |
|
check_result_same(results_gt, results_sheared, self.check_keys) |
|
|
|
def test_repr(self): |
|
transform = ShearY(prob=0.5, level=10) |
|
self.assertEqual( |
|
repr(transform), ('ShearY(prob=0.5, ' |
|
'level=10, ' |
|
'min_mag=0.0, ' |
|
'max_mag=30.0, ' |
|
'reversal_prob=0.5, ' |
|
'img_border_value=(128.0, 128.0, 128.0), ' |
|
'mask_border_value=0, ' |
|
'seg_ignore_label=255, ' |
|
'interpolation=bilinear)')) |
|
|
|
|
|
class TestRotate(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.check_keys = ('img', 'gt_bboxes', 'gt_bboxes_labels', 'gt_masks', |
|
'gt_ignore_flags', 'gt_seg_map') |
|
self.results_mask = construct_toy_data(poly2mask=True) |
|
self.results_poly = construct_toy_data(poly2mask=False) |
|
self.results_mask_boxtype = construct_toy_data( |
|
poly2mask=True, use_box_type=True) |
|
self.img_border_value = (104, 116, 124) |
|
self.seg_ignore_label = 255 |
|
|
|
def test_rotate(self): |
|
|
|
with self.assertRaises(AssertionError): |
|
transform = ShearY(prob=0.5, level=2, min_mag=-90.0) |
|
|
|
with self.assertRaises(AssertionError): |
|
transform = ShearY(prob=0.5, level=2, max_mag=270.0) |
|
|
|
|
|
transform = Rotate( |
|
prob=1., |
|
level=0, |
|
img_border_value=self.img_border_value, |
|
seg_ignore_label=self.seg_ignore_label, |
|
) |
|
results_wo_rotate = transform(copy.deepcopy(self.results_mask)) |
|
check_result_same(self.results_mask, results_wo_rotate, |
|
self.check_keys) |
|
|
|
|
|
transform = Rotate( |
|
prob=1., |
|
level=10, |
|
max_mag=90.0, |
|
|
|
reversal_prob=1., |
|
) |
|
results_rotated = transform(copy.deepcopy(self.results_mask)) |
|
|
|
|
|
img_gt = np.array([[69, 8, 4, 65], [69, 9, 5, 65], |
|
[70, 10, 6, 66]]).astype(np.uint8) |
|
img_gt = np.stack([img_gt, img_gt, img_gt], axis=-1) |
|
results_gt = copy.deepcopy(self.results_mask) |
|
results_gt['img'] = img_gt |
|
results_gt['gt_bboxes'] = np.array([[0.5, 0.5, 2.5, 1.5]], |
|
dtype=np.float32) |
|
gt_masks = np.array([[0, 1, 1, 0], [0, 1, 1, 0], [0, 0, 0, 0]], |
|
dtype=np.uint8)[None, :, :] |
|
results_gt['gt_masks'] = BitmapMasks(gt_masks, 3, 4) |
|
results_gt['gt_ignore_flags'] = np.array(np.array([1], dtype=bool)) |
|
results_gt['gt_seg_map'] = np.array( |
|
[[255, 13, 13, 13], [255, 255, 13, 255], |
|
[255, 255, 255, |
|
255]]).astype(self.results_mask['gt_seg_map'].dtype) |
|
check_result_same(results_gt, results_rotated, self.check_keys) |
|
|
|
|
|
results_rotated = transform(copy.deepcopy(self.results_poly)) |
|
gt_masks = [[np.array([0, 1, 0, 1, 0, 2], dtype=np.float)]] |
|
results_gt['gt_masks'] = PolygonMasks(gt_masks, 3, 4) |
|
check_result_same(results_gt, results_rotated, self.check_keys) |
|
|
|
|
|
transform = Rotate( |
|
prob=1.0, |
|
level=10, |
|
max_mag=90.0, |
|
|
|
reversal_prob=0.0, |
|
) |
|
results_rotated = transform(copy.deepcopy(self.results_mask)) |
|
|
|
|
|
img_gt = np.array([[66, 6, 10, 70], [65, 5, 9, 69], |
|
[65, 4, 8, 69]]).astype(np.uint8) |
|
img_gt = np.stack([img_gt, img_gt, img_gt], axis=-1) |
|
results_gt = copy.deepcopy(self.results_mask) |
|
results_gt['img'] = img_gt |
|
results_gt['gt_bboxes'] = np.array([[0.5, 0.5, 2.5, 1.5]], |
|
dtype=np.float32) |
|
gt_masks = np.array([[0, 0, 0, 0], [0, 1, 1, 0], [0, 1, 1, 0]], |
|
dtype=np.uint8)[None, :, :] |
|
results_gt['gt_masks'] = BitmapMasks(gt_masks, 3, 4) |
|
results_gt['gt_ignore_flags'] = np.array(np.array([1], dtype=bool)) |
|
results_gt['gt_seg_map'] = np.array( |
|
[[255, 255, 255, 255], [255, 13, 255, 255], |
|
[13, 13, 13, 255]]).astype(self.results_mask['gt_seg_map'].dtype) |
|
check_result_same(results_gt, results_rotated, self.check_keys) |
|
|
|
|
|
results_rotated = transform(copy.deepcopy(self.results_poly)) |
|
gt_masks = [[np.array([2, 0, 0, 0, 1, 0], dtype=np.float)]] |
|
results_gt['gt_masks'] = PolygonMasks(gt_masks, 3, 4) |
|
check_result_same(results_gt, results_rotated, self.check_keys) |
|
|
|
def test_rotate_use_box_type(self): |
|
|
|
transform = Rotate( |
|
prob=1., |
|
level=0, |
|
img_border_value=self.img_border_value, |
|
seg_ignore_label=self.seg_ignore_label, |
|
) |
|
results_wo_rotate = transform(copy.deepcopy(self.results_mask_boxtype)) |
|
check_result_same(self.results_mask_boxtype, results_wo_rotate, |
|
self.check_keys) |
|
|
|
|
|
transform = Rotate( |
|
prob=1., |
|
level=10, |
|
max_mag=90.0, |
|
|
|
reversal_prob=1., |
|
) |
|
results_rotated = transform(copy.deepcopy(self.results_mask_boxtype)) |
|
|
|
|
|
img_gt = np.array([[69, 8, 4, 65], [69, 9, 5, 65], |
|
[70, 10, 6, 66]]).astype(np.uint8) |
|
img_gt = np.stack([img_gt, img_gt, img_gt], axis=-1) |
|
results_gt = copy.deepcopy(self.results_mask_boxtype) |
|
results_gt['img'] = img_gt |
|
results_gt['gt_bboxes'] = HorizontalBoxes( |
|
np.array([[0.5, 0.5, 2.5, 1.5]], dtype=np.float32)) |
|
gt_masks = np.array([[0, 1, 1, 0], [0, 1, 1, 0], [0, 0, 0, 0]], |
|
dtype=np.uint8)[None, :, :] |
|
results_gt['gt_masks'] = BitmapMasks(gt_masks, 3, 4) |
|
results_gt['gt_ignore_flags'] = np.array(np.array([1], dtype=bool)) |
|
results_gt['gt_seg_map'] = np.array( |
|
[[255, 13, 13, 13], [255, 255, 13, 255], |
|
[255, 255, 255, |
|
255]]).astype(self.results_mask['gt_seg_map'].dtype) |
|
check_result_same(results_gt, results_rotated, self.check_keys) |
|
|
|
|
|
transform = Rotate( |
|
prob=1.0, |
|
level=10, |
|
max_mag=90.0, |
|
|
|
reversal_prob=0.0, |
|
) |
|
results_rotated = transform(copy.deepcopy(self.results_mask_boxtype)) |
|
|
|
|
|
img_gt = np.array([[66, 6, 10, 70], [65, 5, 9, 69], |
|
[65, 4, 8, 69]]).astype(np.uint8) |
|
img_gt = np.stack([img_gt, img_gt, img_gt], axis=-1) |
|
results_gt = copy.deepcopy(self.results_mask_boxtype) |
|
results_gt['img'] = img_gt |
|
results_gt['gt_bboxes'] = HorizontalBoxes( |
|
np.array([[0.5, 0.5, 2.5, 1.5]], dtype=np.float32)) |
|
gt_masks = np.array([[0, 0, 0, 0], [0, 1, 1, 0], [0, 1, 1, 0]], |
|
dtype=np.uint8)[None, :, :] |
|
results_gt['gt_masks'] = BitmapMasks(gt_masks, 3, 4) |
|
results_gt['gt_ignore_flags'] = np.array(np.array([1], dtype=bool)) |
|
results_gt['gt_seg_map'] = np.array( |
|
[[255, 255, 255, 255], [255, 13, 255, 255], |
|
[13, 13, 13, 255]]).astype(self.results_mask['gt_seg_map'].dtype) |
|
check_result_same(results_gt, results_rotated, self.check_keys) |
|
|
|
def test_repr(self): |
|
transform = Rotate(prob=0.5, level=5) |
|
self.assertEqual( |
|
repr(transform), ('Rotate(prob=0.5, ' |
|
'level=5, ' |
|
'min_mag=0.0, ' |
|
'max_mag=30.0, ' |
|
'reversal_prob=0.5, ' |
|
'img_border_value=(128.0, 128.0, 128.0), ' |
|
'mask_border_value=0, ' |
|
'seg_ignore_label=255, ' |
|
'interpolation=bilinear)')) |
|
|
|
|
|
class TestTranslateX(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.check_keys = ('img', 'gt_bboxes', 'gt_bboxes_labels', 'gt_masks', |
|
'gt_ignore_flags', 'gt_seg_map') |
|
self.results_mask = construct_toy_data(poly2mask=True) |
|
self.results_poly = construct_toy_data(poly2mask=False) |
|
self.results_mask_boxtype = construct_toy_data( |
|
poly2mask=True, use_box_type=True) |
|
self.img_border_value = (104, 116, 124) |
|
self.seg_ignore_label = 255 |
|
|
|
def test_translatex(self): |
|
|
|
with self.assertRaises(AssertionError): |
|
transform = TranslateX(prob=0.5, level=2, min_mag=-1.) |
|
|
|
with self.assertRaises(AssertionError): |
|
transform = TranslateX(prob=0.5, level=2, max_mag=1.1) |
|
|
|
|
|
transform = TranslateX( |
|
prob=1.0, |
|
level=0, |
|
img_border_value=self.img_border_value, |
|
seg_ignore_label=self.seg_ignore_label) |
|
results_wo_translatex = transform(copy.deepcopy(self.results_mask)) |
|
check_result_same(self.results_mask, results_wo_translatex, |
|
self.check_keys) |
|
|
|
|
|
transform = TranslateX( |
|
prob=1.0, |
|
level=10, |
|
max_mag=0.3, |
|
reversal_prob=0.0, |
|
img_border_value=self.img_border_value, |
|
seg_ignore_label=self.seg_ignore_label) |
|
results_translated = transform(copy.deepcopy(self.results_mask)) |
|
img_gt = np.array([[2, 3, 4, 0], [6, 7, 8, 0], [10, 11, 12, |
|
0]]).astype(np.uint8) |
|
img_gt = np.stack([img_gt, img_gt, img_gt], axis=-1) |
|
img_gt[:, 3, :] = np.array(self.img_border_value) |
|
results_gt = copy.deepcopy(self.results_mask) |
|
results_gt['img'] = img_gt |
|
results_gt['gt_bboxes'] = np.array([[0, 0, 1, 2]], dtype=np.float32) |
|
gt_masks = np.array([[1, 0, 0, 0], [1, 1, 0, 0], [1, 0, 0, 0]], |
|
dtype=np.uint8)[None, :, :] |
|
results_gt['gt_masks'] = BitmapMasks(gt_masks, 3, 4) |
|
results_gt['gt_ignore_flags'] = np.array(np.array([1], dtype=bool)) |
|
results_gt['gt_seg_map'] = np.array( |
|
[[13, 255, 255, 255], [13, 13, 255, 255], |
|
[13, 255, 255, |
|
255]]).astype(self.results_mask['gt_seg_map'].dtype) |
|
check_result_same(results_gt, results_translated, self.check_keys) |
|
|
|
|
|
results_translated = transform(copy.deepcopy(self.results_poly)) |
|
gt_masks = [[np.array([0, 2, 0, 0, 1, 1], dtype=np.float32)]] |
|
results_gt['gt_masks'] = PolygonMasks(gt_masks, 3, 4) |
|
check_result_same(results_gt, results_translated, self.check_keys) |
|
|
|
def test_translatex_use_box_type(self): |
|
|
|
transform = TranslateX( |
|
prob=1.0, |
|
level=0, |
|
img_border_value=self.img_border_value, |
|
seg_ignore_label=self.seg_ignore_label) |
|
results_wo_translatex = transform( |
|
copy.deepcopy(self.results_mask_boxtype)) |
|
check_result_same(self.results_mask_boxtype, results_wo_translatex, |
|
self.check_keys) |
|
|
|
|
|
transform = TranslateX( |
|
prob=1.0, |
|
level=10, |
|
max_mag=0.3, |
|
reversal_prob=0.0, |
|
img_border_value=self.img_border_value, |
|
seg_ignore_label=self.seg_ignore_label) |
|
results_translated = transform( |
|
copy.deepcopy(self.results_mask_boxtype)) |
|
img_gt = np.array([[2, 3, 4, 0], [6, 7, 8, 0], [10, 11, 12, |
|
0]]).astype(np.uint8) |
|
img_gt = np.stack([img_gt, img_gt, img_gt], axis=-1) |
|
img_gt[:, 3, :] = np.array(self.img_border_value) |
|
results_gt = copy.deepcopy(self.results_mask) |
|
results_gt['img'] = img_gt |
|
results_gt['gt_bboxes'] = HorizontalBoxes( |
|
np.array([[0, 0, 1, 2]], dtype=np.float32)) |
|
gt_masks = np.array([[1, 0, 0, 0], [1, 1, 0, 0], [1, 0, 0, 0]], |
|
dtype=np.uint8)[None, :, :] |
|
results_gt['gt_masks'] = BitmapMasks(gt_masks, 3, 4) |
|
results_gt['gt_ignore_flags'] = np.array(np.array([1], dtype=bool)) |
|
results_gt['gt_seg_map'] = np.array( |
|
[[13, 255, 255, 255], [13, 13, 255, 255], |
|
[13, 255, 255, |
|
255]]).astype(self.results_mask['gt_seg_map'].dtype) |
|
check_result_same(results_gt, results_translated, self.check_keys) |
|
|
|
def test_repr(self): |
|
transform = TranslateX(prob=0.5, level=5) |
|
self.assertEqual( |
|
repr(transform), ('TranslateX(prob=0.5, ' |
|
'level=5, ' |
|
'min_mag=0.0, ' |
|
'max_mag=0.1, ' |
|
'reversal_prob=0.5, ' |
|
'img_border_value=(128.0, 128.0, 128.0), ' |
|
'mask_border_value=0, ' |
|
'seg_ignore_label=255, ' |
|
'interpolation=bilinear)')) |
|
|
|
|
|
class TestTranslateY(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.check_keys = ('img', 'gt_bboxes', 'gt_bboxes_labels', 'gt_masks', |
|
'gt_ignore_flags', 'gt_seg_map') |
|
self.results_mask = construct_toy_data(poly2mask=True) |
|
self.results_poly = construct_toy_data(poly2mask=False) |
|
self.results_mask_boxtype = construct_toy_data( |
|
poly2mask=True, use_box_type=True) |
|
self.img_border_value = (104, 116, 124) |
|
self.seg_ignore_label = 255 |
|
|
|
def test_translatey(self): |
|
|
|
with self.assertRaises(AssertionError): |
|
transform = TranslateY(prob=0.5, level=2, min_mag=-1.0) |
|
|
|
with self.assertRaises(AssertionError): |
|
transform = TranslateY(prob=0.5, level=2, max_mag=1.1) |
|
|
|
|
|
transform = TranslateY( |
|
prob=1.0, |
|
level=0, |
|
img_border_value=self.img_border_value, |
|
seg_ignore_label=self.seg_ignore_label) |
|
results_wo_translatey = transform(copy.deepcopy(self.results_mask)) |
|
check_result_same(self.results_mask, results_wo_translatey, |
|
self.check_keys) |
|
|
|
|
|
transform = TranslateY( |
|
prob=1.0, |
|
level=10, |
|
max_mag=0.4, |
|
reversal_prob=0.0, |
|
seg_ignore_label=self.seg_ignore_label) |
|
|
|
results_translated = transform(copy.deepcopy(self.results_mask)) |
|
img_gt = np.array([[5, 6, 7, 8], [9, 10, 11, 12], |
|
[128, 128, 128, 128]]).astype(np.uint8) |
|
img_gt = np.stack([img_gt, img_gt, img_gt], axis=-1) |
|
results_gt = copy.deepcopy(self.results_mask) |
|
results_gt['img'] = img_gt |
|
results_gt['gt_bboxes'] = np.array([[1, 0, 2, 1]], dtype=np.float32) |
|
gt_masks = np.array([[0, 1, 1, 0], [0, 1, 0, 0], [0, 0, 0, 0]], |
|
dtype=np.uint8)[None, :, :] |
|
results_gt['gt_masks'] = BitmapMasks(gt_masks, 3, 4) |
|
results_gt['gt_ignore_flags'] = np.array(np.array([1], dtype=bool)) |
|
results_gt['gt_seg_map'] = np.array( |
|
[[255, 13, 13, 255], [255, 13, 255, 255], |
|
[255, 255, 255, |
|
255]]).astype(self.results_mask['gt_seg_map'].dtype) |
|
check_result_same(results_gt, results_translated, self.check_keys) |
|
|
|
|
|
results_translated = transform(copy.deepcopy(self.results_poly)) |
|
gt_masks = [[np.array([1, 1, 1, 0, 2, 0], dtype=np.float32)]] |
|
results_gt['gt_masks'] = PolygonMasks(gt_masks, 3, 4) |
|
check_result_same(results_gt, results_translated, self.check_keys) |
|
|
|
def test_translatey_use_box_type(self): |
|
|
|
transform = TranslateY( |
|
prob=1.0, |
|
level=0, |
|
img_border_value=self.img_border_value, |
|
seg_ignore_label=self.seg_ignore_label) |
|
results_wo_translatey = transform( |
|
copy.deepcopy(self.results_mask_boxtype)) |
|
check_result_same(self.results_mask_boxtype, results_wo_translatey, |
|
self.check_keys) |
|
|
|
|
|
transform = TranslateY( |
|
prob=1.0, |
|
level=10, |
|
max_mag=0.4, |
|
reversal_prob=0.0, |
|
seg_ignore_label=self.seg_ignore_label) |
|
|
|
results_translated = transform( |
|
copy.deepcopy(self.results_mask_boxtype)) |
|
img_gt = np.array([[5, 6, 7, 8], [9, 10, 11, 12], |
|
[128, 128, 128, 128]]).astype(np.uint8) |
|
img_gt = np.stack([img_gt, img_gt, img_gt], axis=-1) |
|
results_gt = copy.deepcopy(self.results_mask_boxtype) |
|
results_gt['img'] = img_gt |
|
results_gt['gt_bboxes'] = HorizontalBoxes( |
|
np.array([[1, 0, 2, 1]], dtype=np.float32)) |
|
gt_masks = np.array([[0, 1, 1, 0], [0, 1, 0, 0], [0, 0, 0, 0]], |
|
dtype=np.uint8)[None, :, :] |
|
results_gt['gt_masks'] = BitmapMasks(gt_masks, 3, 4) |
|
results_gt['gt_ignore_flags'] = np.array(np.array([1], dtype=bool)) |
|
results_gt['gt_seg_map'] = np.array( |
|
[[255, 13, 13, 255], [255, 13, 255, 255], |
|
[255, 255, 255, |
|
255]]).astype(self.results_mask['gt_seg_map'].dtype) |
|
check_result_same(results_gt, results_translated, self.check_keys) |
|
|
|
def test_repr(self): |
|
transform = TranslateX(prob=0.5, level=5) |
|
self.assertEqual( |
|
repr(transform), ('TranslateX(prob=0.5, ' |
|
'level=5, ' |
|
'min_mag=0.0, ' |
|
'max_mag=0.1, ' |
|
'reversal_prob=0.5, ' |
|
'img_border_value=(128.0, 128.0, 128.0), ' |
|
'mask_border_value=0, ' |
|
'seg_ignore_label=255, ' |
|
'interpolation=bilinear)')) |
|
|