敵対的な堅牢性研究のためのPythonツールボックスです。主要な機能はPytorchで実装されています。具体的には、Advertorchには、敵対的な摂動を生成し、敵対的な例に対する防御のためのモジュールが含まれています。また、敵対的な訓練のスクリプトも含まれています。
Python 3.6およびPytorch 1.0.0および0.4.1の下でAdvertorchを開発しました。 Advertorchをインストールするには、単に実行します
pip install advertorch
または、リポジトリをクローンして実行します
python setup.py install
パッケージを「編集可能」モードにインストールするには:
pip install -e .
いくつかの攻撃は、正確さを確保するために、foolboxまたはcleverhansの実装に対してテストされています。現在、それらは関連するライブラリの次のバージョンでテストされています。
conda install -c anaconda tensorflow-gpu==1.11.0
pip install git+https://github.com/tensorflow/cleverhans.git@336b9f4ed95dccc7f0d12d338c2038c53786ab70
pip install Keras==2.2.2
pip install foolbox==1.3.2
# prepare your pytorch model as "model"
# prepare a batch of data and label as "cln_data" and "true_label"
# ...
from advertorch . attacks import LinfPGDAttack
adversary = LinfPGDAttack (
model , loss_fn = nn . CrossEntropyLoss ( reduction = "sum" ), eps = 0.3 ,
nb_iter = 40 , eps_iter = 0.01 , rand_init = True , clip_min = 0.0 , clip_max = 1.0 ,
targeted = False )
adv_untargeted = adversary . perturb ( cln_data , true_label )
target = torch . ones_like ( true_label ) * 3
adversary . targeted = True
adv_targeted = adversary . perturb ( cln_data , target )実行可能な例については、 advertorch_examples/tutorial_attack_defense_bpda_mnist.ipynb攻撃と防御方法については、advertorch_attack_defense_bpda_mnist.ipynbを参照してください。 mnistの堅牢なモデルを敵対的に訓練する方法についてはadvertorch_examples/tutorial_train_mnist.pyを参照してください。
ドキュメントのWebページは、readthedocs https://advertorch.readthedocs.ioにあります。
Advertorchはまだ積極的な開発中です。次の機能/アイテムを路上に追加します。
FastFeatureAttackとJacobianSaliencyMapAttack 、使用されているCleverhansのバージョンに対してテストに合格しません。 (彼らは、Cleverhansの以前のバージョンでテストに合格するために使用します。)この問題は調査されています。ファイルtest_attacks_on_cleverhans.pyでは、 pytestテストで「スキップ」としてマークされています。
このプロジェクトはLGPLの下でライセンスされています。利用規約は、ライセンスとlicense.gplファイルに記載されています。
調査でAdvertorchを使用している場合は、次の技術レポートを引用してください。
@article{ding2019advertorch,
title={{AdverTorch} v0.1: An Adversarial Robustness Toolbox based on PyTorch},
author={Ding, Gavin Weiguang and Wang, Luyu and Jin, Xiaomeng},
journal={arXiv preprint arXiv:1902.07623},
year={2019}
}