
Addestra, valuta ed esplora reti neurali con strumenti integrati di robustezza avversaria, inclusi attacchi PGD, addestramento avversario e modelli preaddestrati robusti per la ricerca sulla visione artificiale.
Installa via pip: pip install robustness
Leggi la documentazione: https://robustness.readthedocs.io/en/latest/index.html
robustness è un pacchetto che noi (studenti del MadryLab <http://madry-lab.ml>_) abbiamo creato
per rendere flessibile e semplice l'addestramento, la valutazione e l'esplorazione di reti neurali.
Lo usiamo in quasi tutti i nostri progetti (che coinvolgano o meno l'addestramento avversariale!)
e sarà una dipendenza in molte delle nostre prossime release di codice. Alcuni progetti che
utilizzano la libreria includono:
Codice per "Learning Perceptually-Aligned Representations via Adversarial Robustness" <https://github.com/MadryLab/robust_representations>_ (https://arxiv.org/abs/1906.00945)Codice per "Image Synthesis with a Single (Robust) Classifier" <https://github.com/MadryLab/robustness_applications>_ (https://arxiv.org/abs/1906.09453)Codice per "Do Adversarially Robust ImageNet Models Transfer Better?" <https://github.com/microsoft/robust-models-transfer>_ (https://arxiv.org/abs/2007.08489)Codice per "BREEDS: Benchmarks for Subpopulation Shift" <https://github.com/MadryLab/BREEDS-Benchmarks>_ (https://arxiv.org/abs/2008.04859)Codice per "Certified Patch Robustness via Smoothed Vision Transformers." <https://github.com/MadryLab/smoothed-vit>_ (https://arxiv.org/abs/2110.07719)Codice per "Unadversarial Examples: Designing Objects for Robust Vision." <https://github.com/microsoft/unadversarial>_ (https://arxiv.org/abs/2012.12235)Mostriamo come usare la libreria in una serie di walkthrough e nel nostro riferimento API. Le funzionalità offerte dalla libreria includono:
interfaccia CLI <https://robustness.readthedocs.io/en/latest/example_usage/cli_usage.html>. La libreria offre anche supporto per l'aggiunta di
dataset personalizzati <https://robustness.readthedocs.io/en/latest/example_usage/training_lib_part_2.html#training-on-custom-datasets> e architetture di modelli <https://robustness.readthedocs.io/en/latest/example_usage/training_lib_part_2.html#training-with-custom-architectures>_... code-block:: bash
python -m robustness.main --dataset cifar --data /path/to/cifar
--adv-train 0 --arch resnet18 --out-dir /logs/checkpoints/dir/
manipolazione dell'input <https://robustness.readthedocs.io/en/latest/example_usage/input_space_manipulation.html>_ utilizzando modelli robusti (o standard)---questo include la creazione di esempi avversariali, l'inversione delle rappresentazioni,
la visualizzazione delle feature, ecc. La libreria offre una varietà di opzioni
di ottimizzazione (ad es. scelta tra gradienti reali/stimati, base di Fourier/pixel,
funzioni di loss personalizzate, ecc.) ed è facilmente estendibile... code-block:: python
import torch as ch from robustness.datasets import CIFAR from robustness.model_utils import make_and_restore_model
ds = CIFAR('/path/to/cifar') model, _ = make_and_restore_model(arch='resnet50', dataset=ds, resume_path='/path/to/model', state_dict_path='model') model.eval() attack_kwargs = { 'constraint': 'inf', # L-inf PGD 'eps': 0.05, # Epsilon constraint (L-inf norm) 'step_size': 0.01, # Learning rate for PGD 'iterations': 100, # Number of PGD steps 'targeted': True # Targeted attack 'custom_loss': None # Use default cross-entropy loss }
_, test_loader = ds.make_loaders(workers=0, batch_size=10) im, label = next(iter(test_loader)) target_label = (label + ch.randint_like(label, high=9)) % 10 adv_out, adv_im = model(im, target_label, make_adv, **attack_kwargs)
robustness come pacchetto, che consente un facile addestramento di
reti neurali con supporto per funzioni di loss personalizzate, logging, caricamento dei dati
e altro ancora! Una buona introduzione si trova nella nostra guida in due parti
(Parte 1 <https://robustness.readthedocs.io/en/latest/example_usage/training_lib_part_1.html>,
Parte 2 <https://robustness.readthedocs.io/en/latest/example_usage/training_lib_part_2.html>)... code-block:: python
from robustness import model_utils, datasets, train, defaults from robustness.datasets import CIFAR
from cox.utils import Parameters import cox.store
ds = CIFAR('/path/to/cifar') m, _ = model_utils.make_and_restore_model(arch='resnet50', dataset=ds) train_loader, val_loader = ds.make_loaders(batch_size=128, workers=8)
out_store = cox.store.Store(OUT_DIR)
train_kwargs = { 'out_dir': "train_out", 'adv_train': 1, 'constraint': '2', 'eps': 0.5, 'attack_lr': 1.5, 'attack_steps': 20 } train_args = Parameters(train_kwargs)
train_args = defaults.check_and_fill_args(train_args, defaults.TRAINING_ARGS, CIFAR) train_args = defaults.check_and_fill_args(train_args, defaults.PGD_ARGS, CIFAR)
train.train_model(train_args, m, (train_loader, val_loader), store=out_store)
Nota: robustness richiede che PyTorch sia installato con supporto CUDA.
Oltre al codice di addestramento, rilasciamo una serie di modelli pre-addestrati per diversi dataset, norme e valori di ε-train. Questo elenco verrà aggiornato man mano che rilasciamo modelli nuovi o migliorati. Se utilizzi questi modelli nella tua ricerca, ti preghiamo di citare questa libreria (vedi la voce bibtex di seguito).
Per ogni combinazione (modello, ε-test) valutiamo PGD a 20 passi e a 100 passi con un passo di 2.5 * ε-test / num_steps. Poiché queste due accuratezze sono abbastanza vicine tra loro, non consideriamo ulteriori passi di PGD. Per ogni valore di ε-test, evidenziamo in grassetto la migliore accuratezza robusta ottenuta sui diversi ε-train.
Nota #1: Non abbiamo eseguito alcuna ottimizzazione degli iperparametri e abbiamo semplicemente usato gli stessi iperparametri dell'addestramento standard. È probabile che esplorare diversi iperparametri di addestramento aumenti queste accuratezze robuste di alcuni punti percentuali.
Nota #2: I file checkpoint PyTorch (.pt) qui sotto sono stati salvati con le seguenti versioni di PyTorch e Dill:
.. code-block::
torch==1.1.0 dill==0.2.9
CIFAR10 norma L2 (ResNet50):
ε = 0.0 <https://www.dropbox.com/s/yhpp4yws7sgi6lj/cifar_nat.pt?dl=0>_ (addestramento standard)ε = 0.25 <https://www.dropbox.com/s/2qsp7pt6t7uo71w/cifar_l2_0_25.pt?dl=0>_ε = 0.5 <https://www.dropbox.com/s/1zazwjfzee7c8i4/cifar_l2_0_5.pt?dl=0>_ε = 1.0 <https://www.dropbox.com/s/s2x7thisiqxz095/cifar_l2_1_0.pt?dl=0>_+--------------+----------------+-----------------+---------------------+---------------------+ | Accuratezza robusta CIFAR10 L2 | +--------------+----------------+-----------------+---------------------+---------------------+ | | ε-train | +--------------+----------------+-----------------+---------------------+---------------------+ | ε-test | 0.0 | 0.25 | 0.5 | 1.0 | +==============+================+=================+=====================+=====================+ | 0.0 | 95.25% / - | 92.77% / - | 90.83% / - | 81.62% / - | +--------------+----------------+-----------------+---------------------+---------------------+ | 0.25 | 8.66% / 7.34% | 81.21% / 81.19% | 82.34% / 82.31% | 75.53% / 75.53% | +--------------+----------------+-----------------+---------------------+---------------------+ | 0.5 | 0.28% / 0.14% | 62.30% / 62.13% | 70.17% / 70.11% | 68.63% / 68.61% | +--------------+----------------+-----------------+---------------------+---------------------+ | 1.0 | 0.00% / 0.00% | 21.18% / 20.66% | 40.47% / 40.22% | 52.72% / 52.61% | +--------------+----------------+-----------------+---------------------+---------------------+ | 2.0 | 0.00% / 0.00% | 0.58% / 0.46% | 5.23% / 4.97% | 18.59% / 18.05% | +--------------+----------------+-----------------+---------------------+---------------------+
CIFAR10 norma Linf (ResNet50):
ε = 8/255 <https://www.dropbox.com/s/c9qlt1lbdnu9tlo/cifar_linf_8.pt?dl=0>_+--------------+-----------------+---------------------+ | Accuratezza robusta CIFAR10 Linf | +--------------+-----------------+---------------------+ | | ε-train | +--------------+-----------------+---------------------+ | ε-test | 0 / 255 | 8 / 255 | +==============+=================+=====================+ | 0 / 255 | 95.25% / - | 87.03% / - | +--------------+-----------------+---------------------+ | 8 / 255 | 0.00% / 0.00% | 53.49% / 53.29% | +--------------+-----------------+---------------------+ | 16 / 255 | 0.00% / 0.00% | 18.13% / 17.62% | +--------------+-----------------+---------------------+
ImageNet norma L2 (ResNet50):
ε = 3.0 <https://www.dropbox.com/s/knf4uimlqsi1yz8/imagenet_l2_3_0.pt?dl=0>_+--------------+-----------------+---------------------+---------------------+ | Accuratezza robusta ImageNet L2 | +--------------+-----------------+---------------------+---------------------+ | | ε-train | +--------------+-----------------+---------------------+---------------------+ | ε-test | 0.0 | 3.0 | +==============+=================+=====================+ | 0.0 | 76.13% / - | 57.90% / - | +--------------+-----------------+---------------------+---------------------+ | 0.5 | 3.35% / 2.98% | 54.42% / 54.42% | +--------------+-----------------+---------------------+---------------------+ | 1.0 | 0.44% / 0.37% | 50.67% / 50.67% | +--------------+-----------------+---------------------+---------------------+ | 2.0 | 0.16% / 0.14% | 43.04% / 43.02% | +--------------+-----------------+---------------------+---------------------+ | 3.0 | 0.13% / 0.12% | 35.16% / 35.09% | +--------------+-----------------+---------------------+---------------------+
ImageNet norma Linf (ResNet50):
ε = 4 / 255 <https://www.dropbox.com/s/axfuary2w1cnyrg/imagenet_linf_4.pt?dl=0>_ε = 8 / 255 <https://www.dropbox.com/s/yxn15a9zklz3s8q/imagenet_linf_8.pt?dl=0>_+--------------+-----------------+---------------------+---------------------+ | Accuratezza robusta ImageNet Linf | +--------------+-----------------+---------------------+---------------------+ | | ε-train | +--------------+-----------------+---------------------+---------------------+ | ε-test | 0.0 | 4 / 255 | 8 / 255 | +==============+=================+=====================+=====================+ | 0 / 255 | 76.13% / - | 62.42% / - | 47.91% / - | +--------------+-----------------+---------------------+---------------------+ | 4 / 255 | 0.04% / 0.03% | 33.58% / 33.38% | 33.06% / 33.03% | +--------------+-----------------+---------------------+---------------------+ | 8 / 255 | 0.01% / 0.01% | 13.13% / 12.73% | 19.63% / 19.52% | +--------------+-----------------+---------------------+---------------------+ | 16 / 255 | 0.01% / 0.01% | 1.53% / 1.37% | 5.00% / 4.82% | +--------------+-----------------+---------------------+---------------------+
Se utilizzi questa libreria nella tua ricerca, citala come segue:
.. code-block:: bibtex
@misc{robustness, title={Robustness (Python Library)}, author={Logan Engstrom and Andrew Ilyas and Hadi Salman and Shibani Santurkar and Dimitris Tsipras}, year={2019}, url={https://github.com/MadryLab/robustness} }
(Hai usato il pacchetto e lo hai trovato utile? Facci sapere!).
Andrew Ilyas <https://twitter.com/andrew_ilyas>_Logan Engstrom <https://twitter.com/logan_engstrom>_Shibani Santurkar <https://twitter.com/ShibaniSan>_Dimitris Tsipras <https://twitter.com/tsiprasd>_Hadi Salman <https://twitter.com/hadisalmanX>_Contributori/Commiters '''''''''''''''''''''''
qui <https://github.com/MadryLab/robustness/pulse>_