黑白盒 对抗攻击方法 现成调用库 Attacks Toolbox

Attacks Toolbox

  1. Adversarial Robustness Toolbox:
    1. pip install adversarial-robustness-toolbox
    2. such: from art.attacks.evasion import DeepFool
      1. art.attacks.evasion — Adversarial Robustness Toolbox 1.14.1 documentation
  2. Torchattacks
    1. pip install torchattacks
    2. from torchattacks import FGSM
    3. eps=  */255
      1. torchattacks — torchattacks v3.4.0 documentation
  3. CleverHans:
    1. pip install cleverhans
    2. cleverhans.torch.attacks
        1. GitHub - cleverhans-lab/cleverhans: An adversarial example library for constructing attacks, building defenses, and benchmarking both
  4. Foolbox:
    1. Welcome to Foolbox Native — Foolbox 3.3.3 documentation 

    5.  advertorch

         User Guide:Welcome to Advertorch — advertorch documentation

              1. advertorch.attacks — advertorch documentation

                AdverTorch: A toolbox for adversarial robustness research - Borealis AI

        例子:

from advertorch.attacks import LinfPGDAttack

adversary = LinfPGDAttack(
    model, loss_fn=nn.CrossEntropyLoss(reduction="sum"), eps=0.3,
    nb_iter=40, eps_iter=0.01, rand_init=True, clip_min=0.0, clip_max=1.0,
    targeted=False)

adv_untargeted = adversary.perturb(cln_data, true_label)

target = torch.ones_like(true_label) * 3
adversary.targeted = True
adv_targeted = adversary.perturb(cln_data, target)

这段代码片段使用 `advertorch` 库中的 LinfPGDAttack 来执行 L∞ 范数约束下的投射梯度下降攻击(L∞ PGD 攻击)。以下是代码片段的解释:

1. `LinfPGDAttack` 的导入:这里首先导入了 `advertorch` 库中的 `LinfPGDAttack` 类,该类用于实施 L∞ PGD 攻击。

2. 创建 `adversary` 对象:这段代码创建了一个 `adversary` 对象,用于执行对抗攻击。参数如下:

   - `model`:表示要攻击的目标模型。
   - `loss_fn`:表示损失函数,这里使用交叉熵损失函数(CrossEntropyLoss)来计算损失。
   - `eps`:是 L∞ 约束下的扰动幅度,设置为0.3,表示允许的最大像素值变化。
   - `nb_iter`:表示迭代次数,设置为40,攻击会在输入数据上进行40次迭代以生成对抗样本。
   - `eps_iter`:表示每次迭代的扰动幅度,设置为0.01。
   - `rand_init`:布尔值,如果设置为True,攻击将从一个随机初始化的扰动开始,否则从输入数据开始。
   - `clip_min` 和 `clip_max`:分别表示输入数据的最小和最大值,通常为0.0和1.0,以确保生成的对抗样本在合理范围内。

3. 生成非定向对抗样本:接下来,使用 `adversary.perturb` 方法生成非定向(untargeted)的对抗样本。这个对抗样本是使用 `cln_data`(干净数据)和 `true_label`(真实标签)作为输入来生成的。非定向攻击是指攻击者的目标是使模型的输出不正确,而不是将模型输出定向到特定的标签。

4. 生成定向对抗样本:然后,代码设置 `adversary.targeted` 为True,表示要执行定向攻击,攻击目标是 `target`(设置为标签3)。然后,使用 `adversary.perturb` 方法生成定向对抗样本,该攻击的目标是将模型的输出定向到标签3。

总之,这段代码执行了两种不同类型的对抗攻击:非定向攻击和定向攻击,使用 L∞ PGD 攻击方法来生成对抗样本,以检验目标模型的鲁棒性。攻击的目标可以是让模型输出错误的标签(非定向攻击),或者将模型的输出定向到特定的标签(定向攻击)。

猜你喜欢

转载自blog.csdn.net/haimengjie/article/details/131273240