diff --git a/mindspore/python/mindspore/dataset/engine/offload.py b/mindspore/python/mindspore/dataset/engine/offload.py index f67785ddc34..6fe4846be39 100644 --- a/mindspore/python/mindspore/dataset/engine/offload.py +++ b/mindspore/python/mindspore/dataset/engine/offload.py @@ -277,17 +277,20 @@ class RandomSharpness(nn.Cell): self.cast = P.Cast() self.shape = P.Shape() + self.ones = P.Ones() self.reshape = P.Reshape() self.expand_dims = P.ExpandDims() self.mul = P.Mul() self.transpose = P.Transpose() + self.check_rand = Tensor(self.degree_min == self.degree_max) + self.weight = np.array([[1, 1, 1], [1, 5, 1], [1, 1, 1]])/13.0 self.weight = np.repeat(self.weight[np.newaxis, :, :], 3, axis=0) self.weight = np.repeat(self.weight[np.newaxis, :, :], 3, axis=0) self.weight = Tensor(self.weight, mstype.float32) - self.filter = P.Conv2D(out_channel=3, kernel_size=(3, 3), pad_mode='same') + self.filter = P.Conv2D(out_channel=3, kernel_size=(3, 3), pad_mode='pad', pad=1) def construct(self, x): @@ -298,6 +301,8 @@ class RandomSharpness(nn.Cell): degree_rand_factor = Tensor(np.random.uniform(size=(bs, 1)), dtype=mstype.float32) degree_rand_factor = self.degree_min + (self.degree_max - self.degree_min)*degree_rand_factor + degree_factor = self.degree_min * self.ones((bs, 1), mstype.float32) + degree_rand_factor = (self.check_rand * degree_factor) + (~self.check_rand * degree_rand_factor) degree_rand_factor = self.reshape(C.repeat_elements(degree_rand_factor, rep=(h*w*c)), (bs, h, w, c)) x_sharp = self.filter(self.transpose(x, (0, 3, 1, 2)), self.weight) diff --git a/tests/ut/python/dataset/test_map_offload.py b/tests/ut/python/dataset/test_map_offload.py index 111f723c06f..92a69afc7ea 100644 --- a/tests/ut/python/dataset/test_map_offload.py +++ b/tests/ut/python/dataset/test_map_offload.py @@ -339,6 +339,32 @@ def test_offload_dim_check(): continue +def test_offload_random_sharpness_op(): + """ + Feature: test map offload RandomSharpness op. + Description: Input is image dataset. + Expectation: Output should be same with activated or deactivated offload for RandomSharpness op. + """ + + # Dataset with offload activated. + dataset_0 = ds.ImageFolderDataset(DATA_DIR) + dataset_0 = dataset_0.map(operations=[C.Decode()], input_columns="image") + dataset_0 = dataset_0.map(operations=[C.RandomSharpness(degrees=[1.0, 1.0])], input_columns="image", offload=True) + dataset_0 = dataset_0.map(operations=[C.HWC2CHW()], input_columns="image", offload=True) + dataset_0 = dataset_0.batch(8, drop_remainder=True) + + # Dataset with offload not activated. + dataset_1 = ds.ImageFolderDataset(DATA_DIR) + dataset_1 = dataset_1.map(operations=[C.Decode()], input_columns="image") + dataset_1 = dataset_1.map(operations=[C.RandomSharpness(degrees=[1.0, 1.0])], input_columns="image") + dataset_1 = dataset_1.map(operations=[C.HWC2CHW()], input_columns="image") + dataset_1 = dataset_1.batch(8, drop_remainder=True) + + for (img_0, _), (img_1, _) in zip(dataset_0.create_tuple_iterator(num_epochs=1, output_numpy=True), + dataset_1.create_tuple_iterator(num_epochs=1, output_numpy=True)): + np.testing.assert_almost_equal(img_0, img_1, decimal=6) + + if __name__ == "__main__": test_offload() test_auto_offload() @@ -353,3 +379,4 @@ if __name__ == "__main__": test_offload_different_column_end_of_pipeline() test_offload_not_end_of_pipeline() test_offload_dim_check() + test_offload_random_sharpness_op()