Classify文件夹内实现了一个分类识别的神经网络,训练完成后得到权重文件才可进行FGSM攻击。
attack文件夹中有FGSM的实现,可运行代码查看效果
下表为使用FGSM对抗攻击后的前后对比效果。
原始图片效果 | 攻击后的图片效果 |
---|---|
除了有FGSM的实现,代码还实现了iFGSM,即多次迭代FGSM。
下表为两种方法的对比效果,此处的条件为$\epsilon_{\mathrm{FGSM}} = i*\epsilon_{\mathrm{iFGSM}}$,$i$为迭代次数。
FGSM | iFGSM(迭代10次) |
---|---|
Target is wrench | Targeted is dragonfly |
---|---|
$$ x^{(0)}=x
\x^{(i+1)}=\mathrm{Clip}{x,\epsilon}\left(x^{(i)}+\epsilon\cdot\mathrm{sign}(\nabla{x}J(\theta,x^{(i)},y))\right) $$
对于无目标FGSM,我们的想法是:
而对于有目标的FGSM,我们的想法则是:
其中,$x$ 为原始图像,$x^{\prime}$ 为对抗攻击后的图像,$y$ 为真实的标签,$y^{\prime}$ 为对抗攻击中的目标标签。
所以它的实现公式为: $$ x^{\prime}=x{\color{red}-}\epsilon\cdot\mathrm{sign}(\nabla_{x}J(\theta,x,y^{\prime})) $$ 此处与FGSM相比只有微小的区别。
https://pytorch.org/tutorials/beginner/blitz/cifar10_tutorial.html