9.4.3 在FoolBox中使用CW算法

9.4.3 在FoolBox中使用CW算法

9.4.3在FoolBox中使用CW算法

下面我们以ImageNet2012为例介绍如何在FoolBox中使用CW算法,代码路径为:

https://github.com/duoergun0729/adversarial_examples/blob/master/code/9-foolbox-imagenet-cw.ipynb

首先加载需要使用的Python库,使用的深度学习框架为Keras+TensorFlow。

importfoolbox

importkeras

importnumpyasnp

fromkeras.applications.resnet50importResNet50

实例化基于ImageNet训练的ResNet50模型,其中图像数据每个像素的取值范围为0到255,迭代攻击过程中超过这个范围的值需要进行截断处理。

kmodel=ResNet50(weights='imagenet')

preprocessing=(np.array([104,116,123]),1)

fmodel=foolbox.models.KerasModel(kmodel,bounds=(0,255),

preprocessing=preprocessing)

加载FoolBox自带的测试图片和对应的标签,并对其进行预测,预测的标签为282。

#加载原始图片和对应的标签

image,label=foolbox.utils.imagenet_example()

#在Keras中,ResNet50使用BGR而不是默认的RGB

pred=fmodel.predictions(image[:,:,::-1])

print("label={}".format(np.argmax(pred)))

实例化CW的l2算法CarliniWagnerL2Attack,尝试进行无定向攻击(见图9-11),如果攻击失败会返回空,反之会返回生成的对抗样本。对抗样本的预测结果为281。

#无定向攻击

attack=foolbox.attacks.CarliniWagnerL2Attack(fmodel)

#在Keras中,ResNet50使用BGR而不是默认的RGB

adversarial=attack(image[:,:,::-1],label)

ifadversarialisNone:

print("Failtoadversarial")

else:

pred=fmodel.predictions(adversarial)

print("label={}".format(np.argmax(pred)))

图9-11在FoolBox中使用CW算法进行无定向攻击效果图

然后尝试进行定向攻击,定向攻击需要指定攻击目标的标签及其对应的最小概率。

fromfoolbox.criteriaimportTargetClassProbability

#定向攻击标签值为22

target=TargetClassProbability(22,p=0.5)

#定向攻击

attack=foolbox.attacks.CarliniWagnerL2Attack(fmodel,criterion=target)

#在Keras中,ResNet50使用BGR而不是默认的RGB

adversarial=attack(image[:,:,::-1],label)

ifadversarialisNone:

print("Failtoadversarial")

else:

pred=fmodel.predictions(adversarial)

print("label={}".format(np.argmax(pred)))

CW定向攻击成功,原模型识别为标签22。如图9-12所示,量化的扰动量l0为99%,l2为1%,其中修改的像素个数为150461,但是l2大小仅为0.026。与JSMA相比,定向攻击目标相同,CW的优势是l2小,JSMA的优势是l0小,事实上CW也支持l0算法,但是JSMA仅支持l0算法。

ImageSize150528Shape(1,224,224,3)

NoiseL_0norm:15046199%

NoiseL_2norm:0.025720290839672091%

NoiseL_infnorm:0.00074884295463562011%

图9-12在FoolBox中使用CW算法进行定向攻击效果图

上一章书籍页下一章

智能系统与技术丛书·AI安全之对抗样本入门

···
加入書架
上一章
首頁 其他 智能系统与技术丛书·AI安全之对抗样本入门
上一章下一章

9.4.3 在FoolBox中使用CW算法

%