Torchattacks adalah perpustakaan Pytorch yang memberikan serangan permusuhan untuk menghasilkan contoh -contoh permusuhan.
Ini berisi antarmuka dan fungsi Pytorch yang memudahkan pengguna Pytorch untuk menerapkan serangan permusuhan.
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 )Paket tambahan yang disarankan .
Kutipan. Jika Anda menggunakan paket ini, silakan kutip Bibtex berikut (Googlescholar):
@article{kim2020torchattacks,
title={Torchattacks: A pytorch repository for adversarial attacks},
author={Kim, Hoki},
journal={arXiv preprint arXiv:2010.01950},
year={2020}
}
Persyaratan
Instalasi
# 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 .
Tindakan pencegahan
(N, C) di mana C = number of classes . Mempertimbangkan sebagian besar model di TorchVision.models mengembalikan satu vektor (N,C) , di mana N adalah jumlah input dan C kemudian menjadi jumlah kelas, torchattacks juga hanya mendukung bentuk output terbatas. Silakan periksa bentuk output model dengan hati -hati.torch.backends.cudnn.deterministic = True untuk mendapatkan contoh permusuhan yang sama dengan benih acak tetap . Beberapa operasi non-deterministik dengan tensor float pada GPU [Diskusikan]. Jika Anda ingin mendapatkan hasil yang sama dengan input yang sama, silakan jalankan torch.backends.cudnn.deterministic = True [Ref].Demo
Mode yang ditargetkan
# 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 ()Simpan gambar permusuhan
# Save
atk . save ( data_loader , save_path = "./data.pt" , verbose = True )
# Load
adv_loader = atk . load ( load_path = "./data.pt" )Pelatihan/evaluasi selama serangan
# 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 )Membuat serangkaian serangan
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 ])Ukuran jarak dalam tanda kurung.
| Nama | Kertas | Komentar |
|---|---|---|
| FGSM (Linf) | Menjelaskan dan memanfaatkan contoh permusuhan (Goodfellow et al., 2014) | |
| Bim (Linf) | Contoh -contoh permusuhan di dunia fisik (Kurakin et al., 2016) | Metode iteratif dasar atau iteratif-fsgm |
| Cw (L2) | Menuju mengevaluasi ketahanan jaringan saraf (Carlini et al., 2016) | |
| RFGSM (Linf) | Ensemble Transarial Traning: Serangan dan Pertahanan (Tramèr et al., 2017) | Inisialisasi acak + FGSM |
| PGD (Linf) | Menuju model pembelajaran yang mendalam yang resisten terhadap serangan permusuhan (Mardry et al., 2017) | Metode gradien yang diproyeksikan |
| Pgdl2 (L2) | Menuju model pembelajaran yang mendalam yang resisten terhadap serangan permusuhan (Mardry et al., 2017) | Metode gradien yang diproyeksikan |
| MIFGSM (Linf) | Meningkatkan serangan permusuhan dengan momentum (Dong et al., 2017) | ? Kontributor Zhuangzi926, Huitailangyz |
| Tpgd (Linf) | Teoritis prinsip trade-off antara ketahanan dan akurasi (Zhang et al., 2019) | |
| Eotpgd (Linf) | Komentari "Adv-BNN: Peningkatan Pertahanan Perselisihan Melalui Jaringan Saraf Bayesian yang kuat" (Zimmermann, 2019) | EOT+PGD |
| Apgd (Linf, L2) | Evaluasi ketahanan yang dapat diandalkan dengan ansambel beragam serangan bebas parameter (Croce et al., 2020) | |
| Apgdt (Linf, L2) | Evaluasi ketahanan yang dapat diandalkan dengan ansambel beragam serangan bebas parameter (Croce et al., 2020) | APGD yang ditargetkan |
| FAB (Linf, L2, L1) | Contoh permusuhan minimal terdistorsi dengan serangan batas adaptif cepat (Croce et al., 2019) | |
| Persegi (Linf, L2) | Square Attack: Serangan Persetujuan Kotak Hitam Kueri yang efisien melalui pencarian acak (Andriushchenko et al., 2019) | |
| Autoattack (Linf, L2) | Evaluasi ketahanan yang dapat diandalkan dengan ansambel beragam serangan bebas parameter (Croce et al., 2020) | APGD+APGDT+FAB+SQUARE |
| Deepfool (L2) | Deepfool: Metode sederhana dan akurat untuk membodohi jaringan saraf dalam (Moosavi-Dezfooli et al., 2016) | |
| OnePixel (L0) | One Pixel Attack for Fooling Deep Neural Networks (Su et al., 2019) | |
| Sparsefool (L0) | Sparsefool: Beberapa piksel membuat perbedaan besar (Modas et al., 2019) | |
| DIFGSM (Linf) | Meningkatkan transferabilitas contoh permusuhan dengan keragaman input (Xie et al., 2019) | ? Kontributor Taobai |
| Tifgsm (Linf) | Menghindari pertahanan ke contoh permusuhan yang dapat ditransfer dengan serangan invarian terjemahan (Dong et al., 2019) | ? Kontributor Taobai |
| NIFGSM (Linf) | Nesterov mempercepat gradien dan invarian skala untuk serangan permusuhan (Lin, et al., 2022) | ? Kontributor Zhijin-ge |
| SINIFGSM (Linf) | Nesterov mempercepat gradien dan invarian skala untuk serangan permusuhan (Lin, et al., 2022) | ? Kontributor Zhijin-ge |
| VMIFGSM (Linf) | Meningkatkan transferabilitas serangan permusuhan melalui varians tuning (Wang, et al., 2022) | ? Kontributor Zhijin-ge |
| Vnifgsm (Linf) | Meningkatkan transferabilitas serangan permusuhan melalui varians tuning (Wang, et al., 2022) | ? Kontributor Zhijin-ge |
| Naik opelet (Linf) | Menjelajahi kesalahan klasifikasi jaringan saraf yang kuat untuk meningkatkan serangan permusuhan (Schwinn, Leo, et al., 2021) | |
| Pixle (L0) | Pixle: Serangan kotak hitam yang cepat dan efektif berdasarkan pengaturan ulang piksel (Pomponi, Jary, et al., 2022) | |
| LGV (Linf, L2, L1, L0) | LGV: Meningkatkan Contoh Perselisihan Transferabilitas dari sekitar geometris besar (Gubri, et al., 2022) | ? Kontributor Martin Gubri |
| SPSA (Linf) | Risiko permusuhan dan bahaya mengevaluasi terhadap serangan lemah (Uesato, Jonathan, et al., 2018) | ? Kontributor Riko Naka |
| JSMA (L0) | Keterbatasan Pembelajaran mendalam dalam pengaturan permusuhan (Papernot, Nicolas, et al., 2016) | ? Kontributor Riko Naka |
| Eadl1 (L1) | EAD: Serangan Net Elastic to Deep Neural Networks (Chen, Pin-Yu, et al., 2018) | ? Kontributor Riko Naka |
| Eaden (L1, L2) | EAD: Serangan Net Elastic to Deep Neural Networks (Chen, Pin-Yu, et al., 2018) | ? Kontributor Riko Naka |
| PIFGSM (PIM) (Linf) | Patch-Wise Attack for Fooling Deep Neural Network (GAO, Lianli, et al., 2020) | ? Kontributor Riko Naka |
| PIFGSM ++ (PIM ++) (Linf) | Patch-Wise ++ gangguan untuk serangan target permusuhan (GAO, Lianli, et al., 2021) | ? Kontributor Riko Naka |
Adapun paket perbandingan, saat ini diperbarui dan metode yang paling banyak dikutip dipilih:
Akurasi yang kuat terhadap setiap serangan dan waktu berlalu pada 50 gambar pertama CIFAR10. Untuk serangan L2, rata -rata jarak L2 antara gambar permusuhan dan gambar asli direkam. Semua percobaan dilakukan di GeForce RTX 2080. Untuk versi terbaru, silakan merujuk ke sini (kode, NBViewer).
| Menyerang | Kemasan | Standar | WONG2020FAST | Rice2020overfitting | Komentar |
|---|---|---|---|---|---|
| FGSM (Linf) | Torchattacks | 34% (54ms) | 48% (5ms) | 62% (82ms) | |
| Foolbox * | 34% (15ms) | 48% (8ms) | 62% (30ms) | ||
| SENI | 34% (214ms) | 48% (59ms) | 62% (768ms) | ||
| PGD (Linf) | Torchattacks | 0% (174ms) | 44% (52ms) | 58% (1348ms) | ? Tercepat |
| Foolbox * | 0% (354ms) | 44% (56ms) | 58% (1856ms) | ||
| SENI | 0% (1384 ms) | 44% (437ms) | 58% (4704ms) | ||
| CW † (L2) | Torchattacks | 0% / 0,40 (2596ms) | 14% / 0,61 (3795ms) | 22% / 0,56 (43484ms) | ? Tingkat keberhasilan tertinggi ? Tercepat |
| Foolbox * | 0% / 0,40 (2668ms) | 32% / 0,41 (3928ms) | 34% / 0,43 (44418ms) | ||
| SENI | 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) | ? Tercepat |
| Foolbox * | 0% / 0,41 (396ms) | 68% / 0,5 (57ms) | 70% / 0,5 (1968ms) | ||
| SENI | 0% / 0,40 (1364ms) | 68% / 0,5 (429ms) | 70% / 0,5 (4777ms) |
* Perhatikan bahwa Foolbox mengembalikan akurasi dan gambar permusuhan secara bersamaan, sehingga waktu aktual untuk menghasilkan gambar permusuhan mungkin lebih pendek dari catatan.
† Mempertimbangkan bahwa algoritma pencarian biner untuk Const c dapat memakan waktu, Torchattacks mendukung mutliattack untuk pencarian kisi c .
Selain itu, saya juga merekomendasikan untuk menggunakan paket yang baru-baru ini diusulkan, RAI-Toolbox .
| Menyerang | Kemasan | Waktu/langkah (akurasi) |
|---|---|---|
| FGSM (Linf) | Rai-Toolbox | 58 ms (0%) |
| Torchattacks | 81 ms (0%) | |
| Foolbox | 105 ms (0%) | |
| SENI | 83 ms (0%) | |
| PGD (Linf) | Rai-Toolbox | 58 ms (44%) |
| Torchattacks | 79 ms (44%) | |
| Foolbox | 82 ms (44%) | |
| SENI | 90 ms (44%) | |
| PGD (L2) | Rai-Toolbox | 58 ms (70%) |
| Torchattacks | 81 ms (70%) | |
| Foolbox | 82 ms (70%) | |
| SENI | 89 ms (70%) |
RAI-Toolbox mengambil pendekatan unik untuk gangguan berbasis gradien: mereka diimplementasikan dalam hal pengoptimal transformasi parameter dan model gangguan. Ini memungkinkan pengguna untuk menerapkan beragam algoritma (seperti gangguan universal dan konsep yang menyelidik dengan gradien yang jarang) menggunakan paradigma yang sama dengan serangan PGD standar.