@@ -43,16 +43,16 @@ class BeyondDetectorPyTorch(EvasionDetector):
43
43
| Paper link: https://openreview.net/pdf?id=S4LqI6CcJ3
44
44
"""
45
45
46
- defence_params = ["target_model" , "ssl_model" , "augmentations" , "aug_num" , "alpha" , "K " , "percentile" ]
46
+ defence_params = ["target_model" , "ssl_model" , "augmentations" , "aug_num" , "alpha" , "var_K " , "percentile" ]
47
47
48
48
def __init__ (
49
49
self ,
50
50
target_classifier : "CLASSIFIER_NEURALNETWORK_TYPE" ,
51
51
ssl_classifier : "CLASSIFIER_NEURALNETWORK_TYPE" ,
52
- augmentations : Callable | None ,
52
+ augmentations : Callable ,
53
53
aug_num : int = 50 ,
54
54
alpha : float = 0.8 ,
55
- K : int = 20 ,
55
+ var_K : int = 20 ,
56
56
percentile : int = 5 ,
57
57
) -> None :
58
58
"""
@@ -63,7 +63,7 @@ def __init__(
63
63
:param augmentations: data augmentations for generating neighborhoods
64
64
:param aug_num: Number of augmentations to apply to each sample (default: 50)
65
65
:param alpha: Weight factor for combining label and representation similarities (default: 0.8)
66
- :param K : Number of top similarities to consider (default: 20)
66
+ :param var_K : Number of top similarities to consider (default: 20)
67
67
:param percentile: using to calculate the threshold
68
68
"""
69
69
import torch
@@ -75,7 +75,7 @@ def __init__(
75
75
self .ssl_model = ssl_classifier .model .to (self .device )
76
76
self .aug_num = aug_num
77
77
self .alpha = alpha
78
- self .K = K
78
+ self .var_K = var_K
79
79
80
80
self .backbone = self .ssl_model .backbone
81
81
self .model_classifier = self .ssl_model .classifier
@@ -111,7 +111,7 @@ def _get_metrics(self, x: np.ndarray, batch_size: int = 128) -> np.ndarray:
111
111
112
112
number_batch = int (math .ceil (len (samples ) / batch_size ))
113
113
114
- similarities = []
114
+ similarities_list = []
115
115
116
116
with torch .no_grad ():
117
117
for index in range (number_batch ):
@@ -143,11 +143,11 @@ def _get_metrics(self, x: np.ndarray, batch_size: int = 128) -> np.ndarray:
143
143
dim = 2 ,
144
144
)
145
145
146
- similarities .append (
146
+ similarities_list .append (
147
147
(self .alpha * sim_preds + (1 - self .alpha ) * sim_repre ).sort (descending = True )[0 ].cpu ().numpy ()
148
148
)
149
149
150
- similarities = np .concatenate (similarities , axis = 0 )
150
+ similarities = np .concatenate (similarities_list , axis = 0 )
151
151
152
152
return similarities
153
153
@@ -161,10 +161,10 @@ def fit(self, x: np.ndarray, y: np.ndarray, batch_size: int = 128, nb_epochs: in
161
161
:param nb_epochs: Number of training epochs (not used in this method)
162
162
"""
163
163
clean_metrics = self ._get_metrics (x = x , batch_size = batch_size )
164
- k_minus_one_metrics = clean_metrics [:, self .K - 1 ]
164
+ k_minus_one_metrics = clean_metrics [:, self .var_K - 1 ]
165
165
self .threshold = np .percentile (k_minus_one_metrics , q = self .percentile )
166
166
167
- def detect (self , x : np .ndarray , batch_size : int = 128 , ** kwargs ) -> tuple [dict , np .ndarray ]:
167
+ def detect (self , x : np .ndarray , batch_size : int = 128 , ** kwargs ) -> tuple [np . ndarray , np .ndarray ]:
168
168
"""
169
169
Detect whether given samples are adversarial
170
170
@@ -179,7 +179,7 @@ def detect(self, x: np.ndarray, batch_size: int = 128, **kwargs) -> tuple[dict,
179
179
180
180
similarities = self ._get_metrics (x , batch_size )
181
181
182
- report = similarities [:, self .K - 1 ]
182
+ report = similarities [:, self .var_K - 1 ]
183
183
is_adversarial = report < self .threshold
184
184
185
185
return report , is_adversarial
0 commit comments