【后门攻击】BadNets代码复现(pytorch)

目录

Badnets简介

下载

安装缺少的库

下载数据集(MNIST和CIFAR10)

执行后门攻击

(1)使用MINIST数据集训练

(2)使用CIFAR10数据集训练

训练结果

其他参数

项目目录

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	# 需要加载的一些库
  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值