Распознавание одежды на изображении
Как не путать пиджак с пальто?

Исследование: Ольга Максименко

Что требуется для того, чтобы найти и выделить элемент одежды на фото? Две пары глаз живого человека или же натренированная на решение задачи модель искусственного интеллекта.

Детекция - одна из задач компьютерного зрения, когда на изображении находится объект и выделяется прямоугольником. Также как человеческий мозг, с помощью органов чувств, может визуально найти нужный объект на картинке и границы объекта, так и нейронная сеть - "находит" границы объекта.

Множество задач в области компьютерного зрения решаются с помощью свёрточных нейронных сетей (Convolutional Neural Networks), в дальнейшем CNN. Такая нейросеть по сути является сложной функцией от входа. Так как каждое изображение - это трехмерный вектор, где на месте координат пикселя определено значениепикселя в формате RGB (тремя значениями красного, зеленого и синего цветов).

Свертки - своеобразные фильтры имеющие меньший, чем картинка размер (обычно 3*3 или 5*5). Двигаясь последовательно по каждой возможной зоне изображения данным фильтром, производя операции сначала перемножения, а потом сложения.

Одной из популярных CNN моделей детекции, которая использовалась для решения задачи, является YOLO v3.

.
Подпишись на рассылку новостей о AI
Только полезные материалы о машинном обучении и искусственном интеллекте. Мы уважительно относимся к нашим читателям и рассылаем письма не чаше 1 раза в неделю!
Основными отличиями между yolo, yolov2, yolov3 это качества детектирования объектов, возможность распознавать более мелкие объекты на изображениях. Но по сути все версии yolo - сверточные нейронные сети. После прохождения ряда сверточных слоев, количество условных пикселей изображения уменьшается, но глубина(кол-во каналов) каждого из них увеличивается (т.е. размерности матрицы в пространстве ширины и высоты изображения, но растет в глубину).

Для каждого полученного "пикселя" в сжатой картинке нужно предсказывать класс объекта. Также, для каждого из полученных изображений мы можем предсказать разной формы прямоугольники. Задача алгоритма – минимизировать разницу между полученными прямоугольниками и разметкой нашей обучающей выборки. Результатом работы алгоритма является то, что нейросеть определяет нужный класс и расположение объекта.

Архитектура сверточной нейронной сети
Для задачи выделения областей на изображении, лучше использовать алгоритмы сегментации, такие как MASKR-CNN. Для описанной задачи используется подход классификации с выделением прямоугольной области.
Пример обработки изображения
В качестве основы для разработанного решения использовалась реализация yolo https://github.com/experiencor/keras-yolo3

Для обучения использовался датасет https://github.com/EscVM/OIDv4_ToolKit имеющий большой выбор размеченных классов, в том числе и одежды. Для своей задачи использовались только 8 классов одежды: джинсы, юбки, пиджаки, костюмы, пальто, купальники, шорты и платья. Для обучения каждого класса использовалось по 800 фото каждого класса для обучения и 300 для валидации.

Обучение проходило ~5 часов на google collab. График лоса можно увидеть ниже. Видно, что лосс еще может уменьшаться.

График утихания функции ошибки
Аverage_precisions для разных классов получился от 0.17 до 0.63, что выше случайного прогноза для 8 классов и достаточно для базового использования решения.

Для демонстрации результатов реализован сервер на Flask, который дает возможность загрузить фото и скачать картинку с уже размеченными моделью классами одежды, если такие нашлись на фото.

Ссылка на репозиторий https://github.com/maximenkooo/ClothesDetection

Распознавание одежды на изображении может быть использовано в электронной коммерции для управления ассортиментом товаров, для выявления вкусов пользователя, а также для создания сервисов для подбора одежды по вкусам пользователя.

И в качестве заключения, галерея с результатами работы алгоритма на примере постеров из фильмов:

DATA4 - разрабатываем ML решения индивидуально под клиента
Связаться с нами
Напишите контактные данные, чтобы мы связались с вами.