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 et al., 2014) | |
| bim (linf) | 물리적 세계의 적대적 사례 (Kurakin et al., 2016) | 기본 반복 방법 또는 반복 FSGM |
| CW (L2) | 신경망의 견고성을 평가하기 위해 (Carlini et al., 2016) | |
| RFGSM (linf) | 앙상블 적대적 트랜 링 : 공격과 방어 (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) | 제곱 공격 : 임의의 검색을 통한 쿼리 효율적인 블랙 박스 대적 공격 (Andriushchenko et al., 2019) | |
| 자동 공격 (Linf, L2) | 다양한 매개 변수가없는 공격의 앙상블로 적대적 견고성에 대한 신뢰할 수있는 평가 (Croce et al., 2020) | APGD+APGDT+FAB+사각형 |
| 딥 풀 (L2) | DeepFool : Deep Neural Networks를 속이는 간단하고 정확한 방법 (Moosavi-Dezfooli et al., 2016) | |
| onepixel (L0) | 깊은 신경 네트워크를 속이는 한 픽셀 공격 (Su et al., 2019) | |
| sparsefool (L0) | Sparsefool : 몇 픽셀은 큰 차이를 만듭니다 (Modas et al., 2019) | |
| difgsm (linf) | 입력 다양성을 사용한 적대적 사례의 전이성 향상 (Xie et al., 2019) | ? 기고자 타오 바이 |
| tifgsm (linf) | 번역 불가능한 공격에 의한 양도 가능한 대적 사례에 대한 방어 (Dong et al., 2019) | ? 기고자 타오 바이 |
| 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 : 큰 기하학적 인근으로부터의 적대적 예 전달성 향상 (Gubri, et al., 2022) | ? 기고자 Martin Gubri |
| SPSA (linf) | 적의 위험과 약한 공격에 대한 평가의 위험 (Uesato, Jonathan, et al., 2018) | ? 기고자 Riko Naka |
| JSMA (L0) | 적대적 환경에서의 딥 러닝의 한계 (Papernot, Nicolas, et al., 2016) | ? 기고자 Riko Naka |
| eadl1 (L1) | EAD : 깊은 신경망에 대한 탄성 네트 공격 (Chen, Pin-Yu, et al., 2018) | ? 기고자 Riko Naka |
| 에덴 (L1, L2) | EAD : 깊은 신경망에 대한 탄성 네트 공격 (Chen, Pin-Yu, et al., 2018) | ? 기고자 Riko Naka |
| pifgsm (pim) (linf) | 딥 신경 네트워크를 속이는 패치 가상의 공격 (Gao, Lianli, et al., 2020) | ? 기고자 Riko Naka |
| pifgsm ++ (pim ++) (linf) | 적대적 표적 공격에 대한 패치 ++ 섭동 (Gao, Lianli, et al., 2021) | ? 기고자 Riko Naka |
비교 패키지의 경우 현재 업데이트되고 가장 많이 인용 된 방법이 선택되었습니다.
CIFAR10의 첫 50 개 이미지에서 각 공격에 대한 강력한 정확도 및 경과 시간. L2 공격의 경우 적대 이미지와 원래 이미지 사이의 평균 L2 거리가 기록됩니다. 모든 실험은 Geforce RTX 2080에서 수행되었습니다. 최신 버전의 경우 여기 (Code, NBViewer)를 참조하십시오.
| 공격 | 패키지 | 기준 | Wong2020fast | Rice2020 Overfitting | 주목 |
|---|---|---|---|---|---|
| FGSM (linf) | 횃불 | 34% (54ms) | 48% (5ms) | 62% (82ms) | |
| 바보 * | 34% (15ms) | 48% (8ms) | 62% (30ms) | ||
| 미술 | 34% (214ms) | 48% (59ms) | 62% (768ms) | ||
| PGD (LINF) | 횃불 | 0% (174ms) | 44% (52ms) | 58% (1348ms) | ? 가장 빠른 |
| 바보 * | 0% (354ms) | 44% (56ms) | 58% (1856ms) | ||
| 미술 | 0% (1384ms) | 44% (437ms) | 58% (4704ms) | ||
| CW † (L2) | 횃불 | 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) | 횃불 | 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는 그리드 검색을위한 Mutliattack을 지원합니다. c .
또한 최근에 제안 된 패키지 인 Rai-Toolbox를 사용하는 것이 좋습니다.
| 공격 | 패키지 | 시간/단계 (정확도) |
|---|---|---|
| FGSM (linf) | Rai-Toolbox | 58ms (0%) |
| 횃불 | 81ms (0%) | |
| 바보 | 105ms (0%) | |
| 미술 | 83ms (0%) | |
| PGD (LINF) | Rai-Toolbox | 58ms (44%) |
| 횃불 | 79ms (44%) | |
| 바보 | 82ms (44%) | |
| 미술 | 90ms (44%) | |
| PGD (L2) | Rai-Toolbox | 58ms (70%) |
| 횃불 | 81ms (70%) | |
| 바보 | 82ms (70%) | |
| 미술 | 89ms (70%) |
Rai-Toolbox는 그라디언트 기반 섭동에 대한 독특한 접근 방식을 취합니다. 매개 변수 변환 최적화기 및 섭동 모델 측면에서 구현됩니다. 이를 통해 사용자는 표준 PGD 공격과 동일한 패러다임을 사용하여 다양한 알고리즘 (스파 스 그라디언트를 사용한 개념 프로브)을 구현할 수 있습니다.