Проект по поиску свободных парковочных мест по камерам сверху на основе размеченных заранее доступных мест для парковки.
Based on Mask RCNN lib. Mask RCNN github
Предобученная модель:
- скачать в каталог
./models
: mask_rcnn_coco.h5
Пример запуска на предобученной модели, baseline:
Нужен python3.7 (c 3.8 и выше первая версия tf недоступна). Use this fix to update python to 3.10 and tf to newer versions. (model.py patch) matterport/Mask_RCNN#2783 (comment) or try to use this version for mrcnn (https://github.com/akTwelve/Mask_RCNN/) without fixes.
virtualenv --python=/usr/bin/python3.7 venv
source venv/bin/activate
pip install -r requirements.txt
Скачать CUDA toolkit: https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=22.04&target_type=runfile_local (проверить версию для gcc в системе)
Сохранение изображений с камеры в настоящий момент:
python src/devline.py --url <server_url> --port <server_port --user <user> --password <password> --dir cams
Если нет возможности подключиться к серверу видеонаблюдения, можно собрать первый датасет для разметки и проверки вручную.
Запуск с предобученной моделью Mask RCNN, скачанной на этапе подготовки:
python src/detect.py --weights models/mask_rcnn_coco.h5 --data <images_dir> --out <out_images_detected_dir>
На выходе сложит размеченные изображения, с распознанными машинами в указанную директорию.
- собрать train, val выборки
- разметить при помощи via.html
- подложить датасет и разметку по следующим путям
python src/train.py --dataset=dataset --weights=coco
ETA: 10-15 изображений для обучения, 30 эпох, gpu 1050Ti -> 20h
Попробовать colab.research.google.com для обучения с gpu.
При обучении модели после каждой эпохи складываются в logs в поддиректории.
Дообученную модель нужно положить в models/some_new_model_name.h5
и указать при запуске распознавания:
python src/detect.py --data <images_dir> --weights <models/some_new_model_name.h5> --out <images_detected_dir>
Обученная на 15 изображениях модель выдаёт заметно лучшие результаты, хотя и встречаются ложноположительные/ложноотрицательные результаты:
Пример: видно, что пустое парковочное место прокрасилось в занятое, остальные машины определились корректно.
Пример: машина в темном углу осталась незамеченой, но корректные пустые места остались.
TODO:
- попробовать увеличить качество изображений
- получать изображения без служебной информации (дата, время)
- дообучать модели под разное время суток/погодные условия и пр. (может быть иметь несколько моделей)