Skip to content

Commit 5de2299

Browse files
authored
Merge pull request #637 from Trusted-AI/dev_1.4.1
Update to ART 1.4.1
2 parents 65b4a1f + 6669e22 commit 5de2299

26 files changed

+772
-60
lines changed

art/attacks/evasion/imperceptible_asr/imperceptible_asr_pytorch.py

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
from __future__ import absolute_import, division, print_function, unicode_literals
2626

2727
import logging
28-
from typing import Optional, Tuple, TYPE_CHECKING
28+
from typing import Tuple, Optional, Union, TYPE_CHECKING
2929

3030
import numpy as np
3131
import scipy
@@ -105,7 +105,7 @@ def __init__(
105105
batch_size: int = 32,
106106
use_amp: bool = False,
107107
opt_level: str = "O1",
108-
loss_scale: int = 1,
108+
loss_scale: Optional[Union[float, str]] = 1.0,
109109
):
110110
"""
111111
Create a :class:`.ImperceptibleASRPytorch` instance.
@@ -144,9 +144,11 @@ def __init__(
144144
only triggered if there are GPUs available.
145145
:param opt_level: Specify a pure or mixed precision optimization level. Used when use_amp is True. Accepted
146146
values are `O0`, `O1`, `O2`, and `O3`.
147-
:param loss_scale: Loss scaling. Used when use_amp is True. Default is 1 due to warp-ctc not supporting
148-
scaling of gradients.
147+
:param loss_scale: Loss scaling. Used when use_amp is True. Default is 1.0 due to warp-ctc not supporting
148+
scaling of gradients. If passed as a string, must be a string representing a number,
149+
e.g., “1.0”, or the string “dynamic”.
149150
"""
151+
import torch # lgtm [py/repeated-import]
150152
from torch.autograd import Variable
151153

