Проект создан для детектирования на изображении капель воды на любой поверхности. Эта задача стала интересна, так как мы хотели попрактиковать свои навыки в обучении нейронных сетей, собрать своими руками датасет и сделать модель доступной для любого пользователя, который захочет проверить работу детекции на своем собственном изображении.
Для детекции капель была выбрана нейросеть с архитектурой Unet, имеющая энкодер ResNet50. Она представляет из себя сверточную нейронную сеть из двух блоков: энкодера и декодера. Первый из них уменьшает разрешение изображения и увеличивает информационный объем каждого пикселя. Декодер, наоборот, разворачивает выход из энкодера до первоначального размера и выдает маску искомого объекта.
Данная нейронная сеть проста в реализации и удобна в использовании для решения поставленных целей проекта. Для Unet характерна высокая точность работы при малом объеме данных. В результате её работы есть возможность не только получить маску изображения, но и найти площадь сегментированного объекта.
Сборка датасета состояла из нескольких частей:
- поиск изображений в интернете/съемка фотографии с каплями воды
- создание маски в фоторедакторе, на которой белым цветом отображен участок капли, черным - фон
- перевод маски с помощью скрипта на языке Python в бинарную матрицу True-False и сохранение ее с расширением .npz
- создание датасета путем объединения исходной фотографии и соответствующей ей npz-маски
UI сделан с помощью языка Python, библиотеки PyQT5 и программы QtDesigner. Интерфейс принимает изображение или папку с изображениями и отправляет их в нейронную сеть для детектирования. Результат сохраняется в новую папку в двух форматах: на одном капли закрашиваются, на другом добавляется bounding box. Пользователь может выбрать любую из версий для просмотра. Также при передаче изображения есть возможность отредактировать его: повернуть в любую сторону или обрезать. Каждая страница UI изначально создана в QtDesigner, в коде представлена в виде класса со своими методами. Взаимодействие между страницами происходит с помощью функций библиотеки PyQT5
- Перейдите по ссылке и скачайте архив с проектом: https://github.com/HerrPhoton/Water_drop_detection/releases
- Или клонируйте репозиторий нижеприведенной командой:
git clone https://github.com/HerrPhoton/Water_drop_detection
- Откройте папку Water_drop_detection и установите необходимые библиотеки командой ниже:
pip -r install requirements.txt
- Запустите приложение с помощью команды:
python water_drop_detection/main.py
- Страница документации может быть запущена через:
start docs\build\html\index.html
Работа с Docker:
- Команды для сборки и запуска проекта в терминале:
docker build . -t drop_detection
docker run drop_detection
- Образ можно скачать с Docker Hub по ссылке: https://hub.docker.com/repository/docker/alincnl/drop_detection
Информация о покрытии тестами: https://app.codecov.io/gh/HerrPhoton/Water_drop_detection
Тестовое изображение | Маска изображения | Маска + bounding box + окружность |
---|---|---|
U-Net: Convolutional Networks for Biomedical Image Segmentation
GitHub Actions
Docker Documentation