python - 对cleverhans FastGradientMethod (FGM)、对抗性图像生成的怀疑
问题描述
我有一个 keras 模型(带有最终 softmax 的 CNN),它是一个 RGB 图像分类器。模型的输出是输入图像的 5 个可能类别(单热编码)。我正在尝试使用Cleverhans ( tensorflow library ) 为我的 keras 模型生成对抗性图像。
生成一个对抗性图像的代码的简化版本如下:
# model is the CNN keras model
wrap = KerasModelWrapper(model)
fgsm = FastGradientMethod(wrap, sess=session)
fgsm_params = {'eps': 16. / 256,
'clip_min': 0.,
'clip_max': 1.
}
x = tf.placeholder(tf.float32, shape=(None, img_rows, img_cols,
nchannels))
adv_x = fgsm.generate(x, **fgsm_params)
# original image is a tensor containing only one RGB image, shape=(1,48,48,3)
adv_image = adv_x.eval(session=session, feed_dict={x: original_image})
第 1 章,每股收益
据我了解,“eps” FGM 参数是输入变化步骤(一个图像值/像素的最小变化)。
我观察到最终结果受eps的影响很大,有时我需要高eps才能获得有效的对抗性图像,该图像相对于原始图像有效地改变了类别标签。
在低eps的情况下,有时 FGM 无法获得有效的对抗性图像,即具有图像 O,标签为 l O FGM 无法产生对抗性图像 O',具有 l O' != l O,例如,对于 l O = [0,0 ,1,0,0] 我们仍然得到 l O' = [0,0,1,0,0],未能生成具有不同标签的对抗性图像。
问题(很抱歉,这个问题需要一系列问题):
- FGM 是否总能找到有效的对抗性图像?即,女性生殖器切割失败是否正常?
- 有没有办法获得生成的对抗图像的估计质量(不使用模型进行预测)?
- 为什么 eps step 的值如此重要?
- 最重要的是:有没有办法告诉 FGM 更加努力地搜索对抗性图像(例如,更多步骤)?
第 2 章,y,y_target
我还试验了y和y_target参数。你能解释一下参数是什么'y'
吗'y_target'
?
我认为'y_target'
我们想要生成一个针对特定类别的对抗性图像。例如,我认为y_target = [[0,1,0,0,0]]
应该feed_dict
强制生成一个对抗性图像,该图像被模型中的第 2 类分类。
- 我对吗?..或者
- 我想念什么吗?
Ps:我的问题是设置 y_target 无法产生对抗性图像。
请给我一些提示.. ;-) 问候
解决方案
我从github上的Cleverhans开发人员那里得到了答案,我在这里引用他们的答案:
第1章:
FGSM(与任何攻击一样)不能保证找到被模型错误分类的对抗性图像,因为它在解决定义对抗性示例的优化问题时会做出近似。
由于各种原因,攻击可能无法找到对抗性图像,一个常见原因是梯度掩蔽。您可以在这篇博文和这篇论文以及这篇论文中了解它。
eps步骤很重要,因为它是扰动的大小。攻击首先计算扰动图像的方向(使用模型的梯度),然后在该方向上采取大小为eps的步长。因此,eps大致对应于人们对攻击“力量”的直觉看法。
您可以在中找到 FGSM 的多步变体BasicIterativeMethod
第2章:
y用于在无目标攻击的情况下指定标签(任何错误的类都被视为对手成功),而y_target用于在有针对性的攻击情况下指定目标类(只有当模型做出所选类别中的特定错误分类)。
通常情况下,有针对性的攻击比无针对性的攻击需要更多的扰动(即,在 FGSM 情况下,更高的eps值)。
推荐阅读
- html - 如何将 2 个类设置为
- python - 如何将系统托盘添加到我的 tkinter 应用程序并避免使用大量 pywin32 代码(仅在 Windows 上)?
- python - Curve_Fit 函数似乎不起作用。我有相同长度的数组中的 xdata 和 ydata,但曲线拟合会产生错误。我的错误是什么?
- ios - iOS Spin UIImageView 在随机位置减速运动
- laravel - 参数 1 必须是字符串类型或 null,给定对象
- python-3.x - 从 .pb 文件中查找输入和输出张量
- javascript - 在特定网页上同步两个可编辑文本框的方法?
- html - 如何使onmouseover图像大小相对于onmouseout img?
- java - 将变量传递给不同的方法?
- database - 如何将多个“输入字段”添加为对象或数组