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演算法

%