152154
if (
@@ -237,6 +239,8 @@ def generate(self, x: np.ndarray, y: np.ndarray, **kwargs) -> np.ndarray:
237239
class only supports targeted attack.
238240
:return: An array holding the adversarial examples.
239241
"""
242+
import torch # lgtm [py/repeated-import]
243+
240244
# Start to compute adversarial examples
241245
adv_x = x.copy()
242246

@@ -276,6 +280,8 @@ def _generate_batch(self, x: np.ndarray, y: np.ndarray) -> np.ndarray:
276280
class only supports targeted attack.
277281
:return: A batch of adversarial examples.
278282
"""
283+
import torch # lgtm [py/repeated-import]
284+
279285
# First stage of attack
280286
successful_adv_input_1st_stage, original_input = self._attack_1st_stage(x=x, y=y)
281287
successful_perturbation_1st_stage = successful_adv_input_1st_stage - torch.tensor(original_input).to(
@@ -325,6 +331,8 @@ class only supports targeted attack.
325331
- A tensor holding the candidate adversarial examples.
326332
- An array holding the original inputs.
327333
"""
334+
import torch # lgtm [py/repeated-import]
335+
328336
# Compute local shape
329337
local_batch_size = len(x)
330338
real_lengths = np.array([x_.shape[0] for x_ in x])
@@ -493,6 +501,8 @@ class only supports targeted attack.
493501
:param original_max_psd_batch: Original maximum psd.
494502
:return: An array holding the candidate adversarial examples.
495503
"""
504+
import torch # lgtm [py/repeated-import]
505+
496506
# Compute local shape
497507
local_batch_size = len(x)
498508
real_lengths = np.array([x_.shape[0] for x_ in x])
@@ -596,6 +606,8 @@ def _forward_2nd_stage(
596606
:param original_max_psd_batch: Original maximum psd.
597607
:return: The loss tensor of the second stage of the attack.
598608
"""
609+
import torch # lgtm [py/repeated-import]
610+
599611
# Compute loss for masking threshold
600612
losses = []
601613
relu = torch.nn.ReLU()
@@ -744,6 +756,7 @@ def _psd_transform(self, delta: "torch.Tensor", original_max_psd: "torch.Tensor"
744756
:param original_max_psd: The maximum psd of the original audio.
745757
:return: The psd matrix.
746758
"""
759+
import torch # lgtm [py/repeated-import]
747760
import torchaudio
748761

749762
# These parameters are needed for the transformation

art/defences/detector/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22
Module implementing detector-based defences against adversarial attacks.
33
"""
44
from art.defences.detector import evasion
5-
from art.defences.detector import poisoning
5+
from art.defences.detector import poison
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
"""
2+
Module implementing detector-based defences against poisoning attacks.
3+
"""
4+
from art.defences.detector.poison.poison_filtering_defence import PoisonFilteringDefence
5+
from art.defences.detector.poison.ground_truth_evaluator import GroundTruthEvaluator
6+
from art.defences.detector.poison.activation_defence import ActivationDefence
7+
from art.defences.detector.poison.clustering_analyzer import ClusteringAnalyzer
8+
from art.defences.detector.poison.provenance_defense import ProvenanceDefense
9+
from art.defences.detector.poison.roni import RONIDefense
10+
from art.defences.detector.poison.spectral_signature_defense import SpectralSignatureDefense

art/defences/detector/poisoning/activation_defence.py renamed to art/defences/detector/poison/activation_defence.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@
3838

3939
from art.config import ART_DATA_PATH
4040
from art.data_generators import DataGenerator
41-
from art.defences.detector.poisoning.clustering_analyzer import ClusteringAnalyzer
42-
from art.defences.detector.poisoning.ground_truth_evaluator import GroundTruthEvaluator
43-
from art.defences.detector.poisoning.poison_filtering_defence import PoisonFilteringDefence
41+
from art.defences.detector.poison.clustering_analyzer import ClusteringAnalyzer
42+
from art.defences.detector.poison.ground_truth_evaluator import GroundTruthEvaluator
43+
from art.defences.detector.poison.poison_filtering_defence import PoisonFilteringDefence
4444
from art.utils import segment_by_class
4545
from art.visualization import create_sprite, save_image, plot_3d
4646

art/defences/detector/poisoning/provenance_defense.py renamed to art/defences/detector/poison/provenance_defense.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@
2929
import numpy as np
3030
from sklearn.model_selection import train_test_split
3131

32-
from art.defences.detector.poisoning.ground_truth_evaluator import GroundTruthEvaluator
33-
from art.defences.detector.poisoning.poison_filtering_defence import PoisonFilteringDefence
32+
from art.defences.detector.poison.ground_truth_evaluator import GroundTruthEvaluator
33+
from art.defences.detector.poison.poison_filtering_defence import PoisonFilteringDefence
3434
from art.utils import segment_by_class, performance_diff
3535

3636
if TYPE_CHECKING:

art/defences/detector/poisoning/roni.py renamed to art/defences/detector/poison/roni.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@
3030
import numpy as np
3131
from sklearn.model_selection import train_test_split
3232

33-
from art.defences.detector.poisoning.ground_truth_evaluator import GroundTruthEvaluator
34-
from art.defences.detector.poisoning.poison_filtering_defence import PoisonFilteringDefence
33+
from art.defences.detector.poison.ground_truth_evaluator import GroundTruthEvaluator
34+
from art.defences.detector.poison.poison_filtering_defence import PoisonFilteringDefence
3535
from art.utils import performance_diff
3636

3737
if TYPE_CHECKING:

art/defences/detector/poisoning/spectral_signature_defense.py renamed to art/defences/detector/poison/spectral_signature_defense.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@
2929

3030
import numpy as np
3131

32-
from art.defences.detector.poisoning.ground_truth_evaluator import GroundTruthEvaluator
33-
from art.defences.detector.poisoning.poison_filtering_defence import PoisonFilteringDefence
32+
from art.defences.detector.poison.ground_truth_evaluator import GroundTruthEvaluator
33+
from art.defences.detector.poison.poison_filtering_defence import PoisonFilteringDefence
3434

3535
if TYPE_CHECKING:
3636
from art.utils import CLASSIFIER_NEURALNETWORK_TYPE

0 commit comments

Comments
 (0)