对抗机器学习 —— foolbox使用
foolbox是另外一个对抗机器学习库。安装方法:pip3 install foolbox测试代码:使用VGG19 预训练模型,攻击猫图片。__author__ = 'dk'import tensorflow as tfimport matplotlib.pyplot as pltfrom tensorflow.contrib.slim.nets import vggimpor...
·
foolbox是另外一个对抗机器学习库。
安装方法:
pip3 install foolbox
测试代码:
使用VGG19 预训练模型,攻击猫图片。
当然,得去github上下载VGG19的预训练模型库。
http://download.tensorflow.org/models/vgg_19_2016_08_28.tar.gz
__author__ = 'dk'
import tensorflow as tf
import matplotlib.pyplot as plt
from tensorflow.contrib.slim.nets import vgg
import numpy as np
import foolbox
images = tf.placeholder(tf.float32, shape=(None, 224, 224, 3))
preprocessed = images - [123.68, 116.78, 103.94]
logits, _ = vgg.vgg_19(preprocessed, is_training=False)
restorer = tf.train.Saver(tf.trainable_variables())
image, label = foolbox.utils.imagenet_example()
print('label',label)
with foolbox.models.TensorFlowModel(images, logits, (0, 255)) as model:
restorer.restore(model.session, 'C:\\Users\\dk\\Downloads\\vgg_19_2016_08_28\\vgg_19.ckpt')
predict_label = np.argmax(model.predictions(image))
print('predict label',predict_label)
fmodel = model
# apply attack on source image
attack = foolbox.attacks.FGSM(fmodel)
adversarial = attack(image, 281)
difference = (adversarial - image)%256
adv_label = np.argmax(fmodel.predictions(adversarial))
print('adversarial class', adv_label)
plt.subplot(1,3,1)
plt.title('origin predict label %s'%281)
plt.imshow(np.asarray(image,dtype=np.int))
plt.subplot(1,3,2)
plt.title('adv image label %s'%adv_label)
plt.imshow(np.asarray(adversarial,dtype=np.int))
plt.subplot(1,3,3)
plt.title('difference image')
plt.imshow(np.asarray(difference,dtype= np.int))
plt.show()
值得注意的是,foolbox给example.png的lable是282,但是VGG 19识别出来却是281,这使得攻击模型直接就不运行了,因为已经分类失败了。
于是在输入到attack中把label改成 281就可以了。
攻击效果:
原图的label 是281,攻击样本的label是278,肉眼是看不出adv与原图的差异的。difference差异倒是蛮大的。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)