• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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