This repo contains code for the NeurIPS 2020 paper "Adversarial Example Games"
If this repository is helpful in your research, please consider citing us.
@article{bose2020adversarial,
title={Adversarial Example Games},
author={Bose, Avishek Joey and Gidel, Gauthier and Berard, Hugo and Cianflone, Andre and Vincent, Pascal and Lacoste-Julien, Simon and Hamilton, William L},
journal={Thirty-fourth Conference on Neural Information Processing Systems},
year={2020}
}
The current codebase is Research code and is subject to change.
Assuming you are in a clean Python 3.6 environment, to install all required packages and download required data, simply run:
bash setup.sh
Requirements. Checkout the environment.yml file for a comprehensive list taken from pip freeze.
wandb (latest version) \
pytorch==1.4 \
torchvision \
cudatoolkit==10.1\
PIL \
numpy \
json \
wandb \
tqdm \
matplotlib \
image \
ipdb \
[advertorch](https://github.com/BorealisAI/advertorch) \
Please refer to the attacks sub-directory to find example commands while the defenses subdirectory contains various defenses.
To reproduce our results and to ensure that the commands provided in other README's please ensure that you download all our models
(or re-train them) and each following subdirectory has the following structure. Some of this will be automated when you run the setup scripts.
Each of the following trees are subdirectories with trained models. You may have to either copy them or use mkdir
command to create these.
.
├── cifar-10-batches-py
│ ├── batches.meta
│ ├── data_batch_1
│ ├── data_batch_2
│ ├── data_batch_3
│ ├── data_batch_4
│ ├── data_batch_5
│ ├── readme.html
│ └── test_batch
├── cifar-10-python.tar.gz
├── cifar-split
│ ├── split_6
│ │ └── data.pt
│ └── split_7
│ └── data.pt
└── MNIST
├── processed
│ ├── test.pt
│ └── training.pt
├── raw
│ ├── t10k-images-idx3-ubyte
│ ├── t10k-images-idx3-ubyte.gz
│ ├── t10k-labels-idx1-ubyte
│ ├── t10k-labels-idx1-ubyte.gz
│ ├── train-images-idx3-ubyte
│ ├── train-images-idx3-ubyte.gz
│ ├── train-labels-idx1-ubyte
│ └── train-labels-idx1-ubyte.gz
└── split_7
└── data.pt
.
├── cifar
│ ├── res18
│ │ ├── split_0
│ │ │ └── model_0.pt
│ │ ├── split_1
│ │ │ └── model_0.pt
│ │ ├── split_2
│ │ │ └── model_0.pt
│ │ ├── split_3
│ │ │ └── model_0.pt
│ │ ├── split_4
│ │ │ └── model_0.pt
│ │ └── split_5
│ │ └── model_0.pt
│ ├── VGG16
│ │ ├── model_0.pt
│ │ ├── split_0
│ │ │ └── model_0.pt
│ │ ├── split_1
│ │ │ └── model_0.pt
│ │ ├── split_2
│ │ │ └── model_0.pt
│ │ ├── split_3
│ │ │ └── model_0.pt
│ │ ├── split_4
│ │ │ └── model_0.pt
│ │ └── split_5
│ │ └── model_0.pt
│ └── wide_resnet
│ ├── split_0
│ │ └── model_0.pt
│ ├── split_1
│ │ └── model_0.pt
│ ├── split_2
│ │ └── model_0.pt
│ ├── split_3
│ │ └── model_0.pt
│ ├── split_4
│ │ └── model_0.pt
│ └── split_5
│ └── model_0.pt
├── mnist
│ ├── natural
│ │ ├── split_0
│ │ │ └── model_0.pt
│ │ ├── split_1
│ │ │ └── model_0.pt
│ │ ├── split_2
│ │ │ └── model_0.pt
│ │ ├── split_3
│ │ │ └── model_0.pt
│ │ ├── split_4
│ │ │ └── model_0.pt
│ │ ├── split_5
│ │ │ └── model_0.pt
│ │ └── split_6
│ │ └── model_0.pt
We have supressed the repeated instances of models but the downloaded models will contain multiple trained versions of each.
├── cifar
│ ├── dense121
│ │ ├── model_0.pt
│ ├── ensemble_adv_trained
│ │ ├── dense121_ens
│ │ │ ├── 0.pt
│ │ ├── dense121_ens.pt
│ │ ├── googlenet_ens
│ │ │ ├── 0.pt
│ │ ├── googlenet_ens.pt
│ │ ├── res18_ens
│ │ │ ├── 0.pt
│ │ ├── wide_resnet_ens
│ │ │ ├── 0.pt
│ │ └── wide_resnet_ens.pt
│ ├── googlenet
│ │ ├── model_0.pt
│ ├── lenet
│ │ ├── model_0.pt
│ ├── res18
│ │ ├── model_0.pt
│ ├── VGG16
│ │ ├── model_0.pt
│ └── wide_resnet
│ ├── model_0.pt
├── mnist
│ ├── adv_trained
│ │ ├── model_0.pt
│ │ └── model_1.pt
│ ├── ensemble_adv_trained
│ │ ├── mnist
│ │ │ ├── modelA_adv.pt
│ │ │ ├── modelA_ens.pt
│ │ │ ├── modelA.pt
│ │ │ ├── modelB_ens.pt
│ │ │ ├── modelB.pt
│ │ │ ├── modelC_ens.pt
│ │ │ ├── modelC.pt
│ │ │ ├── modelD_ens.pt
│ │ │ └── modelD.pt
│ │ ├── modelA_adv.pt
│ │ ├── modelA.pt
│ │ ├── modelB_ens.pt
│ │ ├── modelB.pt
│ │ ├── modelC_ens.pt
│ │ ├── modelC.pt
│ │ ├── modelD_ens.pt
│ │ └── modelD.pt
│ └── natural
│ ├── model_0.pt
├── mnist_cnn_0.pt
.
├── cifar
│ ├── adv_trained
│ │ ├── checkpoint
│ │ ├── checkpoint-70000.data-00000-of-00001
│ │ ├── checkpoint-70000.index
│ │ ├── checkpoint-70000.meta
│ │ └── config.json
│ ├── natural
│ │ ├── checkpoint
│ │ ├── checkpoint-70000.data-00000-of-00001
│ │ ├── checkpoint-70000.index
│ │ ├── checkpoint-70000.meta
│ │ └── config.json
│ ├── naturally_trained
│ │ ├── checkpoint
│ │ ├── checkpoint-70000.data-00000-of-00001
│ │ ├── checkpoint-70000.index
│ │ ├── checkpoint-70000.meta
│ │ └── config.json
│ └── secret
│ ├── checkpoint
│ ├── checkpoint-70000.data-00000-of-00001
│ ├── checkpoint-70000.index
│ ├── checkpoint-70000.meta
│ └── config.json
└── mnist
├── adv_trained
│ ├── checkpoint
│ ├── checkpoint-99900.data-00000-of-00001
│ ├── checkpoint-99900.index
│ ├── checkpoint-99900.meta
│ ├── config.json
│ ├── mnist_lenet5_advtrained.pt
│ └── mnist_test_lenet5_advtrained.pt
├── natural
│ ├── checkpoint
│ ├── checkpoint-24900.data-00000-of-00001
│ ├── checkpoint-24900.index
│ ├── checkpoint-24900.meta
│ ├── config.json
│ └── mnist_lenet5_clntrained.pt
└── secret
├── checkpoint
├── checkpoint-99900.data-00000-of-00001
├── checkpoint-99900.index
├── checkpoint-99900.meta
└── config.json
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Please make sure to update tests as appropriate.