| @@ -23,6 +23,8 @@ from numpy import random | |||||
| import mmcv | import mmcv | ||||
| import mindspore.dataset as de | import mindspore.dataset as de | ||||
| import mindspore.dataset.transforms.vision.c_transforms as C | import mindspore.dataset.transforms.vision.c_transforms as C | ||||
| import mindspore.dataset.transforms.c_transforms as CC | |||||
| import mindspore.common.dtype as mstype | |||||
| from mindspore.mindrecord import FileWriter | from mindspore.mindrecord import FileWriter | ||||
| from src.config import config | from src.config import config | ||||
| @@ -229,6 +231,21 @@ def flip_column(img, img_shape, gt_bboxes, gt_label, gt_num): | |||||
| return (img_data, img_shape, flipped, gt_label, gt_num) | return (img_data, img_shape, flipped, gt_label, gt_num) | ||||
| def flipped_generation(img, img_shape, gt_bboxes, gt_label, gt_num): | |||||
| """flipped generation""" | |||||
| img_data = img | |||||
| flipped = gt_bboxes.copy() | |||||
| _, w, _ = img_data.shape | |||||
| flipped[..., 0::4] = w - gt_bboxes[..., 2::4] - 1 | |||||
| flipped[..., 2::4] = w - gt_bboxes[..., 0::4] - 1 | |||||
| return (img_data, img_shape, flipped, gt_label, gt_num) | |||||
| def image_bgr_rgb(img, img_shape, gt_bboxes, gt_label, gt_num): | |||||
| img_data = img[:, :, ::-1] | |||||
| return (img_data, img_shape, gt_bboxes, gt_label, gt_num) | |||||
| def transpose_column(img, img_shape, gt_bboxes, gt_label, gt_num): | def transpose_column(img, img_shape, gt_bboxes, gt_label, gt_num): | ||||
| """transpose operation for image""" | """transpose operation for image""" | ||||
| img_data = img.transpose(2, 0, 1).copy() | img_data = img.transpose(2, 0, 1).copy() | ||||
| @@ -264,9 +281,10 @@ def preprocess_fn(image, box, is_training): | |||||
| input_data = rescale_column(*input_data) | input_data = rescale_column(*input_data) | ||||
| else: | else: | ||||
| input_data = resize_column_test(*input_data) | input_data = resize_column_test(*input_data) | ||||
| input_data = imnormalize_column(*input_data) | |||||
| output_data = transpose_column(*input_data) | |||||
| input_data = image_bgr_rgb(*input_data) | |||||
| output_data = input_data | |||||
| return output_data | return output_data | ||||
| def _data_aug(image, box, is_training): | def _data_aug(image, box, is_training): | ||||
| @@ -289,24 +307,24 @@ def preprocess_fn(image, box, is_training): | |||||
| if not is_training: | if not is_training: | ||||
| return _infer_data(image_bgr, image_shape, gt_box_new, gt_label_new, gt_iscrowd_new_revert) | return _infer_data(image_bgr, image_shape, gt_box_new, gt_label_new, gt_iscrowd_new_revert) | ||||
| flip = (np.random.rand() < config.flip_ratio) | |||||
| photo = (np.random.rand() < config.photo_ratio) | |||||
| expand = (np.random.rand() < config.expand_ratio) | |||||
| input_data = image_bgr, image_shape, gt_box_new, gt_label_new, gt_iscrowd_new_revert | input_data = image_bgr, image_shape, gt_box_new, gt_label_new, gt_iscrowd_new_revert | ||||
| expand = (np.random.rand() < config.expand_ratio) | |||||
| if expand: | if expand: | ||||
| input_data = expand_column(*input_data) | input_data = expand_column(*input_data) | ||||
| if config.keep_ratio: | if config.keep_ratio: | ||||
| input_data = rescale_column(*input_data) | input_data = rescale_column(*input_data) | ||||
| else: | else: | ||||
| input_data = resize_column(*input_data) | input_data = resize_column(*input_data) | ||||
| photo = (np.random.rand() < config.photo_ratio) | |||||
| if photo: | if photo: | ||||
| input_data = photo_crop_column(*input_data) | input_data = photo_crop_column(*input_data) | ||||
| input_data = imnormalize_column(*input_data) | |||||
| if flip: | |||||
| input_data = flip_column(*input_data) | |||||
| output_data = transpose_column(*input_data) | |||||
| input_data = image_bgr_rgb(*input_data) | |||||
| output_data = input_data | |||||
| return output_data | return output_data | ||||
| return _data_aug(image, box, is_training) | return _data_aug(image, box, is_training) | ||||
| @@ -423,11 +441,36 @@ def create_fasterrcnn_dataset(mindrecord_file, batch_size=2, repeat_num=12, devi | |||||
| ds = ds.map(input_columns=["image"], operations=decode) | ds = ds.map(input_columns=["image"], operations=decode) | ||||
| compose_map_func = (lambda image, annotation: preprocess_fn(image, annotation, is_training)) | compose_map_func = (lambda image, annotation: preprocess_fn(image, annotation, is_training)) | ||||
| hwc_to_chw = C.HWC2CHW() | |||||
| normalize_op = C.Normalize((123.675, 116.28, 103.53), (58.395, 57.12, 57.375)) | |||||
| horizontally_op = C.RandomHorizontalFlip(1) | |||||
| type_cast0 = CC.TypeCast(mstype.float32) | |||||
| type_cast1 = CC.TypeCast(mstype.float16) | |||||
| type_cast2 = CC.TypeCast(mstype.int32) | |||||
| type_cast3 = CC.TypeCast(mstype.bool_) | |||||
| if is_training: | if is_training: | ||||
| ds = ds.map(input_columns=["image", "annotation"], | ds = ds.map(input_columns=["image", "annotation"], | ||||
| output_columns=["image", "image_shape", "box", "label", "valid_num"], | output_columns=["image", "image_shape", "box", "label", "valid_num"], | ||||
| columns_order=["image", "image_shape", "box", "label", "valid_num"], | columns_order=["image", "image_shape", "box", "label", "valid_num"], | ||||
| operations=compose_map_func, python_multiprocessing=True, num_parallel_workers=num_parallel_workers) | |||||
| operations=compose_map_func, num_parallel_workers=4) | |||||
| ds = ds.map(input_columns=["image"], operations=[normalize_op, type_cast0], | |||||
| num_parallel_workers=num_parallel_workers) | |||||
| flip = (np.random.rand() < config.flip_ratio) | |||||
| if flip: | |||||
| ds = ds.map(input_columns=["image"], operations=[horizontally_op], | |||||
| num_parallel_workers=num_parallel_workers) | |||||
| ds = ds.map(input_columns=["image", "image_shape", "box", "label", "valid_num"], | |||||
| operations=flipped_generation, num_parallel_workers=4) | |||||
| # transpose_column from python to c | |||||
| ds = ds.map(input_columns=["image"], operations=[hwc_to_chw, type_cast1]) | |||||
| ds = ds.map(input_columns=["image_shape"], operations=[type_cast1]) | |||||
| ds = ds.map(input_columns=["box"], operations=[type_cast1]) | |||||
| ds = ds.map(input_columns=["label"], operations=[type_cast2]) | |||||
| ds = ds.map(input_columns=["valid_num"], operations=[type_cast3]) | |||||
| ds = ds.batch(batch_size, drop_remainder=True) | ds = ds.batch(batch_size, drop_remainder=True) | ||||
| ds = ds.repeat(repeat_num) | ds = ds.repeat(repeat_num) | ||||
| else: | else: | ||||
| @@ -436,6 +479,12 @@ def create_fasterrcnn_dataset(mindrecord_file, batch_size=2, repeat_num=12, devi | |||||
| columns_order=["image", "image_shape", "box", "label", "valid_num"], | columns_order=["image", "image_shape", "box", "label", "valid_num"], | ||||
| operations=compose_map_func, | operations=compose_map_func, | ||||
| num_parallel_workers=num_parallel_workers) | num_parallel_workers=num_parallel_workers) | ||||
| # transpose_column from python to c | |||||
| ds = ds.map(input_columns=["image"], operations=[hwc_to_chw, type_cast1]) | |||||
| ds = ds.map(input_columns=["image_shape"], operations=[type_cast1]) | |||||
| ds = ds.map(input_columns=["box"], operations=[type_cast1]) | |||||
| ds = ds.map(input_columns=["label"], operations=[type_cast2]) | |||||
| ds = ds.map(input_columns=["valid_num"], operations=[type_cast3]) | |||||
| ds = ds.batch(batch_size, drop_remainder=True) | ds = ds.batch(batch_size, drop_remainder=True) | ||||
| ds = ds.repeat(repeat_num) | ds = ds.repeat(repeat_num) | ||||
| return ds | return ds | ||||