Для классификации и детекции дорожных знаков на изображениях, предлагается использовать YOLOv8n модель, которая будет дообучаться на датасете с фотографиями дорожной сцены.
За основу взят данный kaggle датасет с фотографиями дорожной сцены, координатами и типами дорожных знаков.
![](https://private-user-images.githubusercontent.com/34653515/307547273-747129e7-879e-4407-a626-d8803cb67a75.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTk3MzMzNDksIm5iZiI6MTcxOTczMzA0OSwicGF0aCI6Ii8zNDY1MzUxNS8zMDc1NDcyNzMtNzQ3MTI5ZTctODc5ZS00NDA3LWE2MjYtZDg4MDNjYjY3YTc1LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA2MzAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNjMwVDA3MzcyOVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWMzMmEyZGM0ZDdjOTczMDRlMzlkMGQ5OTc0NzNjODM3MTBiNDIyZmY3NjU2NWQyYzBmN2UyZWZlMjYwMWRkZjMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.b1fvLglqOoqyyfd8B3dC0UsbYOfMIfrR-hkJiASMVKE)
У этого датасета есть особенности:
- Присутствуют синтетические фотографии из дорожного симулятора
- Знаки 15 типов: ['Green Light', 'Red Light', 'Speed Limit 10', 'Speed Limit 100', 'Speed Limit 110', 'Speed Limit 120', 'Speed Limit 20', 'Speed Limit 30', 'Speed Limit 40', 'Speed Limit 50', 'Speed Limit 60', 'Speed Limit 70', 'Speed Limit 80', 'Speed Limit 90', 'Stop']
- Фиксированное разбиение на тренировочные(3530 шт), тестовые(801 шт) и валидационные данные(638 шт)
- Каждая картинка имеет размер 416x416 пикселей
В проекте дообучается небольшая YOLOv8n с использованием встроенных в YOLO аугментаций. Обучение происходит с помощью фреймворка Pytorch Lightning.
Схема инференса устроена таким образом:
- Загрузка тестового изображения: извлечение изображения из тестового набора данных для последующей обработки.
- Предварительная обработка изображения:
- Изменение размера изображения на 416x416 пикселей (или на значение, указанное в конфиге при обучении)
- Нормализация пикселей
- Генерация предсказаний: на выходе модели получаем предсказанные координаты и классы дорожных знаков на изображении.
Таким образом, данный подход позволит эффективно классифицировать и детектировать дорожные знаки на изображениях с использованием YOLOv8n модели.
git clone https://github.com/Gaussiandra/traffic-signs-detection.git
cd traffic-signs-detection/
docker-compose build
docker-compose up -d
docker attach tsd_model
conda activate dev
cd tsd/
dvc pull
python commands.py train detector/configs/base_config_64.yaml
- Следить за процессом обучения на localhost:5000
Обучение:
python commands.py train detector/configs/base_config_64.yaml
Инференс:
python commands.py infer detector/configs/base_config_64.yaml checkpoints/train-exp/epoch=03-val_loss=52.6284.ckpt traffic_sign.png
.
|-- Dockerfile
|-- README.md
|-- checkpoints
| -- train-exp
|-- commands.py
|-- data
| |-- README.dataset.txt
| |-- README.roboflow.txt
| |-- data.yaml
| |-- test
| |-- train
| -- valid
|-- data.dvc
|-- detector
| |-- __init__.py
| |-- __pycache__
| |-- configs
| |-- data.py
| |-- infer.py
| |-- model.py
| -- train.py
|-- docker-compose.yml
|-- mlflow.dockerfile
|-- poetry.lock
|-- pyproject.toml
|-- weights
| -- yolov8n.pt