diff --git a/mindarmour/adv_robustness/attacks/black/hop_skip_jump_attack.py b/mindarmour/adv_robustness/attacks/black/hop_skip_jump_attack.py index 22638bb..d9729a8 100644 --- a/mindarmour/adv_robustness/attacks/black/hop_skip_jump_attack.py +++ b/mindarmour/adv_robustness/attacks/black/hop_skip_jump_attack.py @@ -55,8 +55,8 @@ class HopSkipJumpAttack(Attack): values are 'geometric_progression', 'grid_search', 'geometric_progression'. num_iterations (int): The number of iterations. Default: 64. gamma (float): Used to set binary search threshold theta. Default: 1.0. - For l2 attack the binary search threshold `theta` is: - math:`gamma / d^{3/2}`. For linf attack is math:`gamma / d^2`. + For l2 attack the binary search threshold `theta` is + :math:`gamma / d^{3/2}`. For linf attack is :math:`gamma / d^2`. constraint (str): The norm distance to optimize. Possible values are 'l2', 'linf'. Default: l2. batch_size (int): Batch size. Default: 32. diff --git a/mindarmour/fuzz_testing/image_transform.py b/mindarmour/fuzz_testing/image_transform.py index 031264a..52a1136 100644 --- a/mindarmour/fuzz_testing/image_transform.py +++ b/mindarmour/fuzz_testing/image_transform.py @@ -19,7 +19,7 @@ from PIL import Image, ImageEnhance, ImageFilter from mindspore.dataset.vision.py_transforms_util import is_numpy, \ to_pil, hwc_to_chw -from mindarmour.utils._check_param import check_param_multi_types, check_param_in_range +from mindarmour.utils._check_param import check_param_multi_types, check_param_in_range, check_numpy_param from mindarmour.utils.logger import LogUtil LOGGER = LogUtil.get_instance() @@ -143,8 +143,8 @@ class ImageTransform: else: image = image if normalized: - image = np.uint8(image*255) - return rgb, chw, normalized, gray3dim, image + image = image*255 + return rgb, chw, normalized, gray3dim, np.uint8(image) def _original_format(self, image, chw, normalized, gray3dim): """ Return transformed image with original format. """ @@ -199,6 +199,8 @@ class Contrast(ImageTransform): Returns: numpy.ndarray, transformed image. """ + image = check_numpy_param('image', image) + ori_dtype = image.dtype _, chw, normalized, gray3dim, image = self._check(image) image = to_pil(image) img_contrast = ImageEnhance.Contrast(image) @@ -206,7 +208,7 @@ class Contrast(ImageTransform): trans_image = self._original_format(trans_image, chw, normalized, gray3dim) - return trans_image + return trans_image.astype(ori_dtype) class Brightness(ImageTransform): @@ -246,13 +248,15 @@ class Brightness(ImageTransform): Returns: numpy.ndarray, transformed image. """ + image = check_numpy_param('image', image) + ori_dtype = image.dtype _, chw, normalized, gray3dim, image = self._check(image) image = to_pil(image) img_contrast = ImageEnhance.Brightness(image) trans_image = img_contrast.enhance(self.factor) trans_image = self._original_format(trans_image, chw, normalized, gray3dim) - return trans_image + return trans_image.astype(ori_dtype) class Blur(ImageTransform): @@ -290,12 +294,14 @@ class Blur(ImageTransform): Returns: numpy.ndarray, transformed image. """ + image = check_numpy_param('image', image) + ori_dtype = image.dtype _, chw, normalized, gray3dim, image = self._check(image) image = to_pil(image) trans_image = image.filter(ImageFilter.GaussianBlur(radius=self.radius)) trans_image = self._original_format(trans_image, chw, normalized, gray3dim) - return trans_image + return trans_image.astype(ori_dtype) class Noise(ImageTransform): @@ -303,7 +309,7 @@ class Noise(ImageTransform): Add noise of an image. Args: - factor (float): 1 - factor is the ratio of pixels to add noise. + factor (float): factor is the ratio of pixels to add noise. If 0 gives the original image. Default 0. """ @@ -316,12 +322,12 @@ class Noise(ImageTransform): Set noise parameters. Args: - factor (Union[float, int]): 1 - factor is the ratio of pixels to + factor (Union[float, int]): factor is the ratio of pixels to add noise. If 0 gives the original image. Default 0. auto_param (bool): True if auto generate parameters. Default: False. """ if auto_param: - self.factor = np.random.uniform(0.7, 1) + self.factor = np.random.uniform(0, 1) else: self.factor = check_param_multi_types('factor', factor, [int, float]) @@ -335,14 +341,17 @@ class Noise(ImageTransform): Returns: numpy.ndarray, transformed image. """ + image = check_numpy_param('image', image) + ori_dtype = image.dtype _, chw, normalized, gray3dim, image = self._check(image) noise = np.random.uniform(low=-1, high=1, size=np.shape(image)) trans_image = np.copy(image) - trans_image[noise < -self.factor] = 0 - trans_image[noise > self.factor] = 1 + threshold = 1 - self.factor + trans_image[noise < -threshold] = 0 + trans_image[noise > threshold] = 1 trans_image = self._original_format(trans_image, chw, normalized, gray3dim) - return trans_image + return trans_image.astype(ori_dtype) class Translate(ImageTransform): @@ -391,6 +400,8 @@ class Translate(ImageTransform): Returns: numpy.ndarray, transformed image. """ + image = check_numpy_param('image', image) + ori_dtype = image.dtype _, chw, normalized, gray3dim, image = self._check(image) img = to_pil(image) image_shape = np.shape(image) @@ -400,7 +411,7 @@ class Translate(ImageTransform): (1, 0, self.x_bias, 0, 1, self.y_bias)) trans_image = self._original_format(trans_image, chw, normalized, gray3dim) - return trans_image + return trans_image.astype(ori_dtype) class Scale(ImageTransform): @@ -449,6 +460,8 @@ class Scale(ImageTransform): Returns: numpy.ndarray, transformed image. """ + image = check_numpy_param('image', image) + ori_dtype = image.dtype rgb, chw, normalized, gray3dim, image = self._check(image) if rgb: h, w, _ = np.shape(image) @@ -462,7 +475,7 @@ class Scale(ImageTransform): 0, self.factor_y, move_y_centor)) trans_image = self._original_format(trans_image, chw, normalized, gray3dim) - return trans_image + return trans_image.astype(ori_dtype) class Shear(ImageTransform): @@ -521,6 +534,8 @@ class Shear(ImageTransform): Returns: numpy.ndarray, transformed image. """ + image = check_numpy_param('image', image) + ori_dtype = image.dtype rgb, chw, normalized, gray3dim, image = self._check(image) img = to_pil(image) if rgb: @@ -546,7 +561,7 @@ class Shear(ImageTransform): scale*self.factor_y, scale, move_y_cen)) trans_image = self._original_format(trans_image, chw, normalized, gray3dim) - return trans_image + return trans_image.astype(ori_dtype) class Rotate(ImageTransform): @@ -584,9 +599,11 @@ class Rotate(ImageTransform): Returns: numpy.ndarray, transformed image. """ + image = check_numpy_param('image', image) + ori_dtype = image.dtype _, chw, normalized, gray3dim, image = self._check(image) img = to_pil(image) trans_image = img.rotate(self.angle, expand=False) trans_image = self._original_format(trans_image, chw, normalized, gray3dim) - return trans_image + return trans_image.astype(ori_dtype) diff --git a/mindarmour/utils/util.py b/mindarmour/utils/util.py index 16a170a..118e620 100644 --- a/mindarmour/utils/util.py +++ b/mindarmour/utils/util.py @@ -195,8 +195,10 @@ class GradWrap(Cell): Compute jacobian matrix. Args: - data (Tensor): Data consists of inputs and weight. \ - - inputs: Inputs of network. \ + data (Tensor): Data consists of inputs and weight. + + - inputs: Inputs of network. + - weight: Weight of each gradient, 'weight' has the same shape with labels. Returns: @@ -214,7 +216,7 @@ def calculate_iou(box_i, box_j): box_i (numpy.ndarray): Coordinates of the first box, with the format as (x1, y1, x2, y2). (x1, y1) and (x2, y2) are coordinates of the lower left corner and the upper right corner, respectively. - box_j: (numpy.ndarray): Coordinates of the second box, with the format as (x1, y1, x2, y2). + box_j (numpy.ndarray): Coordinates of the second box, with the format as (x1, y1, x2, y2). Returns: float, iou of two input boxes.