假设我使用Cleverhans加载MNIST数据集,并用FGM攻击一张图像。通过Cleverhans的MNIST数据集加载的任何图像,其像素值已经被限制在[0, 1]之间,攻击后的图像也是如此(假设我将图像剪裁到[0, 1])。在这种情况下,如果我想查看攻击效果,我只需将所有像素值乘以255并创建对抗图像即可。
在这种情况下,原始MNIST图像的像素值在[0, 255]之间,但通过将所有值除以255后,修改为在[0, 1]之间。为了恢复原始的“图像属性”,我只需再次乘以255即可。
当这种预处理步骤(在MNIST的情况下,是除以255)更加复杂时,有没有办法(在Cleverhans中,或者一般情况下)提取原始图像属性?例如,我在考虑VGG16,其中ImageNet图像在保持纵横比的情况下被调整大小,而将图像恢复到原始大小的过程是复杂且对每张图像都是独一无二的。
是否有可能将这种预处理步骤添加到模型中,以直接在原始图像上获取噪声?我认为这可能行不通,因为并非所有预处理步骤都是可微分的?
这是否意味着,如果预处理步骤过于复杂,我就无法查看应用在原始图像上的噪声?
回答:
是的,如果您的管道使用了一个预处理阶段,并且该阶段是:
-
难以逆转的:基于(a)原始图像和(b)预处理空间中的扰动,将难以获得与原始领域中扰动图像对应的图像。
-
不可微分的:对于需要计算梯度的攻击,将无法在原始领域中计算扰动图像。
然而,您可以使用不直接计算梯度的攻击,如SPSA,直接在原始领域中操作,即使预处理阶段是不可微分的:https://github.com/tensorflow/cleverhans/blob/master/cleverhans/attacks/spsa.py