ProArd / attacks /__init__.py
smi08's picture
Upload folder using huggingface_hub
7771996 verified
from .base import Attack
from .fgsm import FGMAttack
from .fgsm import FGSMAttack
from .fgsm import L2FastGradientAttack
from .fgsm import LinfFastGradientAttack
from .pgd import PGDAttack
from .pgd import L2PGDAttack
from .pgd import LinfPGDAttack
from .deepfool import DeepFoolAttack
from .deepfool import LinfDeepFoolAttack
from .deepfool import L2DeepFoolAttack
from .utils import CWLoss
from .autoattack import AutoAttacks
from .apgd_ce import Autoattack_apgd_ce
from .squred import Squre_Attack
ATTACKS = ['fgsm', 'linf-pgd', 'fgm', 'l2-pgd', 'linf-df', 'l2-df', 'linf-apgd', 'l2-apgd','squar_attack','autoattack','apgd_ce']
def create_attack(model, criterion, attack_type, attack_eps, attack_iter, attack_step, rand_init_type='uniform',
clip_min=0., clip_max=1.):
"""
Initialize adversary.
Arguments:
model (nn.Module): forward pass function.
criterion (nn.Module): loss function.
attack_type (str): name of the attack.
attack_eps (float): attack radius.
attack_iter (int): number of attack iterations.
attack_step (float): step size for the attack.
rand_init_type (str): random initialization type for PGD (default: uniform).
clip_min (float): mininum value per input dimension.
clip_max (float): maximum value per input dimension.
Returns:
Attack
"""
if attack_type == 'fgsm':
attack = FGSMAttack(model, criterion, eps=attack_eps, clip_min=clip_min, clip_max=clip_max)
elif attack_type == 'fgm':
attack = FGMAttack(model, criterion, eps=attack_eps, clip_min=clip_min, clip_max=clip_max)
elif attack_type == 'linf-pgd':
attack = LinfPGDAttack(model, criterion, eps=attack_eps, nb_iter=attack_iter, eps_iter=attack_step,
rand_init_type=rand_init_type, clip_min=clip_min, clip_max=clip_max)
elif attack_type == 'l2-pgd':
attack = L2PGDAttack(model, criterion, eps=attack_eps, nb_iter=attack_iter, eps_iter=attack_step,
rand_init_type=rand_init_type, clip_min=clip_min, clip_max=clip_max)
elif attack_type == 'linf-df':
attack = LinfDeepFoolAttack(model, overshoot=0.02, nb_iter=attack_iter, search_iter=0, clip_min=clip_min,
clip_max=clip_max)
elif attack_type == 'l2-df':
attack = L2DeepFoolAttack(model, overshoot=0.02, nb_iter=attack_iter, search_iter=0, clip_min=clip_min,
clip_max=clip_max)
elif attack_type == 'squar_attack':
attack = Squre_Attack(model, criterion, nb_iter=attack_iter, eps_iter=attack_step,
rand_init_type=rand_init_type, clip_min=clip_min, clip_max=clip_max)
elif attack_type == "autoattack":
attack = AutoAttacks(model, nb_iter=attack_iter, eps=attack_eps, eps_iter=attack_step,
rand_init_type=rand_init_type, clip_min=clip_min, clip_max=clip_max)
elif attack_type == "apgd_ce":
attack = Autoattack_apgd_ce (model, nb_iter=attack_iter, eps_iter=attack_step,
rand_init_type=rand_init_type, clip_min=clip_min, clip_max=clip_max)
else:
raise NotImplementedError('{} is not yet implemented!'.format(attack_type))
return attack