Skip to content

Solution for object detection task on SPF 2023 Hackhathon

Notifications You must be signed in to change notification settings

kashperova/spf-hack-neural-noodles

Repository files navigation

SPF Hackhathon - Object Detection

Зміст

Вступ

В цьому репозиторії зберігається код розв'язання завдання в категорії CV/ML хакатону SPF 2023 від КНУ.

Команда: Гончарук Владислав, Бірук Сергій, Калапунь Остап, Самойленко Олексій, Кашперова Софія.

MVP: Веб-додаток на Flask API з розгорнутою моделю для детекції російської піхоти на відео з летальних апаратів.
Передбачається, що користувач сервісу зможе завантажити відео у форматі .mp4 або .avi та отримати послідовність зображень з bounding boxes на кожного піхотинця чи повне відео з розміткою. Також підраховується максимальне значення піхотинців, що зустрілися впродовж відео. Ця кількість виводиться користувачу як результат з кнопками для завантаження оброблених даних.

Прототип роботи веб-додатку

Режим Download image sequence

test_app_1.gif
Режим Download labeled video with detection

test_app_2.gif

Структура проекту

Внизу представлена структура проекту .

   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

  1. Відкрийте директорію додатку.

  2. Створіть образ Docker за допомогою Dockerfile:

    docker build . -t spf_hack

  3. Запустіть контейнер зі створеного образу:

    docker run -it --rm spf_hack

Requirements

  1. Первірте версію Python:

    python3 --version

  2. Встановіть віртуальне середовище в директорії додатку:

    python3 -m venv venv
    source venv/bin/activate

  3. Інсталюйте усі необхідні бібліотеки до віртуального середовища:
    pip install -r requirements.txt

  4. Запустіть додаток на Flask API:
    flask run --host=0.0.0.0

Посилання

About

Solution for object detection task on SPF 2023 Hackhathon

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published