|
|
|
import copy |
|
import os.path as osp |
|
import unittest |
|
|
|
import mmcv |
|
import numpy as np |
|
import torch |
|
from mmcv.transforms import LoadImageFromFile |
|
|
|
|
|
from mmdet.datasets.transforms import (CopyPaste, CutOut, Expand, |
|
FixShapeResize, MinIoURandomCrop, MixUp, |
|
Mosaic, Pad, PhotoMetricDistortion, |
|
RandomAffine, RandomCenterCropPad, |
|
RandomCrop, RandomErasing, RandomFlip, |
|
RandomShift, Resize, SegRescale, |
|
YOLOXHSVRandomAug) |
|
|
|
from mmdet.evaluation import bbox_overlaps |
|
from mmdet.registry import TRANSFORMS |
|
from mmdet.structures.bbox import HorizontalBoxes, bbox_project |
|
from mmdet.structures.mask import BitmapMasks |
|
from .utils import construct_toy_data, create_full_masks, create_random_bboxes |
|
|
|
try: |
|
import albumentations |
|
from albumentations import Compose |
|
except ImportError: |
|
albumentations = None |
|
Compose = None |
|
|
|
|
|
|
|
class TestResize(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() |
|
""" |
|
rng = np.random.RandomState(0) |
|
self.data_info1 = dict( |
|
img=np.random.random((1333, 800, 3)), |
|
gt_seg_map=np.random.random((1333, 800, 3)), |
|
gt_bboxes=np.array([[0, 0, 112, 112]], dtype=np.float32), |
|
gt_masks=BitmapMasks( |
|
rng.rand(1, 1333, 800), height=1333, width=800)) |
|
self.data_info2 = dict( |
|
img=np.random.random((300, 400, 3)), |
|
gt_bboxes=np.array([[200, 150, 600, 450]], dtype=np.float32), |
|
dtype=np.float32) |
|
self.data_info3 = dict(img=np.random.random((300, 400, 3))) |
|
|
|
def test_resize(self): |
|
|
|
transform = Resize(scale=(2000, 2000), keep_ratio=True) |
|
results = transform(copy.deepcopy(self.data_info1)) |
|
self.assertEqual(results['img_shape'], (2000, 1200)) |
|
self.assertEqual(results['scale_factor'], (1200 / 800, 2000 / 1333)) |
|
|
|
|
|
transform = Resize(scale_factor=(1.5, 2)) |
|
results = transform(copy.deepcopy(self.data_info1)) |
|
self.assertTrue((results['gt_bboxes'] == np.array([[0, 0, 168, |
|
224]])).all()) |
|
self.assertEqual(results['gt_masks'].height, 2666) |
|
self.assertEqual(results['gt_masks'].width, 1200) |
|
self.assertEqual(results['gt_seg_map'].shape[:2], (2666, 1200)) |
|
|
|
|
|
transform = Resize(scale=(200, 150), clip_object_border=False) |
|
results = transform(self.data_info2) |
|
self.assertTrue((results['gt_bboxes'] == np.array([100, 75, 300, |
|
225])).all()) |
|
|
|
|
|
transform = Resize(scale=(200, 150), clip_object_border=False) |
|
results = transform(self.data_info3) |
|
self.assertTupleEqual(results['img'].shape[:2], (150, 200)) |
|
|
|
|
|
transform = Resize(scale_factor=(1.5, 2)) |
|
results = transform(copy.deepcopy(self.data_info1)) |
|
self.assertTrue((bbox_project( |
|
copy.deepcopy(self.data_info1['gt_bboxes']), |
|
results['homography_matrix']) == results['gt_bboxes']).all()) |
|
|
|
def test_resize_use_box_type(self): |
|
data_info1 = copy.deepcopy(self.data_info1) |
|
data_info1['gt_bboxes'] = HorizontalBoxes(data_info1['gt_bboxes']) |
|
data_info2 = copy.deepcopy(self.data_info2) |
|
data_info2['gt_bboxes'] = HorizontalBoxes(data_info2['gt_bboxes']) |
|
|
|
transform = Resize(scale=(2000, 2000), keep_ratio=True) |
|
results = transform(copy.deepcopy(data_info1)) |
|
self.assertEqual(results['img_shape'], (2000, 1200)) |
|
self.assertEqual(results['scale_factor'], (1200 / 800, 2000 / 1333)) |
|
|
|
|
|
transform = Resize(scale_factor=(1.5, 2)) |
|
results = transform(copy.deepcopy(data_info1)) |
|
self.assertTrue( |
|
(results['gt_bboxes'].numpy() == np.array([[0, 0, 168, |
|
224]])).all()) |
|
self.assertEqual(results['gt_masks'].height, 2666) |
|
self.assertEqual(results['gt_masks'].width, 1200) |
|
self.assertEqual(results['gt_seg_map'].shape[:2], (2666, 1200)) |
|
|
|
|
|
transform = Resize(scale=(200, 150), clip_object_border=False) |
|
results = transform(data_info2) |
|
self.assertTrue( |
|
(results['gt_bboxes'].numpy() == np.array([100, 75, 300, |
|
225])).all()) |
|
|
|
|
|
transform = Resize(scale_factor=(1.5, 2)) |
|
results = transform(copy.deepcopy(data_info1)) |
|
self.assertTrue((bbox_project( |
|
copy.deepcopy(data_info1['gt_bboxes'].numpy()), |
|
results['homography_matrix']) == results['gt_bboxes'].numpy() |
|
).all()) |
|
|
|
def test_repr(self): |
|
transform = Resize(scale=(2000, 2000), keep_ratio=True) |
|
self.assertEqual( |
|
repr(transform), ('Resize(scale=(2000, 2000), ' |
|
'scale_factor=None, keep_ratio=True, ' |
|
'clip_object_border=True), backend=cv2), ' |
|
'interpolation=bilinear)')) |
|
|
|
|
|
class TestFIXShapeResize(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() |
|
""" |
|
rng = np.random.RandomState(0) |
|
self.data_info1 = dict( |
|
img=np.random.random((1333, 800, 3)), |
|
gt_seg_map=np.random.random((1333, 800, 3)), |
|
gt_bboxes=np.array([[0, 0, 112, 1333]], dtype=np.float32), |
|
gt_masks=BitmapMasks( |
|
rng.rand(1, 1333, 800), height=1333, width=800)) |
|
self.data_info2 = dict( |
|
img=np.random.random((300, 400, 3)), |
|
gt_bboxes=np.array([[200, 150, 600, 450]], dtype=np.float32), |
|
dtype=np.float32) |
|
self.data_info3 = dict(img=np.random.random((300, 400, 3))) |
|
self.data_info4 = dict( |
|
img=np.random.random((600, 800, 3)), |
|
gt_bboxes=np.array([[200, 150, 300, 400]], dtype=np.float32), |
|
dtype=np.float32) |
|
|
|
def test_resize(self): |
|
|
|
transform = FixShapeResize(width=2000, height=800, keep_ratio=True) |
|
results = transform(copy.deepcopy(self.data_info1)) |
|
self.assertEqual(results['img_shape'], (800, 2000)) |
|
self.assertEqual(results['scale_factor'], (800 / 1333, 800 / 1333)) |
|
|
|
transform = FixShapeResize(width=2000, height=800, keep_ratio=False) |
|
results = transform(copy.deepcopy(self.data_info1)) |
|
self.assertTrue((results['gt_bboxes'] == np.array([[0, 0, 280, |
|
800]])).all()) |
|
self.assertEqual(results['gt_masks'].height, 800) |
|
self.assertEqual(results['gt_masks'].width, 2000) |
|
self.assertEqual(results['gt_seg_map'].shape[:2], (800, 2000)) |
|
|
|
|
|
transform = FixShapeResize( |
|
width=200, height=150, clip_object_border=False) |
|
results = transform(copy.deepcopy(self.data_info2)) |
|
self.assertTrue((results['gt_bboxes'] == np.array([100, 75, 300, |
|
225])).all()) |
|
|
|
|
|
transform = FixShapeResize( |
|
width=200, height=150, clip_object_border=False) |
|
results = transform(self.data_info3) |
|
self.assertTupleEqual(results['img'].shape[:2], (150, 200)) |
|
|
|
|
|
transform = FixShapeResize(width=400, height=300) |
|
results = transform(copy.deepcopy(self.data_info4)) |
|
self.assertTrue((bbox_project( |
|
copy.deepcopy(self.data_info4['gt_bboxes']), |
|
results['homography_matrix']) == results['gt_bboxes']).all()) |
|
|
|
def test_resize_with_boxlist(self): |
|
data_info1 = copy.deepcopy(self.data_info1) |
|
data_info1['gt_bboxes'] = HorizontalBoxes(data_info1['gt_bboxes']) |
|
data_info2 = copy.deepcopy(self.data_info2) |
|
data_info2['gt_bboxes'] = HorizontalBoxes(data_info2['gt_bboxes']) |
|
data_info4 = copy.deepcopy(self.data_info4) |
|
data_info4['gt_bboxes'] = HorizontalBoxes(data_info4['gt_bboxes']) |
|
|
|
transform = FixShapeResize(width=2000, height=800, keep_ratio=True) |
|
results = transform(copy.deepcopy(data_info1)) |
|
self.assertEqual(results['img_shape'], (800, 2000)) |
|
self.assertEqual(results['scale_factor'], (800 / 1333, 800 / 1333)) |
|
|
|
|
|
transform = FixShapeResize(width=2000, height=800, keep_ratio=False) |
|
results = transform(copy.deepcopy(data_info1)) |
|
self.assertTrue( |
|
(results['gt_bboxes'].numpy() == np.array([[0, 0, 280, |
|
800]])).all()) |
|
self.assertEqual(results['gt_masks'].height, 800) |
|
self.assertEqual(results['gt_masks'].width, 2000) |
|
self.assertEqual(results['gt_seg_map'].shape[:2], (800, 2000)) |
|
|
|
|
|
transform = FixShapeResize( |
|
width=200, height=150, clip_object_border=False) |
|
results = transform(copy.deepcopy(data_info2)) |
|
self.assertTrue( |
|
(results['gt_bboxes'].numpy() == np.array([100, 75, 300, |
|
225])).all()) |
|
|
|
|
|
transform = FixShapeResize( |
|
width=200, height=150, clip_object_border=False) |
|
results = transform(self.data_info3) |
|
self.assertTupleEqual(results['img'].shape[:2], (150, 200)) |
|
|
|
|
|
transform = FixShapeResize(width=400, height=300) |
|
results = transform(copy.deepcopy(data_info4)) |
|
self.assertTrue((bbox_project( |
|
copy.deepcopy(self.data_info4['gt_bboxes']), |
|
results['homography_matrix']) == results['gt_bboxes'].numpy() |
|
).all()) |
|
|
|
def test_repr(self): |
|
transform = FixShapeResize(width=2000, height=2000, keep_ratio=True) |
|
self.assertEqual( |
|
repr(transform), ('FixShapeResize(width=2000, height=2000, ' |
|
'keep_ratio=True, ' |
|
'clip_object_border=True), backend=cv2), ' |
|
'interpolation=bilinear)')) |
|
|
|
|
|
class TestRandomFlip(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() |
|
""" |
|
rng = np.random.RandomState(0) |
|
self.results1 = { |
|
'img': np.random.random((224, 224, 3)), |
|
'gt_bboxes': np.array([[0, 1, 100, 101]], dtype=np.float32), |
|
'gt_masks': |
|
BitmapMasks(rng.rand(1, 224, 224), height=224, width=224), |
|
'gt_seg_map': np.random.random((224, 224)) |
|
} |
|
|
|
self.results2 = {'img': self.results1['img']} |
|
|
|
def test_transform(self): |
|
|
|
transform = RandomFlip(1.0) |
|
results_update = transform.transform(copy.deepcopy(self.results1)) |
|
self.assertTrue( |
|
(results_update['gt_bboxes'] == np.array([[124, 1, 224, |
|
101]])).all()) |
|
|
|
transform = RandomFlip(1.0) |
|
results_update = transform.transform(copy.deepcopy(self.results2)) |
|
self.assertTrue( |
|
(results_update['img'] == self.results2['img'][:, ::-1]).all()) |
|
|
|
|
|
|
|
transform = RandomFlip(1.0) |
|
results_update = transform.transform(copy.deepcopy(self.results1)) |
|
bboxes = copy.deepcopy(self.results1['gt_bboxes']) |
|
self.assertTrue((bbox_project( |
|
bboxes, |
|
results_update['homography_matrix']) == results_update['gt_bboxes'] |
|
).all()) |
|
|
|
transform = RandomFlip(1.0, direction='vertical') |
|
results_update = transform.transform(copy.deepcopy(self.results1)) |
|
bboxes = copy.deepcopy(self.results1['gt_bboxes']) |
|
self.assertTrue((bbox_project( |
|
bboxes, |
|
results_update['homography_matrix']) == results_update['gt_bboxes'] |
|
).all()) |
|
|
|
transform = RandomFlip(1.0, direction='diagonal') |
|
results_update = transform.transform(copy.deepcopy(self.results1)) |
|
bboxes = copy.deepcopy(self.results1['gt_bboxes']) |
|
self.assertTrue((bbox_project( |
|
bboxes, |
|
results_update['homography_matrix']) == results_update['gt_bboxes'] |
|
).all()) |
|
|
|
def test_transform_use_box_type(self): |
|
results1 = copy.deepcopy(self.results1) |
|
results1['gt_bboxes'] = HorizontalBoxes(results1['gt_bboxes']) |
|
|
|
transform = RandomFlip(1.0) |
|
results_update = transform.transform(copy.deepcopy(results1)) |
|
self.assertTrue((results_update['gt_bboxes'].numpy() == np.array( |
|
[[124, 1, 224, 101]])).all()) |
|
|
|
|
|
|
|
transform = RandomFlip(1.0) |
|
results_update = transform.transform(copy.deepcopy(results1)) |
|
bboxes = copy.deepcopy(results1['gt_bboxes'].numpy()) |
|
self.assertTrue((bbox_project(bboxes, |
|
results_update['homography_matrix']) == |
|
results_update['gt_bboxes'].numpy()).all()) |
|
|
|
transform = RandomFlip(1.0, direction='vertical') |
|
results_update = transform.transform(copy.deepcopy(results1)) |
|
bboxes = copy.deepcopy(results1['gt_bboxes'].numpy()) |
|
self.assertTrue((bbox_project(bboxes, |
|
results_update['homography_matrix']) == |
|
results_update['gt_bboxes'].numpy()).all()) |
|
|
|
transform = RandomFlip(1.0, direction='diagonal') |
|
results_update = transform.transform(copy.deepcopy(results1)) |
|
bboxes = copy.deepcopy(results1['gt_bboxes'].numpy()) |
|
self.assertTrue((bbox_project(bboxes, |
|
results_update['homography_matrix']) == |
|
results_update['gt_bboxes'].numpy()).all()) |
|
|
|
def test_repr(self): |
|
transform = RandomFlip(0.1) |
|
transform_str = str(transform) |
|
self.assertIsInstance(transform_str, str) |
|
|
|
|
|
class TestPad(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() |
|
""" |
|
rng = np.random.RandomState(0) |
|
self.results = { |
|
'img': np.random.random((1333, 800, 3)), |
|
'gt_masks': |
|
BitmapMasks(rng.rand(4, 1333, 800), height=1333, width=800) |
|
} |
|
|
|
def test_transform(self): |
|
|
|
transform = Pad(size=(1200, 2000)) |
|
results = transform(copy.deepcopy(self.results)) |
|
self.assertEqual(results['img'].shape[:2], (2000, 1200)) |
|
self.assertEqual(results['gt_masks'].masks.shape[1:], (2000, 1200)) |
|
|
|
|
|
transform = Pad(size_divisor=11) |
|
results = transform(copy.deepcopy(self.results)) |
|
self.assertEqual(results['img'].shape[:2], (1342, 803)) |
|
self.assertEqual(results['gt_masks'].masks.shape[1:], (1342, 803)) |
|
|
|
|
|
transform = Pad(pad_to_square=True) |
|
results = transform(copy.deepcopy(self.results)) |
|
self.assertEqual(results['img'].shape[:2], (1333, 1333)) |
|
self.assertEqual(results['gt_masks'].masks.shape[1:], (1333, 1333)) |
|
|
|
|
|
transform = Pad(pad_to_square=True, size_divisor=11) |
|
results = transform(copy.deepcopy(self.results)) |
|
self.assertEqual(results['img'].shape[:2], (1342, 1342)) |
|
self.assertEqual(results['gt_masks'].masks.shape[1:], (1342, 1342)) |
|
|
|
|
|
transform = Pad(pad_to_square=True, size_divisor=11) |
|
results = transform(copy.deepcopy(self.results)) |
|
self.assertEqual(results['img'].shape[:2], (1342, 1342)) |
|
self.assertEqual(results['gt_masks'].masks.shape[1:], (1342, 1342)) |
|
|
|
def test_repr(self): |
|
transform = Pad( |
|
pad_to_square=True, size_divisor=11, padding_mode='edge') |
|
self.assertEqual( |
|
repr(transform), |
|
('Pad(size=None, size_divisor=11, pad_to_square=True, ' |
|
"pad_val={'img': 0, 'seg': 255}), padding_mode=edge)")) |
|
|
|
|
|
class TestMinIoURandomCrop(unittest.TestCase): |
|
|
|
def test_transform(self): |
|
results = dict() |
|
img = mmcv.imread( |
|
osp.join(osp.dirname(__file__), '../../data/color.jpg'), 'color') |
|
results['img'] = img |
|
results['img_shape'] = img.shape[:2] |
|
gt_bboxes = create_random_bboxes(1, results['img_shape'][1], |
|
results['img_shape'][0]) |
|
results['gt_labels'] = np.ones(gt_bboxes.shape[0], dtype=np.int64) |
|
results['gt_bboxes'] = gt_bboxes |
|
transform = MinIoURandomCrop() |
|
results = transform.transform(copy.deepcopy(results)) |
|
|
|
self.assertEqual(results['gt_labels'].shape[0], |
|
results['gt_bboxes'].shape[0]) |
|
self.assertEqual(results['gt_labels'].dtype, np.int64) |
|
self.assertEqual(results['gt_bboxes'].dtype, np.float32) |
|
self.assertEqual(results['img_shape'], results['img'].shape[:2]) |
|
|
|
patch = np.array( |
|
[0, 0, results['img_shape'][1], results['img_shape'][0]]) |
|
ious = bbox_overlaps(patch.reshape(-1, 4), |
|
results['gt_bboxes']).reshape(-1) |
|
mode = transform.mode |
|
if mode == 1: |
|
self.assertTrue(np.equal(results['gt_bboxes'], gt_bboxes).all()) |
|
else: |
|
self.assertTrue((ious >= mode).all()) |
|
|
|
def test_transform_use_box_type(self): |
|
results = dict() |
|
img = mmcv.imread( |
|
osp.join(osp.dirname(__file__), '../../data/color.jpg'), 'color') |
|
results['img'] = img |
|
results['img_shape'] = img.shape[:2] |
|
gt_bboxes = create_random_bboxes(1, results['img_shape'][1], |
|
results['img_shape'][0]) |
|
results['gt_labels'] = np.ones(gt_bboxes.shape[0], dtype=np.int64) |
|
results['gt_bboxes'] = HorizontalBoxes(gt_bboxes) |
|
transform = MinIoURandomCrop() |
|
results = transform.transform(copy.deepcopy(results)) |
|
|
|
self.assertEqual(results['gt_labels'].shape[0], |
|
results['gt_bboxes'].shape[0]) |
|
self.assertEqual(results['gt_labels'].dtype, np.int64) |
|
self.assertEqual(results['gt_bboxes'].dtype, torch.float32) |
|
|
|
patch = np.array( |
|
[0, 0, results['img_shape'][1], results['img_shape'][0]]) |
|
ious = bbox_overlaps( |
|
patch.reshape(-1, 4), results['gt_bboxes'].numpy()).reshape(-1) |
|
mode = transform.mode |
|
if mode == 1: |
|
self.assertTrue((results['gt_bboxes'].numpy() == gt_bboxes).all()) |
|
else: |
|
self.assertTrue((ious >= mode).all()) |
|
|
|
def test_repr(self): |
|
transform = MinIoURandomCrop() |
|
self.assertEqual( |
|
repr(transform), ('MinIoURandomCrop' |
|
'(min_ious=(0.1, 0.3, 0.5, 0.7, 0.9), ' |
|
'min_crop_size=0.3, ' |
|
'bbox_clip_border=True)')) |
|
|
|
|
|
class TestPhotoMetricDistortion(unittest.TestCase): |
|
|
|
def test_transform(self): |
|
img = mmcv.imread( |
|
osp.join(osp.dirname(__file__), '../../data/color.jpg'), 'color') |
|
transform = PhotoMetricDistortion() |
|
|
|
|
|
results = dict() |
|
results['img'] = img |
|
results = transform.transform(copy.deepcopy(results)) |
|
self.assertEqual(results['img'].dtype, np.float32) |
|
|
|
|
|
results = dict() |
|
results['img'] = img.astype(np.float32) |
|
results = transform.transform(copy.deepcopy(results)) |
|
self.assertEqual(results['img'].dtype, np.float32) |
|
|
|
def test_repr(self): |
|
transform = PhotoMetricDistortion() |
|
self.assertEqual( |
|
repr(transform), ('PhotoMetricDistortion' |
|
'(brightness_delta=32, ' |
|
'contrast_range=(0.5, 1.5), ' |
|
'saturation_range=(0.5, 1.5), ' |
|
'hue_delta=18)')) |
|
|
|
|
|
class TestExpand(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() |
|
""" |
|
rng = np.random.RandomState(0) |
|
self.results = { |
|
'img': np.random.random((224, 224, 3)), |
|
'img_shape': (224, 224), |
|
'gt_bboxes': np.array([[0, 1, 100, 101]]), |
|
'gt_masks': |
|
BitmapMasks(rng.rand(1, 224, 224), height=224, width=224), |
|
'gt_seg_map': np.random.random((224, 224)) |
|
} |
|
|
|
def test_transform(self): |
|
transform = Expand() |
|
results = transform.transform(copy.deepcopy(self.results)) |
|
self.assertEqual(results['img_shape'], results['img'].shape[:2]) |
|
self.assertEqual( |
|
results['img_shape'], |
|
(results['gt_masks'].height, results['gt_masks'].width)) |
|
self.assertEqual(results['img_shape'], results['gt_seg_map'].shape) |
|
|
|
def test_transform_use_box_type(self): |
|
results = copy.deepcopy(self.results) |
|
results['gt_bboxes'] = HorizontalBoxes(results['gt_bboxes']) |
|
transform = Expand() |
|
results = transform.transform(results) |
|
self.assertEqual( |
|
results['img_shape'], |
|
(results['gt_masks'].height, results['gt_masks'].width)) |
|
self.assertEqual(results['img_shape'], results['gt_seg_map'].shape) |
|
|
|
def test_repr(self): |
|
transform = Expand() |
|
self.assertEqual( |
|
repr(transform), ('Expand' |
|
'(mean=(0, 0, 0), to_rgb=True, ' |
|
'ratio_range=(1, 4), ' |
|
'seg_ignore_label=None, ' |
|
'prob=0.5)')) |
|
|
|
|
|
class TestSegRescale(unittest.TestCase): |
|
|
|
def setUp(self) -> None: |
|
seg_map = np.random.randint(0, 255, size=(32, 32), dtype=np.int32) |
|
self.results = {'gt_seg_map': seg_map} |
|
|
|
def test_transform(self): |
|
|
|
transform = SegRescale(scale_factor=2) |
|
results = transform(copy.deepcopy(self.results)) |
|
self.assertEqual(results['gt_seg_map'].shape[:2], (64, 64)) |
|
|
|
transform = SegRescale(scale_factor=1) |
|
results = transform(copy.deepcopy(self.results)) |
|
self.assertEqual(results['gt_seg_map'].shape[:2], (32, 32)) |
|
|
|
def test_repr(self): |
|
transform = SegRescale(scale_factor=2) |
|
self.assertEqual( |
|
repr(transform), ('SegRescale(scale_factor=2, backend=cv2)')) |
|
|
|
|
|
class TestRandomCrop(unittest.TestCase): |
|
|
|
def test_init(self): |
|
|
|
with self.assertRaisesRegex(ValueError, 'Invalid crop_type'): |
|
RandomCrop(crop_size=(10, 10), crop_type='unknown') |
|
|
|
crop_type_list = ['absolute', 'absolute_range'] |
|
for crop_type in crop_type_list: |
|
|
|
for crop_size in [(0, 0), (0, 1), (1, 0)]: |
|
with self.assertRaises(AssertionError): |
|
RandomCrop(crop_size=crop_size, crop_type=crop_type) |
|
|
|
for crop_size in [(1.0, 1), (1, 1.0), (1.0, 1.0)]: |
|
with self.assertRaises(AssertionError): |
|
RandomCrop(crop_size=crop_size, crop_type=crop_type) |
|
|
|
|
|
with self.assertRaises(AssertionError): |
|
RandomCrop(crop_size=(10, 5), crop_type='absolute_range') |
|
|
|
|
|
crop_type_list = ['relative_range', 'relative'] |
|
for crop_type in crop_type_list: |
|
for crop_size in [(0, 1), (1, 0), (1.1, 0.5), (0.5, 1.1)]: |
|
with self.assertRaises(AssertionError): |
|
RandomCrop(crop_size=crop_size, crop_type=crop_type) |
|
|
|
def test_transform(self): |
|
|
|
src_results = { |
|
'img': np.random.randint(0, 255, size=(24, 32), dtype=np.int32) |
|
} |
|
target_shape = (12, 16) |
|
for crop_type, crop_size in zip(['relative', 'absolute'], [(0.5, 0.5), |
|
(16, 12)]): |
|
transform = RandomCrop(crop_size=crop_size, crop_type=crop_type) |
|
results = transform(copy.deepcopy(src_results)) |
|
print(results['img'].shape[:2]) |
|
self.assertEqual(results['img'].shape[:2], target_shape) |
|
|
|
|
|
transform = RandomCrop(crop_size=(10, 20), crop_type='absolute_range') |
|
results = transform(copy.deepcopy(src_results)) |
|
h, w = results['img'].shape |
|
self.assertTrue(10 <= w <= 20) |
|
self.assertTrue(10 <= h <= 20) |
|
self.assertEqual(results['img_shape'], results['img'].shape[:2]) |
|
|
|
transform = RandomCrop( |
|
crop_size=(0.5, 0.5), crop_type='relative_range') |
|
results = transform(copy.deepcopy(src_results)) |
|
h, w = results['img'].shape |
|
self.assertTrue(16 <= w <= 32) |
|
self.assertTrue(12 <= h <= 24) |
|
self.assertEqual(results['img_shape'], results['img'].shape[:2]) |
|
|
|
|
|
|
|
img = np.random.randint(0, 255, size=(10, 10), dtype=np.uint8) |
|
gt_bboxes = np.array([[0, 0, 7, 7], [2, 3, 9, 9]], dtype=np.float32) |
|
gt_bboxes_labels = np.array([0, 1], dtype=np.int64) |
|
gt_ignore_flags = np.array([0, 1], dtype=bool) |
|
gt_masks_ = np.zeros((2, 10, 10), np.uint8) |
|
gt_masks_[0, 0:7, 0:7] = 1 |
|
gt_masks_[1, 2:7, 3:8] = 1 |
|
gt_masks = BitmapMasks(gt_masks_.copy(), height=10, width=10) |
|
gt_seg_map = np.random.randint(0, 255, size=(10, 10), dtype=np.uint8) |
|
src_results = { |
|
'img': img, |
|
'gt_bboxes': gt_bboxes, |
|
'gt_bboxes_labels': gt_bboxes_labels, |
|
'gt_ignore_flags': gt_ignore_flags, |
|
'gt_masks': gt_masks, |
|
'gt_seg_map': gt_seg_map |
|
} |
|
transform = RandomCrop( |
|
crop_size=(7, 5), |
|
allow_negative_crop=False, |
|
recompute_bbox=False, |
|
bbox_clip_border=True) |
|
results = transform(copy.deepcopy(src_results)) |
|
h, w = results['img'].shape |
|
self.assertEqual(h, 5) |
|
self.assertEqual(w, 7) |
|
self.assertEqual(results['gt_bboxes'].shape[0], 2) |
|
self.assertEqual(results['gt_bboxes_labels'].shape[0], 2) |
|
self.assertEqual(results['gt_ignore_flags'].shape[0], 2) |
|
self.assertTupleEqual(results['gt_seg_map'].shape[:2], (5, 7)) |
|
self.assertEqual(results['img_shape'], results['img'].shape[:2]) |
|
|
|
|
|
bboxes = copy.deepcopy(src_results['gt_bboxes']) |
|
self.assertTrue((bbox_project(bboxes, results['homography_matrix'], |
|
(5, 7)) == results['gt_bboxes']).all()) |
|
|
|
|
|
gt_masks_ = np.zeros((2, 10, 10), np.uint8) |
|
gt_masks = BitmapMasks(gt_masks_.copy(), height=10, width=10) |
|
gt_bboxes = np.array([[0.1, 0.1, 0.2, 0.2]]) |
|
src_results = { |
|
'img': img, |
|
'gt_bboxes': gt_bboxes, |
|
'gt_masks': gt_masks |
|
} |
|
target_gt_bboxes = np.zeros((1, 4), dtype=np.float32) |
|
transform = RandomCrop( |
|
crop_size=(10, 11), |
|
allow_negative_crop=False, |
|
recompute_bbox=True, |
|
bbox_clip_border=True) |
|
results = transform(copy.deepcopy(src_results)) |
|
self.assertTrue((results['gt_bboxes'] == target_gt_bboxes).all()) |
|
|
|
|
|
src_results = {'img': img, 'gt_bboxes': gt_bboxes} |
|
transform = RandomCrop( |
|
crop_size=(10, 11), |
|
allow_negative_crop=False, |
|
recompute_bbox=True, |
|
bbox_clip_border=False) |
|
results = transform(copy.deepcopy(src_results)) |
|
self.assertTrue( |
|
(results['gt_bboxes'] == src_results['gt_bboxes']).all()) |
|
|
|
|
|
|
|
img = np.random.randint(0, 255, size=(10, 10), dtype=np.uint8) |
|
gt_bboxes = np.zeros((0, 4), dtype=np.float32) |
|
src_results = {'img': img, 'gt_bboxes': gt_bboxes} |
|
transform = RandomCrop(crop_size=(5, 3), allow_negative_crop=False) |
|
results = transform(copy.deepcopy(src_results)) |
|
self.assertIsNone(results) |
|
|
|
|
|
img = np.random.randint(0, 255, size=(10, 10), dtype=np.uint8) |
|
gt_bboxes = np.zeros((0, 4), dtype=np.float32) |
|
src_results = {'img': img, 'gt_bboxes': gt_bboxes} |
|
transform = RandomCrop(crop_size=(5, 3), allow_negative_crop=True) |
|
results = transform(copy.deepcopy(src_results)) |
|
self.assertTrue(isinstance(results, dict)) |
|
|
|
def test_transform_use_box_type(self): |
|
|
|
|
|
img = np.random.randint(0, 255, size=(10, 10), dtype=np.uint8) |
|
gt_bboxes = np.array([[0, 0, 7, 7], [2, 3, 9, 9]], dtype=np.float32) |
|
gt_bboxes_labels = np.array([0, 1], dtype=np.int64) |
|
gt_ignore_flags = np.array([0, 1], dtype=bool) |
|
gt_masks_ = np.zeros((2, 10, 10), np.uint8) |
|
gt_masks_[0, 0:7, 0:7] = 1 |
|
gt_masks_[1, 2:7, 3:8] = 1 |
|
gt_masks = BitmapMasks(gt_masks_.copy(), height=10, width=10) |
|
gt_seg_map = np.random.randint(0, 255, size=(10, 10), dtype=np.uint8) |
|
src_results = { |
|
'img': img, |
|
'gt_bboxes': HorizontalBoxes(gt_bboxes), |
|
'gt_bboxes_labels': gt_bboxes_labels, |
|
'gt_ignore_flags': gt_ignore_flags, |
|
'gt_masks': gt_masks, |
|
'gt_seg_map': gt_seg_map |
|
} |
|
transform = RandomCrop( |
|
crop_size=(7, 5), |
|
allow_negative_crop=False, |
|
recompute_bbox=False, |
|
bbox_clip_border=True) |
|
results = transform(copy.deepcopy(src_results)) |
|
h, w = results['img'].shape |
|
self.assertEqual(h, 5) |
|
self.assertEqual(w, 7) |
|
self.assertEqual(results['gt_bboxes'].shape[0], 2) |
|
self.assertEqual(results['gt_bboxes_labels'].shape[0], 2) |
|
self.assertEqual(results['gt_ignore_flags'].shape[0], 2) |
|
self.assertTupleEqual(results['gt_seg_map'].shape[:2], (5, 7)) |
|
|
|
|
|
bboxes = copy.deepcopy(src_results['gt_bboxes'].numpy()) |
|
print(bboxes, results['gt_bboxes']) |
|
self.assertTrue( |
|
(bbox_project(bboxes, results['homography_matrix'], |
|
(5, 7)) == results['gt_bboxes'].numpy()).all()) |
|
|
|
|
|
gt_masks_ = np.zeros((2, 10, 10), np.uint8) |
|
gt_masks = BitmapMasks(gt_masks_.copy(), height=10, width=10) |
|
gt_bboxes = HorizontalBoxes(np.array([[0.1, 0.1, 0.2, 0.2]])) |
|
src_results = { |
|
'img': img, |
|
'gt_bboxes': gt_bboxes, |
|
'gt_masks': gt_masks |
|
} |
|
target_gt_bboxes = np.zeros((1, 4), dtype=np.float32) |
|
transform = RandomCrop( |
|
crop_size=(10, 11), |
|
allow_negative_crop=False, |
|
recompute_bbox=True, |
|
bbox_clip_border=True) |
|
results = transform(copy.deepcopy(src_results)) |
|
self.assertTrue( |
|
(results['gt_bboxes'].numpy() == target_gt_bboxes).all()) |
|
|
|
|
|
src_results = {'img': img, 'gt_bboxes': gt_bboxes} |
|
transform = RandomCrop( |
|
crop_size=(10, 10), |
|
allow_negative_crop=False, |
|
recompute_bbox=True, |
|
bbox_clip_border=False) |
|
results = transform(copy.deepcopy(src_results)) |
|
self.assertTrue( |
|
(results['gt_bboxes'].numpy() == src_results['gt_bboxes'].numpy() |
|
).all()) |
|
|
|
|
|
|
|
img = np.random.randint(0, 255, size=(10, 10), dtype=np.uint8) |
|
gt_bboxes = HorizontalBoxes(np.zeros((0, 4), dtype=np.float32)) |
|
src_results = {'img': img, 'gt_bboxes': gt_bboxes} |
|
transform = RandomCrop(crop_size=(5, 2), allow_negative_crop=False) |
|
results = transform(copy.deepcopy(src_results)) |
|
self.assertIsNone(results) |
|
|
|
|
|
img = np.random.randint(0, 255, size=(10, 10), dtype=np.uint8) |
|
gt_bboxes = HorizontalBoxes(np.zeros((0, 4), dtype=np.float32)) |
|
src_results = {'img': img, 'gt_bboxes': gt_bboxes} |
|
transform = RandomCrop(crop_size=(5, 2), allow_negative_crop=True) |
|
results = transform(copy.deepcopy(src_results)) |
|
self.assertTrue(isinstance(results, dict)) |
|
|
|
def test_repr(self): |
|
crop_type = 'absolute' |
|
crop_size = (10, 5) |
|
allow_negative_crop = False |
|
recompute_bbox = True |
|
bbox_clip_border = False |
|
transform = RandomCrop( |
|
crop_size=crop_size, |
|
crop_type=crop_type, |
|
allow_negative_crop=allow_negative_crop, |
|
recompute_bbox=recompute_bbox, |
|
bbox_clip_border=bbox_clip_border) |
|
self.assertEqual( |
|
repr(transform), |
|
f'RandomCrop(crop_size={crop_size}, crop_type={crop_type}, ' |
|
f'allow_negative_crop={allow_negative_crop}, ' |
|
f'recompute_bbox={recompute_bbox}, ' |
|
f'bbox_clip_border={bbox_clip_border})') |
|
|
|
|
|
class TestCutOut(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() |
|
""" |
|
img = mmcv.imread( |
|
osp.join(osp.dirname(__file__), '../../data/color.jpg'), 'color') |
|
self.results = {'img': img} |
|
|
|
def test_transform(self): |
|
|
|
with self.assertRaises(AssertionError): |
|
transform = CutOut(n_holes=(5, 3), cutout_shape=(8, 8)) |
|
with self.assertRaises(AssertionError): |
|
transform = CutOut(n_holes=(3, 4, 5), cutout_shape=(8, 8)) |
|
|
|
|
|
with self.assertRaises(AssertionError): |
|
transform = CutOut(n_holes=1, cutout_shape=8) |
|
with self.assertRaises(AssertionError): |
|
transform = CutOut(n_holes=1, cutout_ratio=0.2) |
|
|
|
|
|
with self.assertRaises(AssertionError): |
|
transform = CutOut(n_holes=1) |
|
with self.assertRaises(AssertionError): |
|
transform = CutOut( |
|
n_holes=1, cutout_shape=(2, 2), cutout_ratio=(0.4, 0.4)) |
|
|
|
transform = CutOut(n_holes=1, cutout_shape=(10, 10)) |
|
results = transform(copy.deepcopy(self.results)) |
|
self.assertTrue(results['img'].sum() < self.results['img'].sum()) |
|
|
|
transform = CutOut( |
|
n_holes=(2, 4), |
|
cutout_shape=[(10, 10), (15, 15)], |
|
fill_in=(255, 255, 255)) |
|
results = transform(copy.deepcopy(self.results)) |
|
self.assertTrue(results['img'].sum() > self.results['img'].sum()) |
|
|
|
transform = CutOut( |
|
n_holes=1, cutout_ratio=(0.8, 0.8), fill_in=(255, 255, 255)) |
|
results = transform(copy.deepcopy(self.results)) |
|
self.assertTrue(results['img'].sum() > self.results['img'].sum()) |
|
|
|
def test_repr(self): |
|
transform = CutOut(n_holes=1, cutout_shape=(10, 10)) |
|
self.assertEqual( |
|
repr(transform), ('CutOut(n_holes=(1, 1), ' |
|
'cutout_shape=[(10, 10)], ' |
|
'fill_in=(0, 0, 0))')) |
|
transform = CutOut( |
|
n_holes=1, cutout_ratio=(0.8, 0.8), fill_in=(255, 255, 255)) |
|
self.assertEqual( |
|
repr(transform), ('CutOut(n_holes=(1, 1), ' |
|
'cutout_ratio=[(0.8, 0.8)], ' |
|
'fill_in=(255, 255, 255))')) |
|
|
|
|
|
class TestMosaic(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() |
|
""" |
|
rng = np.random.RandomState(0) |
|
self.results = { |
|
'img': |
|
np.random.random((224, 224, 3)), |
|
'img_shape': (224, 224), |
|
'gt_bboxes_labels': |
|
np.array([1, 2, 3], dtype=np.int64), |
|
'gt_bboxes': |
|
np.array([[10, 10, 20, 20], [20, 20, 40, 40], [40, 40, 80, 80]], |
|
dtype=np.float32), |
|
'gt_ignore_flags': |
|
np.array([0, 0, 1], dtype=bool), |
|
'gt_masks': |
|
BitmapMasks(rng.rand(3, 224, 224), height=224, width=224), |
|
} |
|
|
|
def test_transform(self): |
|
|
|
with self.assertRaises(AssertionError): |
|
transform = Mosaic(img_scale=640) |
|
|
|
|
|
with self.assertRaises(AssertionError): |
|
transform = Mosaic(prob=1.5) |
|
|
|
transform = Mosaic(img_scale=(12, 10)) |
|
|
|
with self.assertRaises(AssertionError): |
|
results = transform(copy.deepcopy(self.results)) |
|
|
|
self.results['mix_results'] = [copy.deepcopy(self.results)] * 3 |
|
results = transform(copy.deepcopy(self.results)) |
|
self.assertTrue(results['img'].shape[:2] == (20, 24)) |
|
self.assertTrue(results['gt_bboxes_labels'].shape[0] == |
|
results['gt_bboxes'].shape[0]) |
|
self.assertTrue(results['gt_bboxes_labels'].dtype == np.int64) |
|
self.assertTrue(results['gt_bboxes'].dtype == np.float32) |
|
self.assertTrue(results['gt_ignore_flags'].dtype == bool) |
|
self.assertEqual(results['img_shape'], results['img'].shape[:2]) |
|
|
|
def test_transform_with_no_gt(self): |
|
self.results['gt_bboxes'] = np.empty((0, 4), dtype=np.float32) |
|
self.results['gt_bboxes_labels'] = np.empty((0, ), dtype=np.int64) |
|
self.results['gt_ignore_flags'] = np.empty((0, ), dtype=bool) |
|
transform = Mosaic(img_scale=(12, 10)) |
|
self.results['mix_results'] = [copy.deepcopy(self.results)] * 3 |
|
results = transform(copy.deepcopy(self.results)) |
|
self.assertIsInstance(results, dict) |
|
self.assertTrue(results['img'].shape[:2] == (20, 24)) |
|
self.assertTrue( |
|
results['gt_bboxes_labels'].shape[0] == results['gt_bboxes']. |
|
shape[0] == results['gt_ignore_flags'].shape[0] == 0) |
|
self.assertTrue(results['gt_bboxes_labels'].dtype == np.int64) |
|
self.assertTrue(results['gt_bboxes'].dtype == np.float32) |
|
self.assertTrue(results['gt_ignore_flags'].dtype == bool) |
|
|
|
def test_transform_use_box_type(self): |
|
transform = Mosaic(img_scale=(12, 10)) |
|
results = copy.deepcopy(self.results) |
|
results['gt_bboxes'] = HorizontalBoxes(results['gt_bboxes']) |
|
results['mix_results'] = [results] * 3 |
|
results = transform(results) |
|
self.assertTrue(results['img'].shape[:2] == (20, 24)) |
|
self.assertTrue(results['gt_bboxes_labels'].shape[0] == |
|
results['gt_bboxes'].shape[0]) |
|
self.assertTrue(results['gt_bboxes_labels'].dtype == np.int64) |
|
self.assertTrue(results['gt_bboxes'].dtype == torch.float32) |
|
self.assertTrue(results['gt_ignore_flags'].dtype == bool) |
|
|
|
def test_repr(self): |
|
transform = Mosaic(img_scale=(640, 640), ) |
|
self.assertEqual( |
|
repr(transform), ('Mosaic(img_scale=(640, 640), ' |
|
'center_ratio_range=(0.5, 1.5), ' |
|
'pad_val=114.0, ' |
|
'prob=1.0)')) |
|
|
|
|
|
class TestMixUp(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() |
|
""" |
|
rng = np.random.RandomState(0) |
|
self.results = { |
|
'img': |
|
np.random.random((224, 224, 3)), |
|
'img_shape': (224, 224), |
|
'gt_bboxes_labels': |
|
np.array([1, 2, 3], dtype=np.int64), |
|
'gt_bboxes': |
|
np.array([[10, 10, 20, 20], [20, 20, 40, 40], [40, 40, 80, 80]], |
|
dtype=np.float32), |
|
'gt_ignore_flags': |
|
np.array([0, 0, 1], dtype=bool), |
|
'gt_masks': |
|
BitmapMasks(rng.rand(3, 224, 224), height=224, width=224), |
|
} |
|
|
|
def test_transform(self): |
|
|
|
with self.assertRaises(AssertionError): |
|
transform = MixUp(img_scale=640) |
|
|
|
transform = MixUp(img_scale=(12, 10)) |
|
|
|
with self.assertRaises(AssertionError): |
|
results = transform(copy.deepcopy(self.results)) |
|
|
|
with self.assertRaises(AssertionError): |
|
self.results['mix_results'] = [copy.deepcopy(self.results)] * 2 |
|
results = transform(copy.deepcopy(self.results)) |
|
|
|
self.results['mix_results'] = [copy.deepcopy(self.results)] |
|
results = transform(copy.deepcopy(self.results)) |
|
self.assertTrue(results['img'].shape[:2] == (224, 224)) |
|
self.assertTrue(results['gt_bboxes_labels'].shape[0] == |
|
results['gt_bboxes'].shape[0]) |
|
self.assertTrue(results['gt_bboxes_labels'].dtype == np.int64) |
|
self.assertTrue(results['gt_bboxes'].dtype == np.float32) |
|
self.assertTrue(results['gt_ignore_flags'].dtype == bool) |
|
self.assertEqual(results['img_shape'], results['img'].shape[:2]) |
|
|
|
def test_transform_use_box_type(self): |
|
results = copy.deepcopy(self.results) |
|
results['gt_bboxes'] = HorizontalBoxes(results['gt_bboxes']) |
|
|
|
transform = MixUp(img_scale=(12, 10)) |
|
results['mix_results'] = [results] |
|
results = transform(results) |
|
self.assertTrue(results['img'].shape[:2] == (224, 224)) |
|
self.assertTrue(results['gt_bboxes_labels'].shape[0] == |
|
results['gt_bboxes'].shape[0]) |
|
self.assertTrue(results['gt_bboxes_labels'].dtype == np.int64) |
|
self.assertTrue(results['gt_bboxes'].dtype == torch.float32) |
|
self.assertTrue(results['gt_ignore_flags'].dtype == bool) |
|
|
|
def test_repr(self): |
|
transform = MixUp( |
|
img_scale=(640, 640), |
|
ratio_range=(0.8, 1.6), |
|
pad_val=114.0, |
|
) |
|
self.assertEqual( |
|
repr(transform), ('MixUp(dynamic_scale=(640, 640), ' |
|
'ratio_range=(0.8, 1.6), ' |
|
'flip_ratio=0.5, ' |
|
'pad_val=114.0, ' |
|
'max_iters=15, ' |
|
'bbox_clip_border=True)')) |
|
|
|
|
|
class TestRandomAffine(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 = { |
|
'img': |
|
np.random.random((224, 224, 3)), |
|
'img_shape': (224, 224), |
|
'gt_bboxes_labels': |
|
np.array([1, 2, 3], dtype=np.int64), |
|
'gt_bboxes': |
|
np.array([[10, 10, 20, 20], [20, 20, 40, 40], [40, 40, 80, 80]], |
|
dtype=np.float32), |
|
'gt_ignore_flags': |
|
np.array([0, 0, 1], dtype=bool), |
|
} |
|
|
|
def test_transform(self): |
|
|
|
with self.assertRaises(AssertionError): |
|
transform = RandomAffine(max_translate_ratio=1.5) |
|
|
|
|
|
with self.assertRaises(AssertionError): |
|
transform = RandomAffine(scaling_ratio_range=(1.5, 0.5)) |
|
|
|
with self.assertRaises(AssertionError): |
|
transform = RandomAffine(scaling_ratio_range=(0, 0.5)) |
|
|
|
transform = RandomAffine() |
|
results = transform(copy.deepcopy(self.results)) |
|
self.assertTrue(results['img'].shape[:2] == (224, 224)) |
|
self.assertTrue(results['gt_bboxes_labels'].shape[0] == |
|
results['gt_bboxes'].shape[0]) |
|
self.assertTrue(results['gt_bboxes_labels'].dtype == np.int64) |
|
self.assertTrue(results['gt_bboxes'].dtype == np.float32) |
|
self.assertTrue(results['gt_ignore_flags'].dtype == bool) |
|
self.assertEqual(results['img_shape'], results['img'].shape[:2]) |
|
|
|
def test_transform_use_box_type(self): |
|
results = copy.deepcopy(self.results) |
|
results['gt_bboxes'] = HorizontalBoxes(results['gt_bboxes']) |
|
|
|
transform = RandomAffine() |
|
results = transform(copy.deepcopy(results)) |
|
self.assertTrue(results['img'].shape[:2] == (224, 224)) |
|
self.assertTrue(results['gt_bboxes_labels'].shape[0] == |
|
results['gt_bboxes'].shape[0]) |
|
self.assertTrue(results['gt_bboxes_labels'].dtype == np.int64) |
|
self.assertTrue(results['gt_bboxes'].dtype == torch.float32) |
|
self.assertTrue(results['gt_ignore_flags'].dtype == bool) |
|
|
|
def test_repr(self): |
|
transform = RandomAffine( |
|
scaling_ratio_range=(0.1, 2), |
|
border=(-320, -320), |
|
) |
|
self.assertEqual( |
|
repr(transform), ('RandomAffine(max_rotate_degree=10.0, ' |
|
'max_translate_ratio=0.1, ' |
|
'scaling_ratio_range=(0.1, 2), ' |
|
'max_shear_degree=2.0, ' |
|
'border=(-320, -320), ' |
|
'border_val=(114, 114, 114), ' |
|
'bbox_clip_border=True)')) |
|
|
|
|
|
class TestYOLOXHSVRandomAug(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() |
|
""" |
|
img = mmcv.imread( |
|
osp.join(osp.dirname(__file__), '../../data/color.jpg'), 'color') |
|
self.results = { |
|
'img': |
|
img, |
|
'img_shape': (224, 224), |
|
'gt_bboxes_labels': |
|
np.array([1, 2, 3], dtype=np.int64), |
|
'gt_bboxes': |
|
np.array([[10, 10, 20, 20], [20, 20, 40, 40], [40, 40, 80, 80]], |
|
dtype=np.float32), |
|
'gt_ignore_flags': |
|
np.array([0, 0, 1], dtype=bool), |
|
} |
|
|
|
def test_transform(self): |
|
transform = YOLOXHSVRandomAug() |
|
results = transform(copy.deepcopy(self.results)) |
|
self.assertTrue( |
|
results['img'].shape[:2] == self.results['img'].shape[:2]) |
|
self.assertTrue(results['gt_bboxes_labels'].shape[0] == |
|
results['gt_bboxes'].shape[0]) |
|
self.assertTrue(results['gt_bboxes_labels'].dtype == np.int64) |
|
self.assertTrue(results['gt_bboxes'].dtype == np.float32) |
|
self.assertTrue(results['gt_ignore_flags'].dtype == bool) |
|
|
|
def test_repr(self): |
|
transform = YOLOXHSVRandomAug() |
|
self.assertEqual( |
|
repr(transform), ('YOLOXHSVRandomAug(hue_delta=5, ' |
|
'saturation_delta=30, ' |
|
'value_delta=30)')) |
|
|
|
|
|
class TestRandomCenterCropPad(unittest.TestCase): |
|
|
|
def test_init(self): |
|
|
|
with self.assertRaises(AssertionError): |
|
RandomCenterCropPad( |
|
crop_size=(-1, 0), test_mode=False, test_pad_mode=None) |
|
|
|
|
|
with self.assertRaises(AssertionError): |
|
RandomCenterCropPad( |
|
crop_size=(511, 511), |
|
ratios=(1.0, 1.0), |
|
test_mode=False, |
|
test_pad_mode=None) |
|
|
|
|
|
with self.assertRaises(AssertionError): |
|
RandomCenterCropPad( |
|
crop_size=(511, 511), |
|
mean=None, |
|
std=None, |
|
to_rgb=None, |
|
test_mode=False, |
|
test_pad_mode=None) |
|
|
|
|
|
with self.assertRaises(AssertionError): |
|
RandomCenterCropPad( |
|
crop_size=(511, 511), |
|
ratios=None, |
|
border=None, |
|
mean=[123.675, 116.28, 103.53], |
|
std=[58.395, 57.12, 57.375], |
|
to_rgb=True, |
|
test_mode=True, |
|
test_pad_mode=('logical_or', 127)) |
|
|
|
|
|
with self.assertRaises(AssertionError): |
|
RandomCenterCropPad( |
|
crop_size=None, |
|
ratios=(0.9, 1.0, 1.1), |
|
border=None, |
|
mean=[123.675, 116.28, 103.53], |
|
std=[58.395, 57.12, 57.375], |
|
to_rgb=True, |
|
test_mode=True, |
|
test_pad_mode=('logical_or', 127)) |
|
|
|
|
|
with self.assertRaises(AssertionError): |
|
RandomCenterCropPad( |
|
crop_size=None, |
|
ratios=None, |
|
border=128, |
|
mean=[123.675, 116.28, 103.53], |
|
std=[58.395, 57.12, 57.375], |
|
to_rgb=True, |
|
test_mode=True, |
|
test_pad_mode=('logical_or', 127)) |
|
|
|
|
|
with self.assertRaises(AssertionError): |
|
RandomCenterCropPad( |
|
crop_size=None, |
|
ratios=None, |
|
border=None, |
|
mean=[123.675, 116.28, 103.53], |
|
std=[58.395, 57.12, 57.375], |
|
to_rgb=True, |
|
test_mode=True, |
|
test_pad_mode=('do_nothing', 100)) |
|
|
|
def test_transform(self): |
|
results = dict( |
|
img_path=osp.join(osp.dirname(__file__), '../../data/color.jpg')) |
|
|
|
load = LoadImageFromFile(to_float32=True) |
|
results = load(results) |
|
test_results = copy.deepcopy(results) |
|
|
|
h, w = results['img_shape'] |
|
gt_bboxes = create_random_bboxes(4, w, h) |
|
gt_bboxes_labels = np.array([1, 2, 3, 1], dtype=np.int64) |
|
gt_ignore_flags = np.array([0, 0, 1, 1], dtype=bool) |
|
results['gt_bboxes'] = gt_bboxes |
|
results['gt_bboxes_labels'] = gt_bboxes_labels |
|
results['gt_ignore_flags'] = gt_ignore_flags |
|
crop_module = RandomCenterCropPad( |
|
crop_size=(w - 20, h - 20), |
|
ratios=(1.0, ), |
|
border=128, |
|
mean=[123.675, 116.28, 103.53], |
|
std=[58.395, 57.12, 57.375], |
|
to_rgb=True, |
|
test_mode=False, |
|
test_pad_mode=None) |
|
train_results = crop_module(results) |
|
assert train_results['img'].shape[:2] == (h - 20, w - 20) |
|
|
|
assert train_results['img_shape'][:2] == (h - 20, w - 20) |
|
assert train_results['gt_bboxes'].shape[0] == 4 |
|
assert train_results['gt_bboxes'].dtype == np.float32 |
|
self.assertEqual(results['img_shape'], results['img'].shape[:2]) |
|
|
|
crop_module = RandomCenterCropPad( |
|
crop_size=None, |
|
ratios=None, |
|
border=None, |
|
mean=[123.675, 116.28, 103.53], |
|
std=[58.395, 57.12, 57.375], |
|
to_rgb=True, |
|
test_mode=True, |
|
test_pad_mode=('logical_or', 127)) |
|
test_results = crop_module(test_results) |
|
assert test_results['img'].shape[:2] == (h | 127, w | 127) |
|
assert test_results['img_shape'][:2] == (h | 127, w | 127) |
|
assert 'border' in test_results |
|
|
|
def test_transform_use_box_type(self): |
|
results = dict( |
|
img_path=osp.join(osp.dirname(__file__), '../../data/color.jpg')) |
|
|
|
load = LoadImageFromFile(to_float32=True) |
|
results = load(results) |
|
test_results = copy.deepcopy(results) |
|
|
|
h, w = results['img_shape'] |
|
gt_bboxes = create_random_bboxes(4, w, h) |
|
gt_bboxes_labels = np.array([1, 2, 3, 1], dtype=np.int64) |
|
gt_ignore_flags = np.array([0, 0, 1, 1], dtype=bool) |
|
results['gt_bboxes'] = HorizontalBoxes(gt_bboxes) |
|
results['gt_bboxes_labels'] = gt_bboxes_labels |
|
results['gt_ignore_flags'] = gt_ignore_flags |
|
crop_module = RandomCenterCropPad( |
|
crop_size=(w - 20, h - 20), |
|
ratios=(1.0, ), |
|
border=128, |
|
mean=[123.675, 116.28, 103.53], |
|
std=[58.395, 57.12, 57.375], |
|
to_rgb=True, |
|
test_mode=False, |
|
test_pad_mode=None) |
|
train_results = crop_module(results) |
|
assert train_results['img'].shape[:2] == (h - 20, w - 20) |
|
|
|
assert train_results['img_shape'][:2] == (h - 20, w - 20) |
|
assert train_results['gt_bboxes'].shape[0] == 4 |
|
assert train_results['gt_bboxes'].dtype == torch.float32 |
|
|
|
crop_module = RandomCenterCropPad( |
|
crop_size=None, |
|
ratios=None, |
|
border=None, |
|
mean=[123.675, 116.28, 103.53], |
|
std=[58.395, 57.12, 57.375], |
|
to_rgb=True, |
|
test_mode=True, |
|
test_pad_mode=('logical_or', 127)) |
|
test_results = crop_module(test_results) |
|
assert test_results['img'].shape[:2] == (h | 127, w | 127) |
|
assert test_results['img_shape'][:2] == (h | 127, w | 127) |
|
assert 'border' in test_results |
|
|
|
|
|
class TestCopyPaste(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() |
|
""" |
|
img = mmcv.imread( |
|
osp.join(osp.dirname(__file__), '../../data/color.jpg'), 'color') |
|
h, w, _ = img.shape |
|
dst_bboxes = np.array([[0.2 * w, 0.2 * h, 0.4 * w, 0.4 * h], |
|
[0.5 * w, 0.5 * h, 0.6 * w, 0.6 * h]], |
|
dtype=np.float32) |
|
src_bboxes = np.array([[0.1 * w, 0.1 * h, 0.3 * w, 0.5 * h], |
|
[0.4 * w, 0.4 * h, 0.7 * w, 0.7 * h], |
|
[0.8 * w, 0.8 * h, 0.9 * w, 0.9 * h]], |
|
dtype=np.float32) |
|
|
|
self.dst_results = { |
|
'img': img.copy(), |
|
'gt_bboxes': dst_bboxes, |
|
'gt_bboxes_labels': np.ones(dst_bboxes.shape[0], dtype=np.int64), |
|
'gt_masks': create_full_masks(dst_bboxes, w, h), |
|
'gt_ignore_flags': np.array([0, 1], dtype=bool), |
|
} |
|
self.src_results = { |
|
'img': img.copy(), |
|
'gt_bboxes': src_bboxes, |
|
'gt_bboxes_labels': |
|
np.ones(src_bboxes.shape[0], dtype=np.int64) * 2, |
|
'gt_masks': create_full_masks(src_bboxes, w, h), |
|
'gt_ignore_flags': np.array([0, 0, 1], dtype=bool), |
|
} |
|
|
|
def test_transform(self): |
|
transform = CopyPaste(selected=False) |
|
|
|
with self.assertRaises(AssertionError): |
|
results = transform(copy.deepcopy(self.dst_results)) |
|
|
|
results = copy.deepcopy(self.dst_results) |
|
results['mix_results'] = [copy.deepcopy(self.src_results)] |
|
results = transform(results) |
|
|
|
self.assertEqual(results['img'].shape[:2], |
|
self.dst_results['img'].shape[:2]) |
|
|
|
|
|
self.assertEqual( |
|
results['gt_bboxes'].shape[0], |
|
self.dst_results['gt_bboxes'].shape[0] + |
|
self.src_results['gt_bboxes'].shape[0] - 1) |
|
self.assertEqual( |
|
results['gt_bboxes_labels'].shape[0], |
|
self.dst_results['gt_bboxes_labels'].shape[0] + |
|
self.src_results['gt_bboxes_labels'].shape[0] - 1) |
|
self.assertEqual( |
|
results['gt_masks'].masks.shape[0], |
|
self.dst_results['gt_masks'].masks.shape[0] + |
|
self.src_results['gt_masks'].masks.shape[0] - 1) |
|
self.assertEqual( |
|
results['gt_ignore_flags'].shape[0], |
|
self.dst_results['gt_ignore_flags'].shape[0] + |
|
self.src_results['gt_ignore_flags'].shape[0] - 1) |
|
|
|
|
|
ori_bbox = self.dst_results['gt_bboxes'][0] |
|
occ_bbox = results['gt_bboxes'][0] |
|
ori_mask = self.dst_results['gt_masks'].masks[0] |
|
occ_mask = results['gt_masks'].masks[0] |
|
self.assertTrue(ori_mask.sum() > occ_mask.sum()) |
|
self.assertTrue( |
|
np.all(np.abs(occ_bbox - ori_bbox) <= transform.bbox_occluded_thr) |
|
or occ_mask.sum() > transform.mask_occluded_thr) |
|
|
|
|
|
transform = CopyPaste() |
|
results = copy.deepcopy(self.dst_results) |
|
results['mix_results'] = [copy.deepcopy(self.src_results)] |
|
results = transform(results) |
|
|
|
|
|
results = copy.deepcopy(self.dst_results) |
|
valid_inds = [False] * self.src_results['gt_bboxes'].shape[0] |
|
results['mix_results'] = [{ |
|
'img': |
|
self.src_results['img'].copy(), |
|
'gt_bboxes': |
|
self.src_results['gt_bboxes'][valid_inds], |
|
'gt_bboxes_labels': |
|
self.src_results['gt_bboxes_labels'][valid_inds], |
|
'gt_masks': |
|
self.src_results['gt_masks'][valid_inds], |
|
'gt_ignore_flags': |
|
self.src_results['gt_ignore_flags'][valid_inds], |
|
}] |
|
results = transform(results) |
|
|
|
def test_transform_use_box_type(self): |
|
src_results = copy.deepcopy(self.src_results) |
|
src_results['gt_bboxes'] = HorizontalBoxes(src_results['gt_bboxes']) |
|
dst_results = copy.deepcopy(self.dst_results) |
|
dst_results['gt_bboxes'] = HorizontalBoxes(dst_results['gt_bboxes']) |
|
transform = CopyPaste(selected=False) |
|
|
|
results = copy.deepcopy(dst_results) |
|
results['mix_results'] = [copy.deepcopy(src_results)] |
|
results = transform(results) |
|
|
|
self.assertEqual(results['img'].shape[:2], |
|
self.dst_results['img'].shape[:2]) |
|
|
|
|
|
self.assertEqual( |
|
results['gt_bboxes'].shape[0], |
|
self.dst_results['gt_bboxes'].shape[0] + |
|
self.src_results['gt_bboxes'].shape[0] - 1) |
|
self.assertEqual( |
|
results['gt_bboxes_labels'].shape[0], |
|
self.dst_results['gt_bboxes_labels'].shape[0] + |
|
self.src_results['gt_bboxes_labels'].shape[0] - 1) |
|
self.assertEqual( |
|
results['gt_masks'].masks.shape[0], |
|
self.dst_results['gt_masks'].masks.shape[0] + |
|
self.src_results['gt_masks'].masks.shape[0] - 1) |
|
self.assertEqual( |
|
results['gt_ignore_flags'].shape[0], |
|
self.dst_results['gt_ignore_flags'].shape[0] + |
|
self.src_results['gt_ignore_flags'].shape[0] - 1) |
|
|
|
|
|
ori_bbox = dst_results['gt_bboxes'][0].numpy() |
|
occ_bbox = results['gt_bboxes'][0].numpy() |
|
ori_mask = dst_results['gt_masks'].masks[0] |
|
occ_mask = results['gt_masks'].masks[0] |
|
self.assertTrue(ori_mask.sum() > occ_mask.sum()) |
|
self.assertTrue( |
|
np.all(np.abs(occ_bbox - ori_bbox) <= transform.bbox_occluded_thr) |
|
or occ_mask.sum() > transform.mask_occluded_thr) |
|
|
|
|
|
transform = CopyPaste() |
|
results = copy.deepcopy(dst_results) |
|
results['mix_results'] = [copy.deepcopy(src_results)] |
|
results = transform(results) |
|
|
|
|
|
results = copy.deepcopy(dst_results) |
|
valid_inds = [False] * self.src_results['gt_bboxes'].shape[0] |
|
results['mix_results'] = [{ |
|
'img': |
|
src_results['img'].copy(), |
|
'gt_bboxes': |
|
src_results['gt_bboxes'][valid_inds], |
|
'gt_bboxes_labels': |
|
src_results['gt_bboxes_labels'][valid_inds], |
|
'gt_masks': |
|
src_results['gt_masks'][valid_inds], |
|
'gt_ignore_flags': |
|
src_results['gt_ignore_flags'][valid_inds], |
|
}] |
|
results = transform(results) |
|
|
|
def test_repr(self): |
|
transform = CopyPaste() |
|
self.assertEqual( |
|
repr(transform), ('CopyPaste(max_num_pasted=100, ' |
|
'bbox_occluded_thr=10, ' |
|
'mask_occluded_thr=300, ' |
|
'selected=True)')) |
|
|
|
|
|
class TestAlbu(unittest.TestCase): |
|
|
|
@unittest.skipIf(albumentations is None, 'albumentations is not installed') |
|
def test_transform(self): |
|
results = dict( |
|
img_path=osp.join(osp.dirname(__file__), '../../data/color.jpg')) |
|
|
|
|
|
load = dict(type='LoadImageFromFile') |
|
load = TRANSFORMS.build(load) |
|
|
|
albu_transform = dict( |
|
type='Albu', transforms=[dict(type='ChannelShuffle', p=1)]) |
|
albu_transform = TRANSFORMS.build(albu_transform) |
|
|
|
|
|
results = load(results) |
|
results = albu_transform(results) |
|
|
|
self.assertEqual(results['img'].dtype, np.uint8) |
|
|
|
|
|
albu_transform = dict( |
|
type='Albu', |
|
transforms=[dict(type='ChannelShuffle', p=1)], |
|
bbox_params=dict( |
|
type='BboxParams', |
|
format='pascal_voc', |
|
label_fields=['gt_bboxes_labels', 'gt_ignore_flags']), |
|
keymap={ |
|
'img': 'image', |
|
'gt_bboxes': 'bboxes' |
|
}) |
|
albu_transform = TRANSFORMS.build(albu_transform) |
|
results = { |
|
'img': |
|
np.random.random((224, 224, 3)), |
|
'img_shape': (224, 224), |
|
'gt_bboxes_labels': |
|
np.array([1, 2, 3], dtype=np.int64), |
|
'gt_bboxes': |
|
np.array([[10, 10, 20, 20], [20, 20, 40, 40], [40, 40, 80, 80]], |
|
dtype=np.float32), |
|
'gt_ignore_flags': |
|
np.array([0, 0, 1], dtype=bool), |
|
} |
|
results = albu_transform(results) |
|
self.assertEqual(results['img'].dtype, np.float64) |
|
self.assertEqual(results['gt_bboxes'].dtype, np.float32) |
|
self.assertEqual(results['gt_ignore_flags'].dtype, bool) |
|
self.assertEqual(results['gt_bboxes_labels'].dtype, np.int64) |
|
self.assertEqual(results['img_shape'], results['img'].shape[:2]) |
|
|
|
@unittest.skipIf(albumentations is None, 'albumentations is not installed') |
|
def test_repr(self): |
|
albu_transform = dict( |
|
type='Albu', transforms=[dict(type='ChannelShuffle', p=1)]) |
|
albu_transform = TRANSFORMS.build(albu_transform) |
|
|
|
self.assertEqual( |
|
repr(albu_transform), 'Albu(transforms=[' |
|
'{\'type\': \'ChannelShuffle\', ' |
|
'\'p\': 1}])') |
|
|
|
|
|
class TestCorrupt(unittest.TestCase): |
|
|
|
def test_transform(self): |
|
results = dict( |
|
img_path=osp.join(osp.dirname(__file__), '../../data/color.jpg')) |
|
|
|
|
|
load = dict(type='LoadImageFromFile') |
|
load = TRANSFORMS.build(load) |
|
|
|
corrupt_transform = dict(type='Corrupt', corruption='gaussian_blur') |
|
corrupt_transform = TRANSFORMS.build(corrupt_transform) |
|
|
|
|
|
results = load(results) |
|
results = corrupt_transform(results) |
|
|
|
self.assertEqual(results['img'].dtype, np.uint8) |
|
|
|
def test_repr(self): |
|
corrupt_transform = dict(type='Corrupt', corruption='gaussian_blur') |
|
corrupt_transform = TRANSFORMS.build(corrupt_transform) |
|
|
|
self.assertEqual( |
|
repr(corrupt_transform), 'Corrupt(corruption=gaussian_blur, ' |
|
'severity=1)') |
|
|
|
|
|
class TestRandomShift(unittest.TestCase): |
|
|
|
def test_init(self): |
|
|
|
with self.assertRaises(AssertionError): |
|
RandomShift(prob=1.5) |
|
|
|
|
|
with self.assertRaises(AssertionError): |
|
RandomShift(max_shift_px=-1) |
|
|
|
def test_transform(self): |
|
|
|
results = dict() |
|
img = mmcv.imread( |
|
osp.join(osp.dirname(__file__), '../../data/color.jpg'), 'color') |
|
results['img'] = img |
|
h, w, _ = img.shape |
|
gt_bboxes = create_random_bboxes(8, w, h) |
|
results['gt_bboxes_labels'] = np.ones( |
|
gt_bboxes.shape[0], dtype=np.int64) |
|
results['gt_bboxes'] = gt_bboxes |
|
transform = RandomShift(prob=1.0) |
|
results = transform(results) |
|
|
|
self.assertEqual(results['img'].shape[:2], (h, w)) |
|
self.assertEqual(results['gt_bboxes_labels'].shape[0], |
|
results['gt_bboxes'].shape[0]) |
|
self.assertEqual(results['gt_bboxes_labels'].dtype, np.int64) |
|
self.assertEqual(results['gt_bboxes'].dtype, np.float32) |
|
|
|
def test_transform_use_box_type(self): |
|
|
|
results = dict() |
|
img = mmcv.imread( |
|
osp.join(osp.dirname(__file__), '../../data/color.jpg'), 'color') |
|
results['img'] = img |
|
h, w, _ = img.shape |
|
gt_bboxes = create_random_bboxes(8, w, h) |
|
results['gt_bboxes_labels'] = np.ones( |
|
gt_bboxes.shape[0], dtype=np.int64) |
|
results['gt_bboxes'] = HorizontalBoxes(gt_bboxes) |
|
transform = RandomShift(prob=1.0) |
|
results = transform(results) |
|
|
|
self.assertEqual(results['img'].shape[:2], (h, w)) |
|
self.assertEqual(results['gt_bboxes_labels'].shape[0], |
|
results['gt_bboxes'].shape[0]) |
|
self.assertEqual(results['gt_bboxes_labels'].dtype, np.int64) |
|
self.assertEqual(results['gt_bboxes'].dtype, torch.float32) |
|
|
|
def test_repr(self): |
|
transform = RandomShift() |
|
self.assertEqual( |
|
repr(transform), ('RandomShift(prob=0.5, ' |
|
'max_shift_px=32, ' |
|
'filter_thr_px=1)')) |
|
|
|
|
|
class TestRandomErasing(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) |
|
|
|
def test_transform(self): |
|
transform = RandomErasing( |
|
n_patches=(1, 5), ratio=(0.4, 0.8), img_border_value=0) |
|
results = transform(copy.deepcopy(self.results)) |
|
self.assertTrue(results['img'].sum() < self.results['img'].sum()) |
|
|
|
transform = RandomErasing( |
|
n_patches=1, ratio=0.999, img_border_value=255) |
|
results = transform(copy.deepcopy(self.results)) |
|
self.assertTrue(results['img'].sum() > self.results['img'].sum()) |
|
|
|
empty_results = copy.deepcopy(self.results) |
|
empty_results['gt_bboxes'] = np.zeros((0, 4), dtype=np.float32) |
|
empty_results['gt_bboxes_labels'] = np.zeros((0, ), dtype=np.int64) |
|
empty_results['gt_masks'] = empty_results['gt_masks'][False] |
|
empty_results['gt_ignore_flags'] = np.zeros((0, ), dtype=bool) |
|
empty_results['gt_seg_map'] = np.ones_like( |
|
empty_results['gt_seg_map']) * 255 |
|
results = transform(copy.deepcopy(empty_results)) |
|
self.assertTrue(results['img'].sum() > self.results['img'].sum()) |
|
|
|
def test_transform_use_box_type(self): |
|
src_results = copy.deepcopy(self.results) |
|
src_results['gt_bboxes'] = HorizontalBoxes(src_results['gt_bboxes']) |
|
|
|
transform = RandomErasing( |
|
n_patches=(1, 5), ratio=(0.4, 0.8), img_border_value=0) |
|
results = transform(copy.deepcopy(src_results)) |
|
self.assertTrue(results['img'].sum() < src_results['img'].sum()) |
|
|
|
transform = RandomErasing( |
|
n_patches=1, ratio=0.999, img_border_value=255) |
|
results = transform(copy.deepcopy(src_results)) |
|
self.assertTrue(results['img'].sum() > src_results['img'].sum()) |
|
|
|
empty_results = copy.deepcopy(src_results) |
|
empty_results['gt_bboxes'] = HorizontalBoxes([], dtype=torch.float32) |
|
empty_results['gt_bboxes_labels'] = np.zeros((0, ), dtype=np.int64) |
|
empty_results['gt_masks'] = empty_results['gt_masks'][False] |
|
empty_results['gt_ignore_flags'] = np.zeros((0, ), dtype=bool) |
|
empty_results['gt_seg_map'] = np.ones_like( |
|
empty_results['gt_seg_map']) * 255 |
|
results = transform(copy.deepcopy(empty_results)) |
|
self.assertTrue(results['img'].sum() > src_results['img'].sum()) |
|
|
|
def test_repr(self): |
|
transform = RandomErasing(n_patches=(1, 5), ratio=(0, 0.2)) |
|
self.assertEqual( |
|
repr(transform), ('RandomErasing(n_patches=(1, 5), ' |
|
'ratio=(0, 0.2), ' |
|
'squared=True, ' |
|
'bbox_erased_thr=0.9, ' |
|
'img_border_value=128, ' |
|
'mask_border_value=0, ' |
|
'seg_ignore_label=255)')) |
|
|