adversarial attacks pytorch
v3.5.1
Torchattacks是一个Pytorch库,提供对抗性攻击以生成对抗性示例。
它包含类似Pytorch的接口和功能,使Pytorch用户更容易实施对抗性攻击。
import torchattacks
atk = torchattacks . PGD ( model , eps = 8 / 255 , alpha = 2 / 255 , steps = 4 )
# If inputs were normalized, then
# atk.set_normalization_used(mean=[...], std=[...])
adv_images = atk ( images , labels )其他推荐包。
引用。如果您使用此软件包,请引用以下Bibtex(Googlescholar):
@article{kim2020torchattacks,
title={Torchattacks: A pytorch repository for adversarial attacks},
author={Kim, Hoki},
journal={arXiv preprint arXiv:2010.01950},
year={2020}
}
要求
安装
# pip
pip install torchattacks
# source
pip install git+https://github.com/Harry24k/adversarial-attacks-pytorch.git
# git clone
git clone https://github.com/Harry24k/adversarial-attacks-pytorch.git
cd adversarial-attacks-pytorch/
pip install -e .
防范措施
(N, C)的一个向量,其中C = number of classes 。考虑到torchvision中的大多数模型。模型返回(N,C)的一个向量,其中N是输入的数量和C是类的数量, torchattacks也只支持有限的输出形式。请仔细检查模型输出的形状。torch.backends.cudnn.deterministic = True以获得固定随机种子的相同对抗示例。某些操作是不确定性的,在GPU上进行了浮动张量[讨论]。如果您想获得相同的输入结果相同的结果,请运行torch.backends.cudnn.deterministic = True [ref]。演示
目标模式
# random labels as target labels.
atk . set_mode_targeted_random () # labels with the k-th smallest probability as target labels.
atk . set_mode_targeted_least_likely ( kth_min ) # labels obtained by mapping function as target labels.
# shift all class loops one to the right, 1=>2, 2=>3, .., 9=>0
atk . set_mode_targeted_by_function ( target_map_function = lambda images , labels :( labels + 1 ) % 10 ) atk . set_mode_targeted_by_label ( quiet = True )
# shift all class loops one to the right, 1=>2, 2=>3, .., 9=>0
target_labels = ( labels + 1 ) % 10
adv_images = atk ( images , target_labels ) atk . set_mode_default ()保存对手图像
# Save
atk . save ( data_loader , save_path = "./data.pt" , verbose = True )
# Load
adv_loader = atk . load ( load_path = "./data.pt" )攻击期间训练/评估
# For RNN-based models, we cannot calculate gradients with eval mode.
# Thus, it should be changed to the training mode during the attack.
atk . set_model_training_mode ( model_training = False , batchnorm_training = False , dropout_training = False )攻击
atk1 = torchattacks . FGSM ( model , eps = 8 / 255 )
atk2 = torchattacks . PGD ( model , eps = 8 / 255 , alpha = 2 / 255 , iters = 40 , random_start = True )
atk = torchattacks . MultiAttack ([ atk1 , atk2 ]) atk1 = torchattacks . CW ( model , c = 0.1 , steps = 1000 , lr = 0.01 )
atk2 = torchattacks . CW ( model , c = 1 , steps = 1000 , lr = 0.01 )
atk = torchattacks . MultiAttack ([ atk1 , atk2 ]) atk1 = torchattacks . PGD ( model , eps = 8 / 255 , alpha = 2 / 255 , iters = 40 , random_start = True )
atk2 = torchattacks . PGD ( model , eps = 8 / 255 , alpha = 2 / 255 , iters = 40 , random_start = True )
atk = torchattacks . MultiAttack ([ atk1 , atk2 ])括号中的距离度量。
| 姓名 | 纸 | 评论 |
|---|---|---|
| FGSM (linf) | 解释和利用对抗性例子(Goodfellow等,2014) | |
| BIM (linf) | 物理世界中的对抗例子(Kurakin等,2016) | 基本的迭代方法或迭代FSGM |
| CW (L2) | 用于评估神经网络的鲁棒性(Carlini等,2016) | |
| RFGSM (linf) | 合奏对抗性traning:攻击和防御(Tramèr等,2017) | 随机初始化 + FGSM |
| PGD (linf) | 朝着对对抗性攻击有抵抗力的深度学习模型(Mardry等,2017) | 投影梯度方法 |
| PGDL2 (L2) | 朝着对对抗性攻击有抵抗力的深度学习模型(Mardry等,2017) | 投影梯度方法 |
| mifgsm (linf) | 通过动量增强对抗性攻击(Dong等,2017) | ? Huitailangyz的贡献者Zhuangzi926 |
| TPGD (linf) | 理论上有原则的鲁棒性和准确性之间的权衡(Zhang等,2019) | |
| EOTPGD (linf) | 评论“ Adv-BNN:通过强大的贝叶斯神经网络改善对抗性防御”(Zimmermann,2019年) | EOT+PGD |
| apgd (Linf,L2) | 通过无参数攻击的合奏对对抗性鲁棒性的可靠评估(Croce等,2020) | |
| APGDT (Linf,L2) | 通过无参数攻击的合奏对对抗性鲁棒性的可靠评估(Croce等,2020) | 目标APGD |
| 工厂 (Linf,L2,L1) | 具有快速自适应边界攻击的最小扭曲的对抗示例(Croce等,2019) | |
| 正方形 (Linf,L2) | 正方形攻击:通过随机搜索进行查询的黑盒对抗攻击(Andriushchenko等,2019) | |
| 自动攻击 (Linf,L2) | 通过无参数攻击的合奏对对抗性鲁棒性的可靠评估(Croce等,2020) | APGD+APGDT+FAB+正方形 |
| 深餐 (L2) | DeepFool:一种愚弄深神经网络的简单准确的方法(Moosavi-Dezfooli等,2016) | |
| Onepixel (L0) | 一种用于欺骗深度神经网络的像素攻击(Su等,2019) | |
| 稀疏 (L0) | SparseFool:一些像素有很大的不同(Modas等,2019) | |
| difgsm (linf) | 通过输入多样性提高对抗性示例的可传递性(Xie等,2019) | ? TAOBAI贡献者 |
| tifgsm (linf) | 通过翻译不景气攻击将防御逃避到可转移的对抗性例子(Dong等,2019) | ? TAOBAI贡献者 |
| nifgsm (linf) | Nesterov加速了对抗攻击的梯度和比例不变性(Lin等,2022) | ?贡献者Zhijin-GE |
| sinifgsm (linf) | Nesterov加速了对抗攻击的梯度和比例不变性(Lin等,2022) | ?贡献者Zhijin-GE |
| VMIFGSM (linf) | 通过方差调整增强对抗性攻击的可传递性(Wang等,2022) | ?贡献者Zhijin-GE |
| vnifgsm (linf) | 通过方差调整增强对抗性攻击的可传递性(Wang等,2022) | ?贡献者Zhijin-GE |
| 抖动 (linf) | 探索强大神经网络的错误分类以增强对抗性攻击(Schwinn,Leo等,2021) | |
| 像素 (L0) | Pixle:基于重排像素的快速有效的黑盒攻击(Pomponi,Jary等,2022) | |
| LGV (Linf,L2,L1,L0) | LGV:增强对抗性示例从大几何附近转移性(Gubri等,2022) | ?撰稿人马丁·古布里(Martin Gubri) |
| SPSA (linf) | 对抗风险和评估弱攻击的危险(Uesato,Jonathan等,2018) | ?贡献者Riko Naka |
| JSMA (L0) | 对抗环境中深度学习的局限性(Papernot,Nicolas等,2016) | ?贡献者Riko Naka |
| EADL1 (L1) | EAD:对深神经网络的弹性网络攻击(Chen,Pin-Yu等,2018) | ?贡献者Riko Naka |
| 埃登 (L1,L2) | EAD:对深神经网络的弹性网络攻击(Chen,Pin-Yu等,2018) | ?贡献者Riko Naka |
| PIFGSM(PIM) (linf) | 愚弄深神经网络的斑块攻击(Gao,Lianli等,2020) | ?贡献者Riko Naka |
| PIFGSM ++(PIM ++) (linf) | 针对对抗性靶向攻击的斑块++扰动(Gao,Lianli等,2021) | ?贡献者Riko Naka |
至于比较软件包,当前更新和最多引用的方法已选择:
针对每次攻击的鲁棒精度,并在CIFAR10的前50张图像上经过时间。对于L2攻击,记录了对抗图像和原始图像之间的平均L2距离。所有实验均在GeForce RTX 2080上完成。对于最新版本,请参阅此处(CODE,NBVIEWER)。
| 攻击 | 包裹 | 标准 | Wong2020Fast | RIES2020反拟合 | 评论 |
|---|---|---|---|---|---|
| FGSM (LINF) | Torchattacks | 34%(54ms) | 48%(5ms) | 62%(82ms) | |
| 傻瓜* | 34%(15ms) | 48%(8ms) | 62%(30ms) | ||
| 艺术 | 34%(214ms) | 48%(59ms) | 62%(768ms) | ||
| PGD (LINF) | Torchattacks | 0%(174ms) | 44%(52ms) | 58%(1348ms) | ?最快 |
| 傻瓜* | 0%(354ms) | 44%(56ms) | 58%(1856ms) | ||
| 艺术 | 0%(1384毫秒) | 44%(437ms) | 58%(4704ms) | ||
| CW † (L2) | Torchattacks | 0% / 0.40 (2596ms) | 14% / 0.61 (3795ms) | 22% / 0.56 (43484ms) | ?最高成功率 ?最快 |
| 傻瓜* | 0% / 0.40 (2668ms) | 32% / 0.41 (3928ms) | 34% / 0.43 (44418ms) | ||
| 艺术 | 0% / 0.59 (196738ms) | 24% / 0.70 (66067ms) | 26% / 0.65 (694972ms) | ||
| PGD (L2) | Torchattacks | 0% / 0.41(184ms) | 68% / 0.5 (52ms) | 70% / 0.5 (1377ms) | ?最快 |
| 傻瓜* | 0% / 0.41(396ms) | 68% / 0.5 (57ms) | 70% / 0.5 (1968ms) | ||
| 艺术 | 0% / 0.40(1364ms) | 68% / 0.5 (429ms) | 70% / 0.5 (4777ms) |
*请注意,Foolbox同时返回准确性和对抗性图像,因此生成对抗图像的实际时间可能比记录短。
†考虑到const c的二进制搜索算法可能很耗时,因此Torchattacks支持用于网格搜索c mutliattack c。
此外,我还建议使用最近提出的软件包RAI-Toolbox 。
| 攻击 | 包裹 | 时间/步骤(准确性) |
|---|---|---|
| FGSM(LINF) | rai-toolbox | 58毫秒(0%) |
| Torchattacks | 81 ms(0%) | |
| 傻瓜 | 105 ms(0%) | |
| 艺术 | 83毫秒(0%) | |
| PGD(LINF) | rai-toolbox | 58毫秒(44%) |
| Torchattacks | 79毫秒(44%) | |
| 傻瓜 | 82毫秒(44%) | |
| 艺术 | 90毫秒(44%) | |
| PGD(L2) | rai-toolbox | 58毫秒(70%) |
| Torchattacks | 81毫秒(70%) | |
| 傻瓜 | 82毫秒(70%) | |
| 艺术 | 89毫秒(70%) |
RAI-Toolbox采用了一种独特的方法来基于梯度的扰动:它们是根据参数转换优化器和扰动模型来实现的。这使用户能够使用相同的范式与标准PGD攻击实现各种算法(例如稀疏梯度的通用扰动和概念探测)。