molokhovdmitry commited on
Commit
256d0b3
·
1 Parent(s): 01142fd

Delete unused files

Browse files

Former-commit-id: 2a452d468608844b4f40d8fe46ed5ff71fa0b88c
Former-commit-id: 406cbf7c3d265dcfa49c7dc263bafa2d2a8b9c29

check_photo.py DELETED
@@ -1,25 +0,0 @@
1
- import torch
2
- import torchvision.transforms as transforms
3
- from PIL import Image
4
- import torchvision
5
-
6
- # Запуск модели для распознания фото
7
- def check_photo1(model, categorias, photo):
8
- # Тот же формат фото, что и при обучении
9
- normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406],
10
- std=[0.229, 0.224, 0.225])
11
- preprocess = transforms.Compose([
12
- transforms.Resize([70, 70]),
13
- transforms.RandomHorizontalFlip(),
14
- transforms.RandomAutocontrast(),
15
- transforms.RandomEqualize(),
16
- transforms.ToTensor(),
17
- normalize
18
- ])
19
- batch = preprocess(photo).unsqueeze(0)
20
- prediction = model(batch).squeeze(0).softmax(0)
21
- class_id = prediction.argmax().item()
22
- score = prediction[class_id].item()
23
- return categorias[class_id], score
24
-
25
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
check_photo_model_init.py DELETED
@@ -1,17 +0,0 @@
1
- import pickle
2
- import csv
3
-
4
- # Файл инициализации модели
5
- def init_model():
6
- # Загрузить модели из файла
7
- pkl_filename = "pickle_model.pkl"
8
- with open(pkl_filename, 'rb') as file:
9
- model = pickle.load(file)
10
-
11
- # Считывание категорий
12
- file = open("cat.csv", "r")
13
- cat1 = list(csv.reader(file, delimiter=","))
14
- categorias = cat1[0]
15
- file.close()
16
- model.eval()
17
- return model, categorias
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
check_photo_model_retrain.py DELETED
@@ -1,154 +0,0 @@
1
- import os
2
- import torch
3
- import random
4
- import numpy as np
5
- import torchvision
6
- import matplotlib.pyplot as plt
7
- import torchvision.transforms as transforms
8
- import shutil
9
- import time
10
- import xml.etree.ElementTree as et
11
- import pickle
12
- import csv
13
-
14
- from tqdm import tqdm
15
- from PIL import Image
16
- from torchvision import models
17
- from torch.utils.data import DataLoader
18
- from torchvision.datasets import ImageFolder
19
- # Размер одного пакета
20
- BATCH_SIZE = 32
21
-
22
- use_gpu = torch.cuda.is_available()
23
- device = 'cuda' if use_gpu else 'cpu'
24
- print('Connected device:', device)
25
-
26
- # Датасет для тренировки
27
- train_dataset = ImageFolder(
28
- root='Data/Train'
29
- )
30
- # Датасет для проверки
31
- valid_dataset = ImageFolder(
32
- root='Data/Valid'
33
- )
34
-
35
- # augmentations (ухудшение качество чтобы не было переобучения)
36
- normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406],
37
- std=[0.229, 0.224, 0.225])
38
- train_dataset.transform = transforms.Compose([
39
- transforms.Resize([70, 70]),
40
- transforms.RandomHorizontalFlip(),
41
- transforms.RandomAutocontrast(),
42
- transforms.RandomEqualize(),
43
- transforms.ToTensor(),
44
- normalize
45
- ])
46
-
47
- valid_dataset.transform = transforms.Compose([
48
- transforms.Resize([70, 70]),
49
- transforms.ToTensor(),
50
- normalize
51
- ])
52
-
53
- # Определение выборки для обучения
54
- train_loader = DataLoader(
55
- train_dataset, batch_size=BATCH_SIZE,
56
- shuffle=True
57
- )
58
- # Определение выборки для проверки
59
- valid_loader = DataLoader(
60
- valid_dataset, batch_size=BATCH_SIZE,
61
- shuffle=False
62
- )
63
-
64
- # Указание на используемую модель
65
- def google(): # pretrained=True для tensorflow
66
- model = models.googlenet(weights=models.GoogLeNet_Weights.IMAGENET1K_V1)
67
- # Добавление линейного (выходного) слоя на основании которого идет дообучение
68
- model.fc = torch.nn.Linear(1024, len(train_dataset.classes))
69
- for param in model.parameters():
70
- param.requires_grad = True
71
- # Заморозка весов т.к. при переобучении модели они должны быть постоянны, а меняться будет только последний слой
72
- model.inception3a.requires_grad = False
73
- model.inception3b.requires_grad = False
74
- model.inception4a.requires_grad = False
75
- model.inception4b.requires_grad = False
76
- model.inception4c.requires_grad = False
77
- model.inception4d.requires_grad = False
78
- model.inception4e.requires_grad = False
79
- return model
80
-
81
- # Функция обучения модели. Epoch - количество итераций обучения (прогонов по нейросети)
82
- def train(model, optimizer, train_loader, val_loader, epoch=10):
83
- loss_train, acc_train = [], []
84
- loss_valid, acc_valid = [], []
85
- # tqdm - прогресс бар
86
- for epoch in tqdm(range(epoch)):
87
- # Ошибки
88
- losses, equals = [], []
89
- torch.set_grad_enabled(True)
90
-
91
- # Train. Обучение. В цикле проходится по картинкам и оптимизируются потери
92
- model.train()
93
- for i, (image, target) in enumerate(train_loader):
94
- image = image.to(device)
95
- target = target.to(device)
96
- output = model(image)
97
- loss = criterion(output,target)
98
-
99
- losses.append(loss.item())
100
- equals.extend(
101
- [x.item() for x in torch.argmax(output, 1) == target])
102
-
103
- optimizer.zero_grad()
104
- loss.backward()
105
- optimizer.step()
106
- # Метрики отображающие резултитаты обучения модели
107
- loss_train.append(np.mean(losses))
108
- acc_train.append(np.mean(equals))
109
- losses, equals = [], []
110
- torch.set_grad_enabled(False)
111
-
112
- # Validate. Оценка качества обучения
113
- model.eval()
114
- for i , (image, target) in enumerate(valid_loader):
115
- image = image.to(device)
116
- target = target.to(device)
117
-
118
- output = model(image)
119
- loss = criterion(output,target)
120
-
121
- losses.append(loss.item())
122
- equals.extend(
123
- [y.item() for y in torch.argmax(output, 1) == target])
124
-
125
- loss_valid.append(np.mean(losses))
126
- acc_valid.append(np.mean(equals))
127
-
128
- return loss_train, acc_train, loss_valid, acc_valid
129
-
130
- criterion = torch.nn.CrossEntropyLoss()
131
- criterion = criterion.to(device)
132
-
133
- model = google()
134
- print('Model: GoogLeNet\n')
135
-
136
- # оптимайзер - отвечает за поиск и подбор оптимальных весов
137
- optimizer = torch.optim.Adam(model.parameters(), lr=1e-4)
138
- model = model.to(device)
139
-
140
- loss_train, acc_train, loss_valid, acc_valid = train(
141
- model, optimizer, train_loader, valid_loader, 30)
142
- print('acc_train:', acc_train, '\nacc_valid:', acc_valid)
143
-
144
- # Сохранение модели в текущую рабочую директорию
145
- pkl_filename = "pickle_model.pkl"
146
- with open(pkl_filename, 'wb') as file:
147
- pickle.dump(model, file)
148
-
149
- # Категории. Получаются из имен папок
150
- print(train_dataset.classes)
151
- # Экспорт категорий в CSV
152
- with open('cat.csv', 'w', newline='') as file:
153
- writer = csv.writer(file)
154
- writer.writerow(train_dataset.classes)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
test_check_photo.py DELETED
@@ -1,21 +0,0 @@
1
- from check_photo import *
2
- from check_photo_model_init import *
3
-
4
- model, cat = init_model()
5
-
6
- Puskin_pamiatnik = Image.open("Data/Test_photo/1.jpg")
7
- Nov_arbat1 = Image.open("Data/Test_photo/2.jpg")
8
- Pushkin_dom1 = Image.open("Data/Test_photo/3.jpg")
9
- CDA1 = Image.open("Data/Test_photo/4.jpg")
10
- Okudjava1 = Image.open("Data/Test_photo/5.jpg")
11
- Kinoteatr = Image.open("Data/Test_photo/6.jpg")
12
- test_photos_dict = {'Puskin_pamiatnik':Puskin_pamiatnik,
13
- 'Nov_arbat1':Nov_arbat1,
14
- 'Pushkin_dom1': Pushkin_dom1,
15
- 'CDA1': CDA1,
16
- 'Okudjava1': Okudjava1,
17
- 'Kinoteatr': Kinoteatr,
18
- }
19
- for name in test_photos_dict:
20
- res_cat, res_score = check_photo1(model, cat, test_photos_dict[name])
21
- print(f"{res_cat}: {100 * res_score:.1f}%", "right answer", name)