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.models ส่งคืนเวกเตอร์หนึ่งตัวของ (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 et al., 2014) | |
| บิม (LINF) | ตัวอย่างที่เป็นปฏิปักษ์ในโลกทางกายภาพ (Kurakin et al., 2016) | วิธีการวนซ้ำขั้นพื้นฐานหรือซ้ำ FSGM |
| CW (L2) | ต่อการประเมินความทนทานของเครือข่ายประสาท (Carlini et al., 2016) | |
| RFGSM (LINF) | การพนันของ Ensemble antcersarial: การโจมตีและการป้องกัน (Tramèr et al., 2017) | การเริ่มต้นแบบสุ่ม + FGSM |
| PGD (LINF) | สู่รูปแบบการเรียนรู้ลึกที่ทนต่อการโจมตีของฝ่ายตรงข้าม (Mardry et al., 2017) | วิธีการไล่ระดับสีที่ฉาย |
| PGDL2 (L2) | สู่รูปแบบการเรียนรู้ลึกที่ทนต่อการโจมตีของฝ่ายตรงข้าม (Mardry et al., 2017) | วิธีการไล่ระดับสีที่ฉาย |
| MIFGSM (LINF) | เพิ่มการโจมตีที่เป็นปฏิปักษ์กับโมเมนตัม (Dong et al., 2017) | - ผู้สนับสนุน Zhuangzi926, Huitailangyz |
| TPGD (LINF) | หลักการในทางทฤษฎีการแลกเปลี่ยนระหว่างความทนทานและความแม่นยำ (Zhang et al., 2019) | |
| EOTPGD (LINF) | ความคิดเห็นเกี่ยวกับ "Adv-BNN: ปรับปรุงการป้องกันที่เป็นปฏิปักษ์ผ่านเครือข่ายประสาทเบย์ที่แข็งแกร่ง" (Zimmermann, 2019) | EOT+PGD |
| APGD (LINF, L2) | การประเมินที่เชื่อถือได้ของความทนทานของฝ่ายตรงข้ามด้วยชุดการโจมตีที่ปราศจากพารามิเตอร์ที่หลากหลาย (Croce et al., 2020) | |
| APGDT (LINF, L2) | การประเมินที่เชื่อถือได้ของความทนทานของฝ่ายตรงข้ามด้วยชุดการโจมตีที่ปราศจากพารามิเตอร์ที่หลากหลาย (Croce et al., 2020) | APGD เป้าหมาย |
| ยอดเยี่ยม (LINF, L2, L1) | ตัวอย่างที่บิดเบี้ยวน้อยที่สุดที่มีการโจมตีแบบปรับตัวได้อย่างรวดเร็ว (Croce et al., 2019) | |
| สี่เหลี่ยม (LINF, L2) | Square Attack: การโจมตีแบบ enderial box-box ที่มีประสิทธิภาพผ่านการค้นหาแบบสุ่ม (Andriushchenko et al., 2019) | |
| การโจมตีอัตโนมัติ (LINF, L2) | การประเมินที่เชื่อถือได้ของความทนทานของฝ่ายตรงข้ามด้วยชุดการโจมตีที่ปราศจากพารามิเตอร์ที่หลากหลาย (Croce et al., 2020) | APGD+APGDT+FAB+Square |
| ลุ่มน้ำ (L2) | Deepfool: วิธีที่ง่ายและแม่นยำในการหลอกเครือข่ายประสาทลึก (Moosavi-Dezfooli et al., 2016) | |
| onepixel (L0) | การโจมตีหนึ่งพิกเซลสำหรับการหลอกเครือข่ายประสาทลึก (Su et al., 2019) | |
| กระจัดกระจาย (L0) | Sparsefool: ไม่กี่พิกเซลสร้างความแตกต่างอย่างมาก (Modas et al., 2019) | |
| difggsm (LINF) | การปรับปรุงความสามารถในการถ่ายโอนตัวอย่างที่เป็นปฏิปักษ์ด้วยความหลากหลายของอินพุต (Xie et al., 2019) | - ผู้มีส่วนร่วม Taobai |
| TIFGSM (LINF) | หลีกเลี่ยงการป้องกันตัวอย่างที่สามารถถ่ายโอนได้โดยการโจมตีที่ไม่แปรปรวน (Dong et al., 2019) | - ผู้มีส่วนร่วม Taobai |
| NIFGSM (LINF) | Nesterov เร่งการไล่ระดับสีและความแปรปรวนของสเกลสำหรับการโจมตีที่เป็นปฏิปักษ์ (Lin, et al., 2022) | - ผู้สนับสนุน Zhijin-ge |
| sinifgsm (LINF) | Nesterov เร่งการไล่ระดับสีและความแปรปรวนของสเกลสำหรับการโจมตีที่เป็นปฏิปักษ์ (Lin, et al., 2022) | - ผู้สนับสนุน Zhijin-ge |
| VMIFGSM (LINF) | การเพิ่มความสามารถในการถ่ายโอนของการโจมตีที่เป็นปฏิปักษ์ผ่านการปรับความแปรปรวน (Wang, et al., 2022) | - ผู้สนับสนุน Zhijin-ge |
| VNIFGSM (LINF) | การเพิ่มความสามารถในการถ่ายโอนของการโจมตีที่เป็นปฏิปักษ์ผ่านการปรับความแปรปรวน (Wang, et al., 2022) | - ผู้สนับสนุน Zhijin-ge |
| กระวนกระวาย (LINF) | การสำรวจการจำแนกประเภทของเครือข่ายประสาทที่แข็งแกร่งเพื่อเพิ่มการโจมตีของฝ่ายตรงข้าม (Schwinn, Leo, et al., 2021) | |
| พิกเซล (L0) | Pixle: การโจมตีกล่องดำที่รวดเร็วและมีประสิทธิภาพโดยใช้พิกเซลจัดเรียงใหม่ (Pomponi, Jary, et al., 2022) | |
| LGV (LINF, L2, L1, L0) | LGV: การเพิ่มความสามารถในการถ่ายโอนตัวอย่างที่น่าสนใจจากบริเวณใกล้เคียงทางเรขาคณิตขนาดใหญ่ (Gabri, et al., 2022) | - ผู้มีส่วนร่วม Martin Gebri |
| SPSA (LINF) | ความเสี่ยงด้านปฏิปักษ์และอันตรายจากการประเมินการโจมตีที่อ่อนแอ (Uesato, Jonathan, et al., 2018) | - ผู้สนับสนุน Riko Naka |
| JSMA (L0) | ข้อ จำกัด ของการเรียนรู้อย่างลึกซึ้งในการตั้งค่าที่เป็นปฏิปักษ์ (Papernot, Nicolas, et al., 2016) | - ผู้สนับสนุน Riko Naka |
| EADL1 (L1) | EAD: Elastic-Net โจมตีเครือข่ายประสาทลึก (Chen, Pin-yu, et al., 2018) | - ผู้สนับสนุน Riko Naka |
| คนโง่ (L1, L2) | EAD: Elastic-Net โจมตีเครือข่ายประสาทลึก (Chen, Pin-yu, et al., 2018) | - ผู้สนับสนุน Riko Naka |
| PIFGSM (PIM) (LINF) | การโจมตีที่ชาญฉลาดสำหรับการหลอกเครือข่ายประสาทลึก (Gao, Lianli, et al., 2020) | - ผู้สนับสนุน Riko Naka |
| PIFGSM ++ (PIM ++) (LINF) | Patch-wise ++ การก่อกวนสำหรับการโจมตีเป้าหมายที่เป็นปฏิปักษ์ (Gao, Lianli, et al., 2021) | - ผู้สนับสนุน Riko Naka |
สำหรับแพ็คเกจเปรียบเทียบได้รับการปรับปรุงในปัจจุบันและเลือกวิธีการที่อ้างถึงมากที่สุด:
ความแม่นยำที่แข็งแกร่งต่อการโจมตีแต่ละครั้งและเวลาที่ผ่านไปใน 50 ภาพแรกของ CIFAR10 สำหรับการโจมตี L2 ระยะทาง L2 เฉลี่ยระหว่างภาพที่เป็นปฏิปักษ์และภาพต้นฉบับจะถูกบันทึกไว้ การทดลองทั้งหมดทำใน GeForce RTX 2080 สำหรับเวอร์ชันล่าสุดโปรดดูที่นี่ (รหัส, NBViewer)
| จู่โจม | บรรจุุภัณฑ์ | มาตรฐาน | Wong2020Fast | Rice2020overfitting | คำพูด |
|---|---|---|---|---|---|
| FGSM (LINF) | Torchattacks | 34% (54ms) | 48% (5ms) | 62% (82ms) | |
| Foolbox * | 34% (15ms) | 48% (8ms) | 62% (30ms) | ||
| ศิลปะ | 34% (214ms) | 48% (59ms) | 62% (768ms) | ||
| PGD (LINF) | Torchattacks | 0% (174ms) | 44% (52ms) | 58% (1348ms) | - เร็วที่สุด |
| Foolbox * | 0% (354ms) | 44% (56ms) | 58% (1856ms) | ||
| ศิลปะ | 0% (1384 ms) | 44% (437ms) | 58% (4704ms) | ||
| CW † (L2) | Torchattacks | 0% / 0.40 (2596ms) | 14% / 0.61 (3795ms) | 22% / 0.56 (43484ms) | - อัตราความสำเร็จสูงสุด - เร็วที่สุด |
| Foolbox * | 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) | - เร็วที่สุด |
| Foolbox * | 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 สนับสนุน Mutliattack สำหรับการค้นหากริด c .
นอกจากนี้ฉันยังแนะนำให้ใช้แพ็คเกจที่เสนอเมื่อเร็ว ๆ นี้ Rai-Toolbox
| จู่โจม | บรรจุุภัณฑ์ | เวลา/ขั้นตอน (ความแม่นยำ) |
|---|---|---|
| FGSM (LINF) | Rai-Toolbox | 58 ms (0%) |
| Torchattacks | 81 ms (0%) | |
| คนโง่ | 105 ms (0%) | |
| ศิลปะ | 83 ms (0%) | |
| PGD (LINF) | Rai-Toolbox | 58 ms (44%) |
| Torchattacks | 79 ms (44%) | |
| คนโง่ | 82 ms (44%) | |
| ศิลปะ | 90 ms (44%) | |
| PGD (L2) | Rai-Toolbox | 58 ms (70%) |
| Torchattacks | 81 ms (70%) | |
| คนโง่ | 82 ms (70%) | |
| ศิลปะ | 89 ms (70%) |
Rai-Toolbox ใช้วิธีการที่ไม่เหมือนใครในการก่อกวนตามการไล่ระดับสี: พวกเขาจะถูกนำไปใช้ในแง่ของการเพิ่มประสิทธิภาพพารามิเตอร์-การเปลี่ยนรูปแบบและรูปแบบการก่อกวน สิ่งนี้ช่วยให้ผู้ใช้สามารถใช้อัลกอริทึมที่หลากหลาย (เช่นการก่อกวนสากลและการตรวจสอบแนวคิดด้วยการไล่ระดับสีที่กระจัดกระจาย) โดยใช้กระบวนทัศน์เดียวกันกับการโจมตี PGD มาตรฐาน