|
|
import torch.nn as nn |
|
|
import torch.nn.functional as F |
|
|
import torchvision |
|
|
import torchvision.transforms as transforms |
|
|
|
|
|
import numpy as np |
|
|
import matplotlib.pyplot as plt |
|
|
import torch |
|
|
import torch.optim as optim |
|
|
import torch.utils.data as data_utils |
|
|
from torch.autograd import Variable |
|
|
from torchvision import models, datasets |
|
|
|
|
|
from deeprobust.image.attack.deepfool import DeepFool |
|
|
import deeprobust.image.netmodels.resnet as resnet |
|
|
import matplotlib.pyplot as plt |
|
|
|
|
|
''' |
|
|
CIFAR10 |
|
|
''' |
|
|
|
|
|
|
|
|
model = resnet.ResNet18().to('cuda') |
|
|
print("Load network") |
|
|
|
|
|
""" |
|
|
Change the model directory here |
|
|
""" |
|
|
model.load_state_dict(torch.load("./trained_models/CIFAR10_ResNet18_epoch_20.pt")) |
|
|
model.eval() |
|
|
|
|
|
|
|
|
testloader = torch.utils.data.DataLoader( |
|
|
datasets.CIFAR10('image/data', train = False, download = True, |
|
|
transform = transforms.Compose([transforms.ToTensor()])), |
|
|
batch_size = 1, shuffle = True) |
|
|
classes = ('plane', 'car', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck') |
|
|
|
|
|
|
|
|
X, Y = next(iter(testloader)) |
|
|
X = X.to('cuda').float() |
|
|
|
|
|
|
|
|
adversary = DeepFool(model) |
|
|
AdvExArray = adversary.generate(X, Y).float() |
|
|
|
|
|
|
|
|
pred = model(AdvExArray).cpu().detach() |
|
|
|
|
|
|
|
|
print('===== RESULT =====') |
|
|
print("true label:", classes[Y]) |
|
|
print("predict_adv:", classes[np.argmax(pred)]) |
|
|
|
|
|
AdvExArray = AdvExArray.cpu().detach().numpy() |
|
|
AdvExArray = AdvExArray.swapaxes(1,3).swapaxes(1,2)[0] |
|
|
|
|
|
plt.imshow(AdvExArray, vmin = 0, vmax = 255) |
|
|
plt.savefig('./adversary_examples/cifar_advexample_deepfool.png') |
|
|
|
|
|
|