NOTE: TrojanZoo requires
python>=3.11
,pytorch>=2.0.0
andtorchvision>=0.15.0
, which must be installed manually. Recommend to useconda
to install.
This is the code implementation (pytorch) for our paper in EuroS&P 2022:
TrojanZoo: Towards Unified, Holistic, and Practical Evaluation of Neural Backdoors
TrojanZoo provides a universal pytorch platform to conduct security researches (especially backdoor attacks/defenses) of image classification in deep learning. It is composed of two packages: trojanzoo
and trojanvision
. trojanzoo
contains abstract classes and utilities, while trojanvision
contains abstract and concrete ones for image classification task.
Note: This repository is also maintained to cover the implementation of
our kdd 2020 paper AdvMind: Inferring Adversary Intent of Black-Box Attacks
and ccs 2020 paper A Tale of Evil Twins: Adversarial Inputs versus Poisoned Models
We have documentation available at https://ain-soph.github.io/trojanzoo.
Note: enable with
--color
for color and--verbose
for verbose.
To open an interactive window with color, usepython - --color
trojanzoo
and trojanvision
provides API to generate raw pytorch instances, which makes it flexible to work with native pytorch
and other 3rd party libraries.
trojanzoo.datasets.DataSet
can generatetorch.utils.data.Dataset
andtorch.utils.data.DataLoader
trojanzoo.models.Model
attribute_model
istorch.nn.Module
, attributemodel
istorch.nn.DataParallel
Specifically,trojanvision.datasets.ImageSet
can generatetorchvision.datasets.VisionDataset
,trojanvision.datasets.ImageFolder
can generatetorchvision.datasets.ImageFolder
--amp
for training-h
or --help
)summary()
for each module.pip install trojanzoo
pip install --upgrade git+https://github.com/ain-soph/trojanzoo.git
git clone https://github.com/ain-soph/trojanzoo
pip install -e trojanzoo
This could install the github repo as a package but avoid copying files to
site_packages
, so that you can easily keep it updated by doinggit pull
.
docker pull local0state/trojanzoo
or docker pull ghcr.io/ain-soph/trojanzoo
You can use the provided example scripts to reproduce the evaluation results in our paper.
Note: The program won't save results without
--save
- Train a model:
e.g.ResNet18
onCIFAR10
with 95% Accpython ./examples/train.py --color --verbose 1 --dataset cifar10 --model resnet18_comp --lr_scheduler --cutout --grad_clip 5.0 --save
Test backdoor attack (e.g., BadNet):
e.g. BadNet
with ResNet18
on CIFAR10
python ./examples/backdoor_attack.py --color --verbose 1 --pretrained --validate_interval 1 --dataset cifar10 --model resnet18_comp --attack badnet --mark_random_init --epochs 50 --lr 0.01 --save
Test backdoor defense (e.g., Neural Cleanse):
e.g. Neural Cleanse
against BadNet
python ./examples/backdoor_defense.py --color --verbose 1 --pretrained --validate_interval 1 --dataset cifar10 --model resnet18_comp --attack badnet --defense neural_cleanse --mark_random_init --epochs 50 --lr 0.01
python ./examples/backdoor_attack.py --color --verbose 1 --pretrained --validate_interval 1 --dataset cifar10 --model resnet18_comp --attack imc --mark_random_init --epochs 50 --lr 0.01 --save
(with attack adaptive
and model adaptive
)
python ./examples/adv_defense.py --color --verbose 1 --pretrained --validate_interval 1 --dataset cifar10 --model resnet18_comp --attack pgd --defense advmind --attack_adapt --defense_adapt
All arguments in the parser are able to set default values in configuration files.
If argument values are not set in the config files, we will use the default values of __init__()
Parameters Config: (priority ascend order)
The higher priority config will override lower priority ones.
Within each priority channel,trojanvision
configs will overwritetrojanzoo
- Package Default:
/trojanzoo/configs/
,/trojanvision/configs/
These are package default settings. Please don't modify them.
You can use this as a template to set other configs.- User Default:
~/.trojanzoo/configs/trojanzoo/
,~/.trojanzoo/configs/trojanvision/
- Workspace Default:
/configs/trojanzoo/
,/configs/trojanvision/
- Custom Config:
--config [config location]
- CMD parameters:
--[parameter] [value]
Modify them in corresponding config files and command-line arguments.
Dataset:
--data_dir
(./data/data
)
Model:--model_dir
(./data/model
)
Attack:--attack_dir
(./data/attack
)
Defense:--defense_dir
(./data/defense
)
--verbose 1
--color
--tqdm
--help
--output [number]
CIFAR10
, ResNet
, IMC
, Neural Cleanse
)
It's necessary to subclass our base class. (
Dataset
,Model
,Attack
,Defense
)
Optional base classes depending on your use case: (ImageSet
,ImageFolder
,ImageModel
)
trojanvision
Example:
trojanvision.attacks.class_dict[attack_name]=AttackClass
{attack_name}.yml
(.json
) in the config directory.TrojanZoo has a GPL-style license, as found in the LICENSE file.
@InProceedings{pang:2022:eurosp,
title={TrojanZoo: Towards Unified, Holistic, and Practical Evaluation of Neural Backdoors},
author={Ren Pang and Zheng Zhang and Xiangshan Gao and Zhaohan Xi and Shouling Ji and Peng Cheng and Ting Wang},
year={2022},
booktitle={Proceedings of IEEE European Symposium on Security and Privacy (Euro S\&P)},
}
@inproceedings{pang:2020:ccs,
title = "{A Tale of Evil Twins: Adversarial Inputs versus Poisoned Models}",
author = {Ren Pang and Hua Shen and Xinyang Zhang and Shouling Ji and Yevgeniy Vorobeychik and Xiapu Luo and Alex Liu and Ting Wang},
year = {2020},
booktitle = {Proceedings of ACM SAC Conference on Computer and Communications (CCS)},
}
@inproceedings{pang:2020:kdd,
title = "{AdvMind: Inferring Adversary Intent of Black-Box Attacks}",
author = {Ren Pang and Xinyang Zhang and Shouling Ji and Xiapu Luo and Ting Wang},
year = {2020},
booktitle = {Proceedings of ACM International Conference on Knowledge Discovery and Data Mining (KDD)},
}