|
|
@@ -20,15 +20,15 @@ import numpy as np |
|
|
|
from mindspore import Model |
|
|
|
from mindspore import Tensor |
|
|
|
|
|
|
|
from mindarmour.fuzzing.model_coverage_metrics import ModelCoverageMetrics |
|
|
|
from mindarmour.utils._check_param import check_model, check_numpy_param, \ |
|
|
|
check_param_multi_types, check_norm_level, check_param_in_range, \ |
|
|
|
check_param_type, check_int_positive |
|
|
|
from mindarmour.fuzzing.image_transform import Contrast, Brightness, Blur, \ |
|
|
|
Noise, Translate, Scale, Shear, Rotate |
|
|
|
from mindarmour.attacks import FastGradientSignMethod, \ |
|
|
|
MomentumDiverseInputIterativeMethod, ProjectedGradientDescent |
|
|
|
from mindarmour.utils.logger import LogUtil |
|
|
|
from ..adv_robustness.attacks import FastGradientSignMethod, \ |
|
|
|
MomentumDiverseInputIterativeMethod, ProjectedGradientDescent |
|
|
|
from .image_transform import Contrast, Brightness, Blur, \ |
|
|
|
Noise, Translate, Scale, Shear, Rotate |
|
|
|
from .model_coverage_metrics import ModelCoverageMetrics |
|
|
|
|
|
|
|
LOGGER = LogUtil.get_instance() |
|
|
|
TAG = 'Fuzzer' |
|
|
@@ -95,7 +95,7 @@ class Fuzzer: |
|
|
|
>>> {'method': 'FGSM', 'params': {'eps': 0.1, 'alpha': 0.1}}] |
|
|
|
>>> train_images = np.random.rand(32, 1, 32, 32).astype(np.float32) |
|
|
|
>>> model_fuzz_test = Fuzzer(model, train_images, 10, 1000) |
|
|
|
>>> samples, labels, preds, strategies, report = model_fuzz_test.fuzzing(mutate_config, initial_seeds) |
|
|
|
>>> samples, labels, preds, strategies, report = model_fuzz_test.fuzz_testing(mutate_config, initial_seeds) |
|
|
|
""" |
|
|
|
|
|
|
|
def __init__(self, target_model, train_dataset, neuron_num, segmented_num=1000): |
|
|
@@ -151,7 +151,7 @@ class Fuzzer: |
|
|
|
'Rotate'. Thirdly, attack methods include: 'FGSM', 'PGD' and 'MDIIM'. |
|
|
|
`mutate_config` must have method in the type of pixel value based |
|
|
|
transform methods. The way of setting parameters for first and |
|
|
|
second type methods can be seen in 'mindarmour/fuzzing/image_transform.py'. |
|
|
|
second type methods can be seen in 'mindarmour/fuzz_testing/image_transform.py'. |
|
|
|
For third type methods, you can refer to the corresponding class. |
|
|
|
initial_seeds (list[list]): Initial seeds used to generate mutated |
|
|
|
samples. The format of initial seeds is [[image_data, label], |
|
|
@@ -169,7 +169,7 @@ class Fuzzer: |
|
|
|
Default: 20. |
|
|
|
|
|
|
|
Returns: |
|
|
|
- list, mutated samples in fuzzing. |
|
|
|
- list, mutated samples in fuzz_testing. |
|
|
|
|
|
|
|
- list, ground truth labels of mutated samples. |
|
|
|
|
|
|
@@ -376,11 +376,11 @@ class Fuzzer: |
|
|
|
def _evaluate(self, fuzz_samples, gt_labels, fuzz_preds, |
|
|
|
fuzz_strategies, metrics): |
|
|
|
""" |
|
|
|
Evaluate generated fuzzing samples in three dimention: accuracy, |
|
|
|
Evaluate generated fuzz_testing samples in three dimention: accuracy, |
|
|
|
attack success rate and neural coverage. |
|
|
|
|
|
|
|
Args: |
|
|
|
fuzz_samples (numpy.ndarray): Generated fuzzing samples according to seeds. |
|
|
|
fuzz_samples (numpy.ndarray): Generated fuzz_testing samples according to seeds. |
|
|
|
gt_labels (numpy.ndarray): Ground Truth of seeds. |
|
|
|
fuzz_preds (numpy.ndarray): Predictions of generated fuzz samples. |
|
|
|
fuzz_strategies (numpy.ndarray): Mutate strategies of fuzz samples. |