-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdamir_smoothing.py
68 lines (50 loc) · 1.88 KB
/
damir_smoothing.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import pyiqa
import torch
import random
import json
import numpy as np
from tqdm import tqdm
from pathlib import Path
from PIL import Image
from torchvision import transforms
def generate_image_noise(shape):
return torch.randn(*shape)
def normalize_in_sphere(image_noise, radius):
norm_per_pixel = torch.linalg.norm(image_noise, axis=-1, keepdims=True)
normalized_noise = image_noise / norm_per_pixel
scaled_noise = normalized_noise * radius
return scaled_noise
device = torch.device("cuda")
iqa_metric = pyiqa.create_metric('maniqa', device=device)
current_directory = Path.cwd()
data_dir = Path('./data/images/')
image_files = list(data_dir.iterdir())
scores_true=[]
scores_new=[]
for i in range(1):
image_path = image_files[i]
score = iqa_metric(image_path.as_posix())
numeric_value = score.item()
scores_true.append(numeric_value)
image = Image.open(image_path.as_posix())
original_array = transforms.PILToTensor()(image)
dimensions = original_array.shape
scores_fr = []
for j in tqdm(range(50000)):
image_noise = generate_image_noise(dimensions)
normalized_noise = normalize_in_sphere(image_noise, radius = 0.05)
adversarial_array = torch.clamp(original_array + normalized_noise, 0, 255)#astype(np.uint8)
#adversarial_image = transforms.fromarray(adversarial_array)
score_fr = iqa_metric(adversarial_array/255)
scores_fr.append(score_fr.item())
total_sum = sum(scores_fr)
average = total_sum / len(scores_fr)
scores_new.append(average)
print(i, 'score orig=', numeric_value, 'scores_fr_avg=', average)
result = max([abs(x - y) for x, y in zip(scores_true, scores_new)])
print('max difference=', result)
with open('results.json','w') as f:
json.dump({"scores_true": scores_true,
"scores_new": scores_new,
"scores_fr": scores_fr},
f)