1# Copyright 2020 Huawei Technologies Co., Ltd 2# 3# Licensed under the Apache License, Version 2.0 (the "License"); 4# you may not use this file except in compliance with the License. 5# You may obtain a copy of the License at 6# 7# http://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, 11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12# See the License for the specific language governing permissions and 13# limitations under the License. 14# ============================================================================== 15""" 16Testing Equalize op in DE 17""" 18import numpy as np 19 20import mindspore.dataset as ds 21import mindspore.dataset.transforms.py_transforms 22import mindspore.dataset.vision.c_transforms as C 23import mindspore.dataset.vision.py_transforms as F 24from mindspore import log as logger 25from util import visualize_list, visualize_one_channel_dataset, diff_mse, save_and_check_md5 26 27DATA_DIR = "../data/dataset/testImageNetData/train/" 28MNIST_DATA_DIR = "../data/dataset/testMnistData" 29 30GENERATE_GOLDEN = False 31 32 33def test_equalize_py(plot=False): 34 """ 35 Test Equalize py op 36 """ 37 logger.info("Test Equalize") 38 39 # Original Images 40 data_set = ds.ImageFolderDataset(dataset_dir=DATA_DIR, shuffle=False) 41 42 transforms_original = mindspore.dataset.transforms.py_transforms.Compose([F.Decode(), 43 F.Resize((224, 224)), 44 F.ToTensor()]) 45 46 ds_original = data_set.map(operations=transforms_original, input_columns="image") 47 48 ds_original = ds_original.batch(512) 49 50 for idx, (image, _) in enumerate(ds_original): 51 if idx == 0: 52 images_original = np.transpose(image.asnumpy(), (0, 2, 3, 1)) 53 else: 54 images_original = np.append(images_original, 55 np.transpose(image.asnumpy(), (0, 2, 3, 1)), 56 axis=0) 57 58 # Color Equalized Images 59 data_set = ds.ImageFolderDataset(dataset_dir=DATA_DIR, shuffle=False) 60 61 transforms_equalize = mindspore.dataset.transforms.py_transforms.Compose([F.Decode(), 62 F.Resize((224, 224)), 63 F.Equalize(), 64 F.ToTensor()]) 65 66 ds_equalize = data_set.map(operations=transforms_equalize, input_columns="image") 67 68 ds_equalize = ds_equalize.batch(512) 69 70 for idx, (image, _) in enumerate(ds_equalize): 71 if idx == 0: 72 images_equalize = np.transpose(image.asnumpy(), (0, 2, 3, 1)) 73 else: 74 images_equalize = np.append(images_equalize, 75 np.transpose(image.asnumpy(), (0, 2, 3, 1)), 76 axis=0) 77 78 num_samples = images_original.shape[0] 79 mse = np.zeros(num_samples) 80 for i in range(num_samples): 81 mse[i] = diff_mse(images_equalize[i], images_original[i]) 82 logger.info("MSE= {}".format(str(np.mean(mse)))) 83 84 if plot: 85 visualize_list(images_original, images_equalize) 86 87 88def test_equalize_c(plot=False): 89 """ 90 Test Equalize Cpp op 91 """ 92 logger.info("Test Equalize cpp op") 93 94 # Original Images 95 data_set = ds.ImageFolderDataset(dataset_dir=DATA_DIR, shuffle=False) 96 97 transforms_original = [C.Decode(), C.Resize(size=[224, 224])] 98 99 ds_original = data_set.map(operations=transforms_original, input_columns="image") 100 101 ds_original = ds_original.batch(512) 102 103 for idx, (image, _) in enumerate(ds_original): 104 if idx == 0: 105 images_original = image.asnumpy() 106 else: 107 images_original = np.append(images_original, 108 image.asnumpy(), 109 axis=0) 110 111 # Equalize Images 112 data_set = ds.ImageFolderDataset(dataset_dir=DATA_DIR, shuffle=False) 113 114 transform_equalize = [C.Decode(), C.Resize(size=[224, 224]), 115 C.Equalize()] 116 117 ds_equalize = data_set.map(operations=transform_equalize, input_columns="image") 118 119 ds_equalize = ds_equalize.batch(512) 120 121 for idx, (image, _) in enumerate(ds_equalize): 122 if idx == 0: 123 images_equalize = image.asnumpy() 124 else: 125 images_equalize = np.append(images_equalize, 126 image.asnumpy(), 127 axis=0) 128 if plot: 129 visualize_list(images_original, images_equalize) 130 131 num_samples = images_original.shape[0] 132 mse = np.zeros(num_samples) 133 for i in range(num_samples): 134 mse[i] = diff_mse(images_equalize[i], images_original[i]) 135 logger.info("MSE= {}".format(str(np.mean(mse)))) 136 137 138def test_equalize_py_c(plot=False): 139 """ 140 Test Equalize Cpp op and python op 141 """ 142 logger.info("Test Equalize cpp and python op") 143 144 # equalize Images in cpp 145 data_set = ds.ImageFolderDataset(dataset_dir=DATA_DIR, shuffle=False) 146 data_set = data_set.map(operations=[C.Decode(), C.Resize((224, 224))], input_columns=["image"]) 147 148 ds_c_equalize = data_set.map(operations=C.Equalize(), input_columns="image") 149 150 ds_c_equalize = ds_c_equalize.batch(512) 151 152 for idx, (image, _) in enumerate(ds_c_equalize): 153 if idx == 0: 154 images_c_equalize = image.asnumpy() 155 else: 156 images_c_equalize = np.append(images_c_equalize, 157 image.asnumpy(), 158 axis=0) 159 160 # Equalize images in python 161 data_set = ds.ImageFolderDataset(dataset_dir=DATA_DIR, shuffle=False) 162 data_set = data_set.map(operations=[C.Decode(), C.Resize((224, 224))], input_columns=["image"]) 163 164 transforms_p_equalize = mindspore.dataset.transforms.py_transforms.Compose([lambda img: img.astype(np.uint8), 165 F.ToPIL(), 166 F.Equalize(), 167 np.array]) 168 169 ds_p_equalize = data_set.map(operations=transforms_p_equalize, input_columns="image") 170 171 ds_p_equalize = ds_p_equalize.batch(512) 172 173 for idx, (image, _) in enumerate(ds_p_equalize): 174 if idx == 0: 175 images_p_equalize = image.asnumpy() 176 else: 177 images_p_equalize = np.append(images_p_equalize, 178 image.asnumpy(), 179 axis=0) 180 181 num_samples = images_c_equalize.shape[0] 182 mse = np.zeros(num_samples) 183 for i in range(num_samples): 184 mse[i] = diff_mse(images_p_equalize[i], images_c_equalize[i]) 185 logger.info("MSE= {}".format(str(np.mean(mse)))) 186 187 if plot: 188 visualize_list(images_c_equalize, images_p_equalize, visualize_mode=2) 189 190 191def test_equalize_one_channel(): 192 """ 193 Test Equalize cpp op with one channel image 194 """ 195 logger.info("Test Equalize C Op With One Channel Images") 196 197 c_op = C.Equalize() 198 199 try: 200 data_set = ds.ImageFolderDataset(dataset_dir=DATA_DIR, shuffle=False) 201 data_set = data_set.map(operations=[C.Decode(), C.Resize((224, 224)), 202 lambda img: np.array(img[:, :, 0])], input_columns=["image"]) 203 204 data_set.map(operations=c_op, input_columns="image") 205 206 except RuntimeError as e: 207 logger.info("Got an exception in DE: {}".format(str(e))) 208 assert "The shape" in str(e) 209 210 211def test_equalize_mnist_c(plot=False): 212 """ 213 Test Equalize C op with MNIST dataset (Grayscale images) 214 """ 215 logger.info("Test Equalize C Op With MNIST Images") 216 data_set = ds.MnistDataset(dataset_dir=MNIST_DATA_DIR, num_samples=2, shuffle=False) 217 ds_equalize_c = data_set.map(operations=C.Equalize(), input_columns="image") 218 ds_orig = ds.MnistDataset(dataset_dir=MNIST_DATA_DIR, num_samples=2, shuffle=False) 219 220 images = [] 221 images_trans = [] 222 labels = [] 223 for _, (data_orig, data_trans) in enumerate(zip(ds_orig, ds_equalize_c)): 224 image_orig, label_orig = data_orig 225 image_trans, _ = data_trans 226 images.append(image_orig.asnumpy()) 227 labels.append(label_orig.asnumpy()) 228 images_trans.append(image_trans.asnumpy()) 229 230 # Compare with expected md5 from images 231 filename = "equalize_mnist_result_c.npz" 232 save_and_check_md5(ds_equalize_c, filename, generate_golden=GENERATE_GOLDEN) 233 234 if plot: 235 visualize_one_channel_dataset(images, images_trans, labels) 236 237 238def test_equalize_md5_py(): 239 """ 240 Test Equalize py op with md5 check 241 """ 242 logger.info("Test Equalize") 243 244 # First dataset 245 data1 = ds.ImageFolderDataset(dataset_dir=DATA_DIR, shuffle=False) 246 transforms = mindspore.dataset.transforms.py_transforms.Compose([F.Decode(), 247 F.Equalize(), 248 F.ToTensor()]) 249 250 data1 = data1.map(operations=transforms, input_columns="image") 251 # Compare with expected md5 from images 252 filename = "equalize_01_result.npz" 253 save_and_check_md5(data1, filename, generate_golden=GENERATE_GOLDEN) 254 255 256def test_equalize_md5_c(): 257 """ 258 Test Equalize cpp op with md5 check 259 """ 260 logger.info("Test Equalize cpp op with md5 check") 261 262 # Generate dataset 263 data_set = ds.ImageFolderDataset(dataset_dir=DATA_DIR, shuffle=False) 264 265 transforms_equalize = [C.Decode(), 266 C.Resize(size=[224, 224]), 267 C.Equalize(), 268 F.ToTensor()] 269 270 data = data_set.map(operations=transforms_equalize, input_columns="image") 271 # Compare with expected md5 from images 272 filename = "equalize_01_result_c.npz" 273 save_and_check_md5(data, filename, generate_golden=GENERATE_GOLDEN) 274 275 276if __name__ == "__main__": 277 test_equalize_py(plot=False) 278 test_equalize_c(plot=False) 279 test_equalize_py_c(plot=False) 280 test_equalize_mnist_c(plot=True) 281 test_equalize_one_channel() 282 test_equalize_md5_py() 283 test_equalize_md5_c() 284