Coder Social home page Coder Social logo

dripowner / roadsignsdetection Goto Github PK

View Code? Open in Web Editor NEW

This project forked from doronin99/roadsignsdetection

0.0 0.0 0.0 70.2 MB

The real-time Computer Vision service for detecting and recognizing road signs in diverse conditions in Russia [CV course study project]

License: MIT License

Python 67.38% Jupyter Notebook 32.62%

roadsignsdetection's Introduction

Road sign detector

Описание задачи

Задача

Создание приложения для распознавания дорожных знаков РФ

Кем и когда может быть использовано:

  • Приложение может быть использовано службами по контролю безопасности дорожного движения для анализа ДТП
  • Приложение может быть использовано для помощи слабовидящим водителям
  • Приложение может быть использовано для беспилотного движения
  • Приложение может быть использовано для снижекния количества ДТП

Ограничения:

  • на данном этапе планируется демонстрация работы в качестве веб-сервиса, поэтому невозможна работа в режиме реального времени
  • не все знаки могут быть качественно распознаны из-за малой представленности некоторых знаков в обучающих данных
  • распознаются только знаки РФ
  • погодные условия и условия освещенности (в меньшей мере, т. к. в обучающем датасете были представлены изображения при разных погодных условиях, в разное время года и суток)

Ход работы:

  1. Выбор датасета - https://www.kaggle.com/datasets/watchman/rtsd-dataset/data
  2. Конвертация аннотаций COCO в аннотации YOLO.
  3. Анализ датасета.
  4. Отбор классов, достаточно представленных в датасете.
  5. Проведение экспериментов.
  6. Обучение модели.
  7. Создание приложения для получения предсказаний модели на видео.

Было обученно две модели:

  1. 8 классов по типам дорожных знаков - Демонстрация
  2. 29 классов для детекции 29 различных дорожных знаков - Демонстрация Выбор 29 классов обусловлен представленностью классов в датасете для обучения модели. Классы, которые представлены слишком малым количеством изображений (< 700) были отфильтрованы. Эксперимент без удаления низкочастотных классов привел к снижению целевых метрик

Линтер: black

Эксперименты:

Модель Датасет Параметры Метрики
yolov8s Russian traffic sign images (20k train,4k valid) imgsz=1280, epochs=25, batch=4 mAP50=0.46, mAP50-95=0.35
yolov8s Traffic Signs Dataset in YOLO format (4 classes) imgsz=1280, epochs=25, batch=4 mAP50=0.99, mAP50-95=0.87
yolov8s Russian traffic sign images (179k,40 top classes) imgsz=640, epochs=20, batch=64 mAP50=0.66, mAP50-95=0.47
yolov8m Russian traffic sign images (179k,40 top classes) imgsz=640, epochs=5, batch=32 mAP50=0.67, mAP50-95=0.49
yolov8s Russian traffic sign images (179k,8 classes) imgsz=640, epochs=5, batch=8, optimizer='AdamW' mAP50=0.74, mAP50-95=0.52
yolov8s Russian traffic sign images (179k,8 classes) imgsz=640, epochs=20, batch=8, optimizer='AdamW' + albumentations mAP50=0.89, mAP50-95=0.65
yolov8s Russian traffic sign images (179k,8 classes) imgsz=640, epochs=20, batch=8, optimizer='AdamW' + albumentations mAP50=0.92, mAP50-95=0.68
yolov8s Russian traffic sign images (179k,8 classes) imgsz=640, epochs=50, batch=8, optimizer='AdamW' + augmentations mAP50=0.922, mAP50-95=0.686
yolov8s Russian traffic sign images (179k,29 classes) imgsz=640, epochs=100, batch=8, optimizer='AdamW' + albumentations mAP50=0.672, mAP50-95=0.62
yolov8n Russian traffic sign images (179k,29 classes) imgsz=640, epochs=100, batch=8, optimizer='AdamW' + albumentations mAP50=0.872, mAP50-95=0.614

Трекинг экспериментов:

Для трекинга экспериментов использовался ClearML. Результаты обучения лучшей модели

Аугментации:

SafeRotate, RandomBrightness, Blur, RandomCrop

Выбор модели:

Выбор модели обуславливался невысокой вычислительной сложностью модели и скоростью инференса модели, так как основные устройства для запуска помощника - портативные устройства (мобильный телефон, видеорегистратор) Для выбора модели мы протестировали скорость инференса двух моделей с наивысшими метриками для 29 классов.

Название модели Скорость инференса (onnx) одного кадра, мс
yolov8s 0,77
yolov8n 0,31

В качестве скорости инференса используется среднее значение времени обнаружения знаков на изображении в разрешении 1280х720 на CPU. Скорость двух моделей позволяет получать предсказания даже на высокой скорости (на производительных портативных устройствах). Наиболее высокая метрика mAP50-95 у решения - Yolov8s

Основная метрика для выбора модели - mAP50-95 - так как она учитвает точность, пересечение по области (Iou),а диапазон 50-95 обеспечивает высокую точность детекции, что особенно важно при использовании модели в различных погодных и световых условиях.

Выбрали модель yolov8n, т. к. ее время инференса в 2 раза меньше, чем у yolov8s, но значение mAP50-95 всего на 0.06 меньше, чем у yolov8s. Также исползование менее требовательной к вычислительным ресурсам модели, позволяет значительно расширить список поддерживаемых устройств.

Оценка решения:

Решение верно детектирует знаки дорожного движения, скорость работы подходит для реализации приложений на портативных устройствах. Возможно улучшение решения путем увеличения количества эпох обучения и выбора модели большего размера.

График обучения лучшей модели:

results-plot-image.png

Датасеты:

Установка зависимостей

  1. conda env create -n RoadSignDetector -f environment.yml
  2. conda activte RoadSignDetector

Веса моделей

  1. загрузите веса модели
  2. положите загруженный файл в директорию models

Запуск

  1. cd server && python main.py
  2. cd ..\app && python -m streamlit run .\app.py
  3. Сервис доступен по адресу http://localhost:8501

roadsignsdetection's People

Contributors

kovalevcc avatar dripowner avatar doronin99 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.