|
|
|
@ -23,6 +23,8 @@ from numpy import random
|
|
|
|
|
import mmcv
|
|
|
|
|
import mindspore.dataset as de
|
|
|
|
|
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 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)
|
|
|
|
|
|
|
|
|
|
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):
|
|
|
|
|
"""transpose operation for image"""
|
|
|
|
|
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)
|
|
|
|
|
else:
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
def _data_aug(image, box, is_training):
|
|
|
|
@ -289,24 +307,24 @@ def preprocess_fn(image, box, is_training):
|
|
|
|
|
if not is_training:
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
expand = (np.random.rand() < config.expand_ratio)
|
|
|
|
|
if expand:
|
|
|
|
|
input_data = expand_column(*input_data)
|
|
|
|
|
|
|
|
|
|
if config.keep_ratio:
|
|
|
|
|
input_data = rescale_column(*input_data)
|
|
|
|
|
else:
|
|
|
|
|
input_data = resize_column(*input_data)
|
|
|
|
|
|
|
|
|
|
photo = (np.random.rand() < config.photo_ratio)
|
|
|
|
|
if photo:
|
|
|
|
|
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 _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)
|
|
|
|
|
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:
|
|
|
|
|
ds = ds.map(input_columns=["image", "annotation"],
|
|
|
|
|
output_columns=["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.repeat(repeat_num)
|
|
|
|
|
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"],
|
|
|
|
|
operations=compose_map_func,
|
|
|
|
|
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.repeat(repeat_num)
|
|
|
|
|
return ds
|
|
|
|
|