Опишем последовательнось для изображения, попавшего на сервер для обработки:
- Изображение вместе с указаным эталоном передаётся python-скрипту с обученной моделью.
- Нейросеть возвращает обнаруженные детали машины и их контуры (битовые маски над двумерным массивом изображения).
- По маскам считается площадь покрытия контура (количество пикселей)
- Полученные значения в сравнении с известной фактической площадью эталона дают искомые площади деталей.
- Скрипт возвращает серверу изображение с выделением найденных частей и .csv файл с их площадями.
Запуск скрипта отдельно от сервера:
/root/Hih-2024/Script/venv/bin/python3 ./script.py "/root/storage/input/test.jpg" 4 100 "/root/storage/output"
Параметры - пути до файлов, индекс и площадь (мм^2) эталонной детали
Important
Из-за веса обученной нейросети она не загруженна в git-репозиторий и доступна по ссылке на диск: Яндекс.Диск (файл - best.pt)
В качестве базовой модели была выбрана YOLOv8 за её хорошие начальные показатели для решения задачи обнаружения объектов.
Для обучения использовался размеченный нами датасет. 80 самолично размеченных изображений было аугментированно до 192. Используемые классы объектов:
0: 'back_bumper',
1: 'back_door',
2: 'back_wing',
3: 'bonnet',
4: 'front_bumper',
5: 'front_door',
6: 'front_wing',
7: 'roof'
Tip
Фотографии были отобраны только под прямым углом видимости, из-за чего полученная модель будет неверно реагировать на угловые фото. Для улучшения точности и вариативности можно обучать модель с использованием более точной разметки, под разными углами, при большем и различном датасете.
Для обработки случаев, когда объект находится под углом, необходимо применить алгоритмы преобразования перспективы (существующие в opencv) для получения более точных размеров деталей.
Обучение проводилось в течение 50 эпох.
Итоговые метрики модели:
Примеры обнаружения частей автомобиля: