目录
Badnets简介
论文名称:BadNets: Identifying Vulnerabilities in the Machine Learning Model Supply Chain
引入了深度学习中的第一个后门攻击。BadNets是可见攻击的代表,它开启了这个领域的时代。几乎所有的后续中毒攻击都是基于这种方法进行的。
下载
Badnets文章下载地址:https://browse.arxiv.org/pdf/1708.06733v2.pdf
源码下载地址:https://github.com/verazuo/badnets-pytorch
解压后用pycharm打开,设置pytorch解释器
安装缺少的库
先看看readme文件,提示安装一些东西
作者提供了requirments.txt 文件
(1)可以利用PyCharm自带的智能提示进行安装
(2)或者在终端利用pip install -r requirements.txt 指令进行安装
也可以加上豆瓣源镜像安装:pip install -i https://pypi.doubanio.com/simple/ -r requirements.txt
(如果报错,试试把梯子关了再安装)
两种安装方式都报错,我们根据报错信息手动进行安装
上面的报错信息提示找不到0.4.0版本的torchvision,将requirments.txt 文件中的第一行改为0.4.1版本
再在终端运行:pip install -i https://pypi.doubanio.com/simple/ -r requirements.txt
如果还有报错的话,把版本换成它提示的任意一个就行
显示successfully安装成功所有库
下载数据集(MNIST和CIFAR10)
看看readme文件的提示
在终端执行:python data_downloader.py
显示下载数据集
如果觉得下载太慢的话,可以到官网下载数据集
MNIST:MNIST handwritten digit database, Yann LeCun, Corinna Cortes and Chris Burges
进入MNIST数据集网站,下载4个数据集压缩包,不要解压(因为pytorch还会对数据集进行一些处理,而不是单纯的解压,所以直接手动解压是不行的)。
4个压缩包放在/data/MINIST/raw文件夹内,如下图所示:
然后下载CIFAR10数据集
CIFAR10:CIFAR-10 and CIFAR-100 datasets
进入CIFAR10数据集网站,下载python版本压缩包,放到/data目录下
在终端运行:python data_downloader.py
会将刚刚下载的数据集自动解压
/data目录下的文件如图所
执行后门攻击
完成上述步骤后,就可以跑代码了
(1)使用MINIST数据集训练
我们再看看readme文档的提示,显示需要运行main.py文件
找到main.py文件,右键run即可
一共要训练100轮,可以观察下每一轮的训练结果
对比一下第1轮和第13轮
loss表示损失值,实际输出与目标之间的差距
Acc(accuracy)表示准确率
ASR(Attack Success Rate)表示攻击成功率
(2)使用CIFAR10数据集训练
再看看readme文件,还可以指定数据集和触发器标签
在终端里执行这条命令:python main.py --dataset CIFAR10 --trigger_label=1
可以观察到每一轮的训练结果,下图是第0轮和第4轮的结果
训练结果
readme文件中显示预训练模型和结果放在了/checkpoints和/logs目录下
位置目录如图所示
可以使用--load_local来加载本地未训练的模型
其他参数
--dataset DATASET Which dataset to use (MNIST or CIFAR10, default: mnist)
--nb_classes NB_CLASSES
number of the classification types
--load_local train model or directly load model (default true, if you add this param, then load trained local model to evaluate the performance)
--loss LOSS Which loss function to use (mse or cross, default: mse)
--optimizer OPTIMIZER
Which optimizer to use (sgd or adam, default: sgd)
--epochs EPOCHS Number of epochs to train backdoor model, default: 100
--batch_size BATCH_SIZE
Batch size to split dataset, default: 64
--num_workers NUM_WORKERS
Batch size to split dataset, default: 64
--lr LR Learning rate of the model, default: 0.001
--download Do you want to download data ( default false, if you add this param, then download)
--data_path DATA_PATH
Place to load dataset (default: ./dataset/)
--device DEVICE device to use for training / testing (cpu, or cuda:1, default: cpu)
--poisoning_rate POISONING_RATE
poisoning portion (float, range from 0 to 1, default: 0.1)
--trigger_label TRIGGER_LABEL
The NO. of trigger label (int, range from 0 to 10, default: 0)
--trigger_path TRIGGER_PATH
Trigger Path (default: ./triggers/trigger_white.png)
--trigger_size TRIGGER_SIZE
Trigger Size (int, default: 5)
在main.py文件中可以对上面这些参数进行修改
项目目录
├── checkpoints/ # 保存模型
├── dataset/ # 存储用于处理数据的定义和函数
├── data/ # 保存数据集
├── logs/ # 保存运行的结果记录
├── models/ # 存储模型的定义和函数
├── LICENSE
├── README.md
├── main.py # badnets的主文件
├── deeplearning.py # 模型训练方法
└── requirements.txt # 需要加载的一些库