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攻擊實現各種算法(例如稀疏梯度的通用擾動和概念探測)。