Browse Source

!159 Fix a data type error of ImageTransform and modify the factor meaning of Fuzz-Noise.

From: @jxlang910
Reviewed-by: @liu_luobin,@zhidanliu,@zhidanliu,@liu_luobin
Signed-off-by:
tags/v1.2.0-rc1
mindspore-ci-bot Gitee 4 years ago
parent
commit
3060d78c18
3 changed files with 40 additions and 21 deletions
  1. +2
    -2
      mindarmour/adv_robustness/attacks/black/hop_skip_jump_attack.py
  2. +33
    -16
      mindarmour/fuzz_testing/image_transform.py
  3. +5
    -3
      mindarmour/utils/util.py

+ 2
- 2
mindarmour/adv_robustness/attacks/black/hop_skip_jump_attack.py View File

@@ -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.


+ 33
- 16
mindarmour/fuzz_testing/image_transform.py View File

@@ -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)

+ 5
- 3
mindarmour/utils/util.py View File

@@ -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.


Loading…
Cancel
Save