Разработка модели нейронной сети для классификации изображений
Постановка задачи
Целями разработки проекта являются:
●получение навыков работы со свёрточными нейронными сетями (CNN);
●получение опыта подготовки датасета к обучению;
●создание и анализ архитектур для нейронных сетей на Python.
Введение
1.Аугментация
2.Создание новой папочной структуры
3.Распаковка и определение меток класса
4.Разработка архитектур и обучение
Аугментация
01
Resize
Выбор случайного обреза 224x224
03
Random Flip
02
Random
Rotation
Случайный поворот на небольшой угол в 10*
04
Gauss Blur
Рандомное отражение |
Применение |
по горизонтиали |
Гауссовского размытия |
Создание новой папочной структуры
Принципы предыдущих |
|
|
архитектур |
|
|
Наследовани |
Добавление |
Вспомогательн |
е класса |
больших |
ый класс |
Dataset |
блоков |
|
Мы пытались создать |
Мы пытались добавлять |
Мы пытались |
класс датасета для |
как можно больше |
добавить |
упрощения работы с |
блоков, но в таком |
вспомогательный |
файловой структурой. |
случае возрастает |
класс регулятора, |
Однако из-за накладных |
объём памяти модели |
чтобы не считать |
ограничений пришлось |
(нехватка GPU), поэтому |
коэффициенты |
отказаться от этой идеи |
мы отказались от этой |
свёртки, но это, к |
|
идеи |
сожалению, не |
|
|
помогло |
Собственная архитектура
class Net3(nn.Module): def __init__(self):
super(Net3,self).__init__()
self.relu = nn.ReLU() |
|
||
self.conv1 |
= |
nn.Conv2d(3, 8, kernel_size =3, stride =1, padding = 1) |
|
self.conv2 |
= |
nn.Conv2d(8, 16, kernel_size =3, stride =1, padding= 1) |
|
self.conv3 |
= |
nn.Conv2d(16, |
32, kernel_size =3, stride =1, padding= 1) |
self.conv4 |
= |
nn.Conv2d(32, |
64, kernel_size =3, stride =1, padding= 1) |
self.conv5 |
= |
nn.Conv2d(64, |
128, kernel_size =3, stride =1, padding= 1) |
self.maxpool |
= nn.MaxPool2d(2, 2) |
||
self.drop1 |
= |
nn.Dropout(p = 0.5) |
|
self.fc1 = |
nn.Linear(128 * |
7 * 7, 6272) |
|
self.fc2 = |
nn.Linear(6272, |
len(classes)) |
def forward(self, x): x = self.conv1(x) x = self.relu(x)
x = self.maxpool(x) x = self.drop1(x)
x = self.conv2(x) x = self.relu(x)
x = self.maxpool(x)
x = self.conv3(x) x = self.relu(x)
x = self.maxpool(x) x = self.drop1(x)
x = self.conv4(x)
x = self.maxpool(x)
x = self.conv5(x) x = self.relu(x)
x = self.maxpool(x)
x= x.view(x.size(0),-1)
x= self.relu(self.fc1(x))
x= self.fc2(x)
return torch.log_softmax(x, dim=1)
VGG11