Необходимо создать и разметить собственный набор данных, состоящий из изображений. Набор содержит не менее 3 классов и не менее 100 экземпляров каждый. Изображения можно скачать из интернета или объединить несколько существующих датасетов. Создать web-приложение для классификации изображений полученного набора данных. Использовать аугментацию данных, регуляризацию, перенос обучения.
- Структура набора данных, аугментация данных.
- Перенос обучения, дообучение.
- Архитектура сверточной нейронной сети.
- Вариант 1. Требуется в одной из поисковых систем найти картинки по требуемым классам, затем скачать вручную в 3 разные папки.
- Вариант 2. Требуется установить одно из расширений Chrome: Image downloader - Imageye или Image Downloader. После установки найти изображения в одной из поисковых систем, затем при помощи загруженного ранее расширения загрузить картинки.
В любой из поисковых систем выполнить поиск картинок на интересующую тему.
Открыть ранее установленное расширение.
Выбрать тип изображения JPG.
Выбрать все картинки и скачать.
- Вариант 3. Требуется установить библиотеку Python: yandex-images-download (GitHub). После установки библиотеки необходимо скачать ChromeDriver для Вашей версии Google Chrome и распаковать файл chromedriver.exe. В командной строке PyCharm ввести следующую команду: yandex-images-download Chrome --keywords "Торт, Ласточка, Кошка" --limit 100 (пример альтернативной команды: yandex-images-download Chrome --keywords "ласточка, орёл, торты" -o путь_для_скачивания -l количество фотографий -dp путь_к_chromedriver.exe).
После успешной загрузки изображений требуется очистить лишние объекты в ручном режиме на предмет возможных ошибок (дубликация, неверная тематика).
Требуется перейти по ссылке на подготовленный проект и сохранить себе копию на Google диск.
В файловой системе Colab-файла в папке "content" необходимо создать три папки, согласно классам тематики Ваших изображений (пример: "Торт, Ласточка, Кошка") и загрузить туда скаченные ранее изображения.
Открываем файловую систему в Colab (автоматически откроется папка "content"). Нажимаем ПКМ в свободном пространстве и создаем папки по тематике классов.
Изменить переменную класса под свою тематику.
Требуется выполнить аугментацию, регуляризацию и перенос обучения и сохранить модель в формате ONNX.
Для выполнения лабораторной работы потребуется VS Code.
Пример создания проекта Django в VS Code можно просмотреть по данной ссылке.
После создания проекта требуется создать в корне проекта папку media для последующего сохранения изображений и файлов формата ONNX. Внутри папки media необходимо создать папки "images" и "models".
В файл setting.py требуется добавить пути к ранее созданной папке media. В самом конце необходимо добавить следующий блок кода:
import os
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'media')
Чтобы указать Django на то, где искать наши шаблоны проверьте файл settings.py
. В нем в переменной TEMPLATES
в поле DIRS
должен быть указан путь к вашим шаблонам
TEMPLATES = [
{
# ...
"DIRS": [BASE_DIR / "DZ1/templates"],
# ...
},
]
Добавить Python файл views.py в ту же папку, где был файл setting.py.
from django.shortcuts import render
from django.core.files.storage import FileSystemStorage
import onnxruntime
import numpy as np
from PIL import Image
imageClassList = {'0': 'Торт', '1': 'Ласточка', '2': 'Кошка'} #Сюда указать классы
def scoreImagePage(request):
return render(request, 'scorepage.html')
def predictImage(request):
fileObj = request.FILES['filePath']
fs = FileSystemStorage()
filePathName = fs.save('images/'+fileObj.name,fileObj)
filePathName = fs.url(filePathName)
modelName = request.POST.get('modelName')
scorePrediction = predictImageData(modelName, '.'+filePathName)
context = {'scorePrediction': scorePrediction}
return render(request, 'scorepage.html', context)
def predictImageData(modelName, filePath):
img = Image.open(filePath).convert("RGB")
img = np.asarray(img.resize((32, 32), Image.ANTIALIAS))
sess = onnxruntime.InferenceSession(r'C:\DZ1\media\models\cifar100.onnx') #<-Здесь требуется указать свой путь к модели
outputOFModel = np.argmax(sess.run(None, {'input': np.asarray([img]).astype(np.float32)}))
score = imageClassList[str(outputOFModel)]
return score
В файле views.py изменить классы по Вашей тематике и указать путь к модели ONNX.
imageClassList = {'0': 'Торт', '1': 'Ласточка', '2': 'Кошка'} #Сюда указать классы
sess = onnxruntime.InferenceSession(r'C:\DZ1\media\models\cifar100.onnx') #<-Здесь требуется указать свой путь к модели
В файле urls.py требуется заменить содержимое на следующий блок кода:
from django.contrib import admin
from django.urls import path
from django.conf.urls.static import static
from django.conf import settings
from . import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.scoreImagePage, name='scoreImagePage'),
path('predictImage', views.predictImage, name='predictImage'),
]
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Установить следующие библиотеки: onnx, onnxruntime, numpy, pillow. Пример установки одной библиотеки:
В папку templates добавить файл scorepage.html.
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="windows-1251">
<title>Домашнее задание 1</title>
<style>
/* Add some padding on document's body to prevent the content
to go underneath the header and footer */
body{
padding-top: 60px;
padding-bottom: 40px;
}
.fixed-header, .fixed-footer{
width: 100%;
position: fixed;
background: #333;
padding: 10px 0;
color: #fff;
}
.fixed-header{
top: 0;
}
.fixed-footer{
bottom: 0;
}
.container{
width: 80%;
margin: 0 auto; /* Center the DIV horizontally */
}
nav a{
color: #fff;
text-decoration: none;
padding: 7px 25px;
display: inline-block;
}
</style>
</head>
<body>
<div class="fixed-header">
<div class="container">
</div>
</div>
<div class="container">
<form action="predictImage" method="post" enctype="multipart/form-data">
{% csrf_token %}
<div class="col-md-4 col-sm-4">
<label for="FilePath">Загрузить изображение:</label>
</div> <input name="filePath" type="file"><br><br>
<input type="submit" value="Submit" >
</form>
</div>
<div>
<br>
{% if scorePrediction %}
<h3>The classification is : {{scorePrediction}}</h3>
{% endif %}
</div>
<div class="fixed-footer">
<div class="container"></div>
</div>
</body>
</html>
Запустить проект, выполнив в терминале PyCharm следующую команду: "python3 manage.py runserver".
Загрузить изображение и нажать на кнопку "submit".