| @@ -0,0 +1,121 @@ | |||||
| # Copyright 2020 Huawei Technologies Co., Ltd | |||||
| # | |||||
| # Licensed under the Apache License, Version 2.0 (the "License"); | |||||
| # you may not use this file except in compliance with the License. | |||||
| # You may obtain a copy of the License at | |||||
| # | |||||
| # http://www.apache.org/licenses/LICENSE-2.0 | |||||
| # | |||||
| # Unless required by applicable law or agreed to in writing, software | |||||
| # distributed under the License is distributed on an "AS IS" BASIS, | |||||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
| # See the License for the specific language governing permissions and | |||||
| # limitations under the License. | |||||
| # ============================================================================== | |||||
| import numpy as np | |||||
| import mindspore.dataset.transforms.vision.c_transforms as c_vision | |||||
| import mindspore.dataset.transforms.vision.py_transforms as py_vision | |||||
| import mindspore.dataset as ds | |||||
| from mindspore import log as logger | |||||
| from util import diff_mse, visualize, save_and_check_md5 | |||||
| GENERATE_GOLDEN = False | |||||
| DATA_DIR = ["../data/dataset/test_tf_file_3_images/train-0000-of-0001.data"] | |||||
| SCHEMA_DIR = "../data/dataset/test_tf_file_3_images/datasetSchema.json" | |||||
| def test_HWC2CHW(plot=False): | |||||
| """ | |||||
| Test HWC2CHW | |||||
| """ | |||||
| logger.info("Test HWC2CHW") | |||||
| # First dataset | |||||
| data1 = ds.TFRecordDataset(DATA_DIR, SCHEMA_DIR, columns_list=["image"], shuffle=False) | |||||
| decode_op = c_vision.Decode() | |||||
| hwc2chw_op = c_vision.HWC2CHW() | |||||
| data1 = data1.map(input_columns=["image"], operations=decode_op) | |||||
| data1 = data1.map(input_columns=["image"], operations=hwc2chw_op) | |||||
| # Second dataset | |||||
| data2 = ds.TFRecordDataset(DATA_DIR, SCHEMA_DIR, columns_list=["image"], shuffle=False) | |||||
| data2 = data2.map(input_columns=["image"], operations=decode_op) | |||||
| image_transposed = [] | |||||
| image = [] | |||||
| for item1, item2 in zip(data1.create_dict_iterator(), data2.create_dict_iterator()): | |||||
| image_transposed.append(item1["image"].copy()) | |||||
| image.append(item2["image"].copy()) | |||||
| # check if the shape of data is transposed correctly | |||||
| # transpose the original image from shape (H,W,C) to (C,H,W) | |||||
| mse = diff_mse(item1['image'], item2['image'].transpose(2, 0, 1)) | |||||
| assert mse == 0 | |||||
| if plot: | |||||
| visualize(image, image_transposed) | |||||
| def test_HWC2CHW_md5(): | |||||
| """ | |||||
| Test HWC2CHW(md5) | |||||
| """ | |||||
| logger.info("Test HWC2CHW with md5 comparison") | |||||
| # First dataset | |||||
| data1 = ds.TFRecordDataset(DATA_DIR, SCHEMA_DIR, columns_list=["image"], shuffle=False) | |||||
| decode_op = c_vision.Decode() | |||||
| hwc2chw_op = c_vision.HWC2CHW() | |||||
| data1 = data1.map(input_columns=["image"], operations=decode_op) | |||||
| data1 = data1.map(input_columns=["image"], operations=hwc2chw_op) | |||||
| # expected md5 from images | |||||
| filename = "test_HWC2CHW_01_result.npz" | |||||
| save_and_check_md5(data1, filename, generate_golden=GENERATE_GOLDEN) | |||||
| def test_HWC2CHW_comp(plot=False): | |||||
| """ | |||||
| Test HWC2CHW between python and c image augmentation | |||||
| """ | |||||
| logger.info("Test HWC2CHW with c_transform and py_transform comparison") | |||||
| # First dataset | |||||
| data1 = ds.TFRecordDataset(DATA_DIR, SCHEMA_DIR, columns_list=["image"], shuffle=False) | |||||
| decode_op = c_vision.Decode() | |||||
| hwc2chw_op = c_vision.HWC2CHW() | |||||
| data1 = data1.map(input_columns=["image"], operations=decode_op) | |||||
| data1 = data1.map(input_columns=["image"], operations=hwc2chw_op) | |||||
| # Second dataset | |||||
| data2 = ds.TFRecordDataset(DATA_DIR, SCHEMA_DIR, columns_list=["image"], shuffle=False) | |||||
| transforms = [ | |||||
| py_vision.Decode(), | |||||
| py_vision.ToTensor(), | |||||
| py_vision.HWC2CHW() | |||||
| ] | |||||
| transform = py_vision.ComposeOp(transforms) | |||||
| data2 = data2.map(input_columns=["image"], operations=transform()) | |||||
| image_c_transposed = [] | |||||
| image_py_transposed = [] | |||||
| for item1, item2 in zip(data1.create_dict_iterator(), data2.create_dict_iterator()): | |||||
| c_image = item1["image"] | |||||
| py_image = (item2["image"].transpose(1, 2, 0) * 255).astype(np.uint8) | |||||
| # compare images between that applying c_transform and py_transform | |||||
| mse = diff_mse(py_image, c_image) | |||||
| # the images aren't exactly the same due to rounding error | |||||
| assert mse < 0.001 | |||||
| image_c_transposed.append(item1["image"].copy()) | |||||
| image_py_transposed.append(item2["image"].copy()) | |||||
| if plot: | |||||
| visualize(image_c_transposed, image_py_transposed) | |||||
| if __name__ == '__main__': | |||||
| test_HWC2CHW() | |||||
| test_HWC2CHW_md5() | |||||
| test_HWC2CHW_comp() | |||||