В цьому репозиторії зберігається код розв'язання завдання в категорії CV/ML хакатону SPF 2023 від КНУ.
Команда: Гончарук Владислав, Бірук Сергій, Калапунь Остап, Самойленко Олексій, Кашперова Софія.
MVP: Веб-додаток на Flask API з розгорнутою моделю для детекції російської піхоти на відео
з летальних апаратів.
Передбачається, що користувач сервісу зможе завантажити відео у форматі .mp4 або .avi
та отримати послідовність зображень з bounding boxes на кожного піхотинця
чи повне відео з розміткою. Також підраховується максимальне значення піхотинців,
що зустрілися впродовж відео. Ця кількість виводиться користувачу як результат з кнопками
для завантаження оброблених даних.
Режим Download image sequence
Режим Download labeled video with detection
Внизу представлена структура проекту .
app
├── static - директорія для збереження статичних файлів проекту
│ ├── css - директорія з .css файлами
│ └── images - директорія з кадрами відео, що завантажить користувач values
│
├── templates - директорія з шаблонами (паттерн MVC)
│ ├── index.html - html-розмітка головної сторінки
│ └── results.html - html-розмітка виводу результатів
│
├── uploads - директорія з файлами, що будуть надсилатися користувачу
│ ├── ? zip file - архів з послідовністю зображень
│ └── ? .mp4 file - відео з розміткою
│
├── model.pt - модель, збережена у .pt форматі (PyTorch)
├── app.py - контролер та скрипт запуску програми
├── README.md - поточний файл - документація
├── /screenshots - директорія з скріншотами роботи додатку
├── Dockerfile - готує віртуальне середовище для запуску
└── requirements.txt - перелік бібліотек для цього проекту
Для розв'язання поставленної задачі викорситовувались відео з летальних апаратів, надані організаторами, та дані,
запозичені з додаткових джерел [1], такі як Telegram і YouTube. Розмітка датасету проводилося
на платформі Roboflow. Цей сервіс має багатий функціонал для моделей комп’ютерного зору, дозволяє зберігати
розмітку у різних форматах для подальшого навчання, реалізує попередню обробку даних, аугментацію і т.д.
При виборі даних ми орієнтувалися на відеознімки з великої відстані, бо в такому випадку дрон
менш помітний та його складніше збити.
В цілому було розмічено близкь 3500 зображень.
Для попередьної обробки кадрів з відео використовували програмні засоби Roboblow.
Завдяки аугментації (Horizontal flip та Rotation) розмір датасету було збільшено до 8500 зображень.
Застосовували Resize(720,1280).
Медіанний фільтр для подавлення шуму на зображенні та посилення контрастності були вбудовані
в передтреновану модель YOLOv8, тому не було необхідності застосовувати їх додатково.
Для задачі детекції об'єктів було вирішено використовувати архітектуру YOLO. Це одноетапний
алгоритм глибокого навчання, що застосовує згорткові нейронні мережі для виявлення об'єктів.
Через це YOLO найбільше підходить для детекції в потоковому режимі.
Під час тренування порівнювались різні конфігурації YOLOv8. При порівнянні результатів на
валідаційному датасеті, метриках mAP, Precision, Recall у якості фінальної моделі обрано
YOLOv8I.
-
Відкрийте директорію додатку.
-
Створіть образ Docker за допомогою Dockerfile:
docker build . -t spf_hack
-
Запустіть контейнер зі створеного образу:
docker run -it --rm spf_hack
-
Первірте версію Python:
python3 --version
-
Встановіть віртуальне середовище в директорії додатку:
python3 -m venv venv
source venv/bin/activate
-
Інсталюйте усі необхідні бібліотеки до віртуального середовища:
pip install -r requirements.txt
-
Запустіть додаток на Flask API:
flask run --host=0.0.0.0