File size: 2,094 Bytes
6ffdc93
 
 
 
 
 
 
35b51f6
6ffdc93
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35b51f6
6ffdc93
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35b51f6
6ffdc93
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
69
70
71
72
73
74
75
import os
import gdown
import torch
import torchvision.datasets as datasets
import torchvision.transforms as transforms
from torch.utils.data import DataLoader
import time
import modules.model as model

# Download model if not available
modelsave_name = 'model_parameters.pt'
if os.path.isfile(modelsave_name) == False:
    url = 'https://drive.google.com/file/d/1_mYn2LrhG080Xvt26tWBtJ8U_0F2E1-s/view?usp=sharing'
    gdown.download(url, output=modelsave_name, fuzzy=True)

# Set device
if torch.backends.mps.is_available():
    device = torch.device('mps')
    device_name = 'Apple Silicon GPU'
elif torch.cuda.is_available():
    device = torch.device('cuda')
    device_name = 'CUDA'
else:
    device = torch.device('cpu')
    device_name = 'CPU'

torch.set_default_device(device)

print(f'\nDevice: {device_name}')
    
# Make model and load parameters
resnet = model.resnetModel_128()
resnet.load_state_dict(torch.load(modelsave_name, map_location=device))
resnet.eval()

imsize = 128
classes = ('Female', 'Male')

loader = transforms.Compose([
    transforms.Resize([imsize, imsize]),
    transforms.Grayscale(1),
    transforms.ToTensor(),
    transforms.Normalize(0, 1)
])

my_dataset = datasets.ImageFolder(
    root='images/',
    transform=loader
)

my_dataset_loader = DataLoader(
    my_dataset,
    batch_size=min(len(my_dataset), 10),
    generator=torch.Generator(device=device)
)

# Make predictions
start_time = time.time()
with torch.no_grad():
    for i, (X, y) in enumerate(my_dataset_loader):
        X = X.to(device)
        y_pred = resnet.forward(X)
        predicted = torch.max(y_pred.data,1)[1]

        for j in range(len(X)):
            print(f'\nImage: {my_dataset.imgs[j][0]}')
            print(f'Prediction: {classes[predicted[j]]}')
            print(f'Actual: {classes[y[j]]}')
            print(f'{classes[0]} weight: {y_pred[j][0]}')
            print(f'{classes[1]} weight: {y_pred[j][1]}')

end_time = time.time()

avg_inference_time = (end_time - start_time)/len(my_dataset)
print(f'\nAverage inference time: {avg_inference_time} seconds per image\n')