gpt4 book ai didi

image - 在同一图像张量上两次使用 torchvision.utils.save_image 会使第二次保存无效。这是怎么回事?

转载 作者:行者123 更新时间:2023-12-05 03:56:49 55 4
gpt4 key购买 nike

(此处详细介绍了快速梯度符号攻击方法:https://pytorch.org/tutorials/beginner/fgsm_tutorial.html)

我有一个训练有素的分类器,准确率 >90%,我用它来创建这些对抗性示例,然后我使用 torchvision.utils.save_image 将图像保存到不同的文件夹。

文件夹层级如下:

  • FOLDER_1
    • original_image.jpg (1)
    • perturbed_image.jpg (2)
  • FOLDER_2
    • perturbed_image.jpg (3)

这里的(2)(3)是同一个图像张量,是原始图像张量和一个扰动图像张量之和---我只是想要保存两次愚弄分类器的图像。我发现 (1)(2) 打印正常,但 (3) 只打印扰动图像张量(它减去原始图像张量!)。因此,当我打开 (2) 时,我看到我的原始图片顶部有所有噪点(来自 FGSM 攻击的随机 RGB 像素切换),但是当我打开 (3) 我看到一个空白的 Canvas ,只有那些随机的 RGB 像素开关。

由于我两次打印相同的变量 (perturbed_data),我不明白为什么 torchvision.utils.save_image 选择在第二次减去扰动图像张量时间我调用它。我所描述的代码如下,data 是原始图像张量。

epsilon = 0.5
# Collect datagrad
data_grad = data.grad.data

# Call FGSM Attack
perturbed_data = fgsm_attack(data, epsilon, data_grad)

# Re-classify the perturbed image
perturbed_output = model(perturbed_data)
perturbed_output = torch.sigmoid(perturbed_output)
perturbed_output = perturbed_output.max(1, keepdim=True)[1]
max_pred = perturbed_output.item()
final_pred = torch.tensor([0, 0]).to(device)
final_pred[max_pred] = 1

# Store all original and perturbed images, regardless of model prediction
torchvision.utils.save_image(data, "./FOLDER_1/original.jpg")
torchvision.utils.save_image(perturbed_data, "./FOLDER_1/perturbed_image.jpg")

# If the perturbed image fools our classifier, put a copy of it in FOLDER_2
if !torch.all(torch.eq(final_pred, target)):
torchvision.utils.save_image(perturbed_data, "./FOLDER_2/perturbed_image.jpg")

我几乎可以肯定这是一个 torchvision 错误,但我想在提交错误报告之前我会在这里询问。也许有人看到了我没有看到的东西。我还附上了 (2)(3) 的示例以供可视化。第一张图像的格式正确,但第二张图像打印时没有原始图像张量。

original_img_tensor + pert_img_tensor pert_img_tensor

最佳答案

原来 torchvision.utils.save_image 修改了输入张量。解决方法是在调用 torchvision.utils.save_image 之前的某处添加一行,类似于此:

perturbed_data_copy = perturbed_data

如果在第二次调用时使用 perturbed_data_copy 而不是 perturbed_data(由 torchvision.utils.save_image 修改),那么您可以安全地保存扰动图像两次。我将提交错误报告并标记这篇文章。感谢@Mat 指出这一点!

关于image - 在同一图像张量上两次使用 torchvision.utils.save_image 会使第二次保存无效。这是怎么回事?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59054886/

55 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com