Недавно завершил проект глубокого обучения по моделированию цвета волос в реальном времени. Моделирование работает по-разному, например, автоматическое определение длинных волос и коротких волос для окрашивания. Вместо того, чтобы добавлять только один цвет, пользователи могут по своему выбору добавлять несколько цветов к волосам, например цветовой градиент.
Технологии
Модель U-Net является пионером в области сегментации изображений. Использовали его с моделью трансферного обучения MobileNetV3 с нашими пользовательскими слоями, такими как гибридная модель, для получения точной сегментации волос. Набор данных для обучения модели содержит около 26 918 изображений. В качестве функции потерь коэффициент кости оказался почти идеальным.
Настройка цвета, как в реальных сценариях, была основной проблемой, которую необходимо было решить в основном. Вначале работал над цветами на основе RGB, которые казались искусственными. Проблема решена с помощью формулы окраски HSL (реализованы некоторые настраиваемые конвейеры для достижения правильного освещения и цвета с учетом яркости окружающей среды).
Библиотеки: TensorFlow, NumPy, OpenCV, Matplotlib, Scikit-learn, strong>Pillow, Mediapipe, AWS, Docker, Nginx, Flask
Рабочий процесс
Особенность — 1
После сбора набора данных мы прошли несколько процедур предварительной обработки для повышения точности. Дополнение, сопоставление, пакетная обработка, предварительная выборка и т. д. — некоторые из наших методов предварительной обработки. Мы получили точность 96% после проведения процесса обучения.
С нашей обученной моделью маски для волос можно получить из кадров изображения/видео. На следующем шаге необходимо извлечь яркость всех пикселей волос, которая зависит от окружающей среды. Здесь соответствующее значение яркости (L) для пикселя вычисляется с помощью индивидуального подхода, который делает свое дело. После этого попиксельная яркость (L) присоединяется к оттенку (H) и насыщенности (S). Если значения HSL подходят, пиксели окрашенных волос будут блестящими и шелковистыми. Эта блестящая поверхность подтвердит естественный результат имитации цвета волос.
Результаты в разных цветах:
Особенность - 2
Окрашивание волос омбре (или нанесение на волосы нескольких цветов) стало для нас новым вызовом. Без измерения длины волос каждого человека совершенно невозможно применять цветовые эффекты, такие как градиент. Здесь был измерен ROI(Область интереса) для расчета точной длины волос, чтобы впоследствии мы могли выполнить многоцветное окрашивание. Часть техники окрашивания была аналогична предыдущей (один цвет). Но вместо того, чтобы использовать одно и то же значение H, S для всех пикселей волос, нам пришлось инициализировать одномерный цветовой фильтр с разными значениями H, S для всех пикселей волос. для имитации двухцветных градиентов. Этот фильтр используется для имитации многоцветной окраски.
Результаты в разных цветах (несколько):
Строительный API
Наконец, самой важной частью было развертывание проекта и получение API для внешнего интерфейса. Здесь был выделен экземпляр AWS EC2 с графическим процессором с 24 ГБ памяти.
Модель dockerized можно масштабировать и использовать на всех типах серверов. Приложение обязательно должно взаимодействовать с другими приложениями, а также с зависимостями (пакетами). Docker позволяет лучше управлять всеми этими взаимодействиями, поскольку каждый микросервис обеспечивает масштабируемость и простое добавление или удаление независимых сервисов. Это причина нашего использования докера.
В качестве серверной части мы использовали Flask, микровеб-фреймворк с Nginx и uWSGI.
Мы использовали uWSGI для создания сервера из наше приложение Flask, и мы прячем сервер за обратным прокси-сервером Nginx для решения таких задач, как безопасность и балансировка нагрузки. В результате мы можем обрабатывать огромное количество трафика здесь.