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)の1つのベクトルのみを返す必要があります。ここでC = number of classes 。 torchvision.modelsのほとんどのモデルを考慮して、 (N,C)の1つのベクトルを返します。ここで、 Nは入力の数、 Cクラスの数字であるため、 Torchattackは限られた形式の出力のみをサポートします。モデルの出力の形状を注意深く確認してください。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èretal。、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+正方形 |
| deepfool (L2) | DeepFool:深いニューラルネットワークを欺くためのシンプルで正確な方法(Moosavi-Dezfooli et al。、2016) | |
| ワンピクセル (L0) | 深いニューラルネットワークを欺くための1つのピクセル攻撃(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) | ?貢献者のマーティン・グブリ |
| SPSA (linf) | 敵対的なリスクと弱い攻撃に対する評価の危険性(Uesato、Jonathan、et al。、2018) | ?貢献者リコ・ナカ |
| JSMA (L0) | 敵対的な設定における深い学習の限界(Papernot、Nicolas、et al。、2016) | ?貢献者リコ・ナカ |
| eadl1 (L1) | EAD:深いニューラルネットワークへの弾性ネット攻撃(Chen、Pin-Yu、et al。、2018) | ?貢献者リコ・ナカ |
| イーデン (L1、L2) | EAD:深いニューラルネットワークへの弾性ネット攻撃(Chen、Pin-Yu、et al。、2018) | ?貢献者リコ・ナカ |
| PIFGSM(PIM) (linf) | ディープニューラルネットワークをだますためのパッチごとの攻撃(Gao、Lianli、et al。、2020) | ?貢献者リコ・ナカ |
| pifgsm ++(pim ++) (linf) | 敵対的な標的攻撃のためのパッチごとの++摂動(GAO、Lianli、et al。、2021) | ?貢献者リコ・ナカ |
比較パッケージについては、現在更新されており、最も引用されている方法が選択されました。
CIFAR10の最初の50枚の画像で、各攻撃に対する堅牢な精度と経過時間。 L2攻撃の場合、敵対的な画像と元の画像の間の平均L2距離が記録されています。すべての実験はGeForce RTX 2080で行われました。最新バージョンについては、こちら(Code、NBViewer)を参照してください。
| 攻撃 | パッケージ | 標準 | wong2020fast | rice2020オーバー | 述べる |
|---|---|---|---|---|---|
| fgsm (linf) | Torchattacks | 34%(54ms) | 48%(5ms) | 62%(82ms) | |
| qualbox * | 34%(15ms) | 48%(8ms) | 62%(30ms) | ||
| 美術 | 34%(214ms) | 48%(59ms) | 62%(768ms) | ||
| PGD (LINF) | Torchattacks | 0%(174ms) | 44%(52ms) | 58%(1348ms) | ?最速 |
| qualbox * | 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) | ?最高の成功率 ?最速 |
| qualbox * | 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) | ?最速 |
| qualbox * | 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のバイナリ検索アルゴリズムが時間がかかる可能性があることを考慮すると、トーチャッタックはc検索のためのmutliattackをサポートします。
さらに、最近提案されたパッケージであるRai-Toolboxを使用することもお勧めします。
| 攻撃 | パッケージ | タイム/ステップ(精度) |
|---|---|---|
| fgsm(linf) | Rai-Toolbox | 58 ms (0%) |
| Torchattacks | 81 ms(0%) | |
| フールボックス | 105 ms(0%) | |
| 美術 | 83 ms(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攻撃と同じパラダイムを使用して、多様なアルゴリズム(普通の摂動やスパースグラデーションを使用した概念プロービングなど)を実装できます。