Yenes commited on
Commit
f7a4b17
·
verified ·
1 Parent(s): 5f8fbbb

Upload 3 files

Browse files
Files changed (3) hide show
  1. app.py +103 -0
  2. requirements.txt +4 -0
  3. vgg_model.pth +3 -0
app.py ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ import torch.nn as nn
3
+ import torchvision.transforms as transforms
4
+ import gradio as gr
5
+ from PIL import Image
6
+
7
+ class VGG19(nn.Module):
8
+ def __init__(self):
9
+ super(VGG19, self).__init__()
10
+
11
+ self.features = nn.Sequential(
12
+ nn.Conv2d(3, 64, kernel_size=3, padding=1),
13
+ nn.ReLU(inplace=True),
14
+ nn.Conv2d(64, 64, kernel_size=3, padding=1),
15
+ nn.ReLU(inplace=True),
16
+ nn.MaxPool2d(kernel_size=2, stride=2),
17
+
18
+ nn.Conv2d(64, 128, kernel_size=3, padding=1),
19
+ nn.ReLU(inplace=True),
20
+ nn.Conv2d(128, 128, kernel_size=3, padding=1),
21
+ nn.ReLU(inplace=True),
22
+ nn.MaxPool2d(kernel_size=2, stride=2),
23
+
24
+ nn.Conv2d(128, 256, kernel_size=3, padding=1),
25
+ nn.ReLU(inplace=True),
26
+ nn.Conv2d(256, 256, kernel_size=3, padding=1),
27
+ nn.ReLU(inplace=True),
28
+ nn.Conv2d(256, 256, kernel_size=3, padding=1),
29
+ nn.ReLU(inplace=True),
30
+ nn.Conv2d(256, 256, kernel_size=3, padding=1),
31
+ nn.ReLU(inplace=True),
32
+ nn.MaxPool2d(kernel_size=2, stride=2),
33
+
34
+ nn.Conv2d(256, 512, kernel_size=3, padding=1),
35
+ nn.ReLU(inplace=True),
36
+ nn.Conv2d(512, 512, kernel_size=3, padding=1),
37
+ nn.ReLU(inplace=True),
38
+ nn.Conv2d(512, 512, kernel_size=3, padding=1),
39
+ nn.ReLU(inplace=True),
40
+ nn.Conv2d(512, 512, kernel_size=3, padding=1),
41
+ nn.ReLU(inplace=True),
42
+ nn.MaxPool2d(kernel_size=2, stride=2),
43
+
44
+ nn.Conv2d(512, 512, kernel_size=3, padding=1),
45
+ nn.ReLU(inplace=True),
46
+ nn.Conv2d(512, 512, kernel_size=3, padding=1),
47
+ nn.ReLU(inplace=True),
48
+ nn.Conv2d(512, 512, kernel_size=3, padding=1),
49
+ nn.ReLU(inplace=True),
50
+ nn.Conv2d(512, 512, kernel_size=3, padding=1),
51
+ nn.ReLU(inplace=True),
52
+ nn.MaxPool2d(kernel_size=2, stride=2),
53
+ )
54
+
55
+ self.classifier = nn.Sequential(
56
+ nn.Linear(512 * 7 * 7, 4096),
57
+ nn.ReLU(inplace=True),
58
+ nn.Dropout(0.5),
59
+ nn.Linear(4096, 4096),
60
+ nn.ReLU(inplace=True),
61
+ nn.Dropout(0.5),
62
+ nn.Linear(4096, 1000)
63
+ )
64
+
65
+ def forward(self, x):
66
+ x = self.features(x)
67
+ x = torch.flatten(x, 1)
68
+ x = self.classifier(x)
69
+ return x
70
+
71
+ model = VGG19()
72
+ model.load_state_dict(torch.load("vgg_model.pth", map_location="cpu"))
73
+ model.eval()
74
+
75
+ class_names=['NORMAL', 'PNEUMONIA']
76
+
77
+ transform = transforms.Compose([
78
+ transforms.Resize((224, 224)),
79
+ transforms.ToTensor(),
80
+ transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
81
+ ])
82
+
83
+ def predict(img):
84
+ img = transform(img).unsqueeze(0)
85
+ with torch.inference_mode():
86
+ pred_probs = torch.softmax(model(img), dim=1)
87
+
88
+ pred_labels_and_probs = {class_names[i]: float(pred_probs[0][i]) for i in range(len(class_names))}
89
+ return pred_labels_and_probs
90
+
91
+
92
+ title = "Zatürre Bulucu"
93
+ description = "Gönderilen fotoğrafa göre Sağlıklı mı yoksa Zatürre mi olduğunu tahmin eder."
94
+
95
+ demo = gr.Interface(
96
+ fn=predict,
97
+ inputs=gr.Image(type="pil"),
98
+ outputs=[gr.Label(num_top_classes=2, label="Predictions")],
99
+ title=title,
100
+ description=description
101
+ )
102
+
103
+ demo.launch(debug=False, share=True)
requirements.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ torch
2
+ gradio
3
+ torchvision
4
+ pillow
vgg_model.pth ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:e2518ae212cad272b9d167ea726a07db4300548368d2a48f0fe9c6bbb61acc03
3
+ size 574680144