DOU Проектор: Cluise — как мы с помощью machine learning создаем мобильного стилиста
От редакции:
В рубрике DOU Проектор все желающие могут презентовать свой продукт (как стартап, так и ламповый pet-проект). Если вам есть о чем рассказать — приглашаем поучаствовать. Если нет — возможно, серия вдохновит на создание собственного made in Ukraine продукта. Вопросы и заявки на участие присылайте на
Данный адрес e-mail защищен от спам-ботов, Вам необходимо включить Javascript для его просмотра.
.
Идея
Представьте, что у вас есть личный стилист, который навсегда избавил вас от необходимости тратить время на выбор одежды. Представьте, что он всегда под рукой и его консультации совершенно бесплатны.
Меня зовут Кирилл Трусковский, я отвечаю за машинное обучение в Сluise — проекте, который создает мобильное приложение, помогающее юзерам комбинировать одежду из своего гардероба и покупать вещи, которые им действительно нужны.
Cluise позволяет легко оцифровать ваш гардероб — достаточно сфотографировать каждую вещь, а приложение распознает ее и отсортирует вещи по типу — а также составляет образы на каждый день с учетом ваших предпочтений и погоды. Кроме того, с Cluise 2.0, который вышел на прошлой неделе, мы предлагаем пользователям покупать вещи, которые будут удачно сочетаться с их гардеробом. Для этого нужно было включить в приложение функцию распознавания вещей и написать рекомендательную систему, которая помогла бы пользователям делать правильные покупки.
Реализация
Начнем с системы распознавания. Для нее мы используем Convolutional neural networks (CNN), как нельзя лучше зарекомендовавшие себя в этой области за последние годы. Предложил такой подход и реализовал первые результаты Тарас Середа. Сейчас Cluise классифицирует вещи по 54 базовым классам одежды. Для обучения CNN нужен датасет с размеченными классами (одна фотография — один класс). Количество вещей, которые загрузили наши пользователи, исчисляется миллионами, потому отобрать данные для обучения было не сложно. Сложно было заставить QA руками задать лейблы для обучающего датасета :)
Всего наша размеченная выборка содержит 150 000 фотографий одежды, из которых 120 000 мы используем как обучающую, приблизительно по 2000 изображения для каждого из класса, и 30 000 для валидации и тестирования.
Далее мы построили архитектуру CNN, которая состояла из последовательных слоев (convolutional layer — activation layer — pooling layer), и заканчивалась тремя fully connected layer и softmax на выходе. В итоге, наша сеть содержала 23 последовательных уровня. Во время обучения мы используем early stopping и делаем снепшот модели каждые 10 000 итераций. Алгоритм обучения — SGD. Как функцию ошибки мы использовали Cross entropy. С переобучением мы боролись, включая в нашу архитектуру dropout layer и применяя data augmentation.
То есть наша текущая версия модели основана на стандартных state of the art подходах к CNN. Время обучения занимает приблизительно
Система рекомендаций. Недавно мы выпустили новую версию приложения с системой рекомендаций для магазина. До запуска у нас не было никаких рейтингов или отзывов о товаре, но был гардероб пользователя, то есть подходящим решением для нас была content based recommender. То есть, основываясь на том, что уже есть у пользователя и что ему нравится, мы предлагаем ему похожие вещи для покупки и для создаваемых нами образов. В первой версии мы используем текстовое описание вещей, формируем наиболее предпочтительные описание из пользовательского контента и с помощью алгоритма tf-idf находим наиболее подходящие предложения для гардероба, в магазин и в образы, которые пользователь может составить с уже существующими у него вещами.
На эту идею нас вдохновил курс recommender-systems на Coursera, мы даже используем похожее ПО. С появлением рейтингов мы планируем подключить более сложные алгоритмы для рекомендательных систем. Также в будущем подключим к рекомендации CNN, так как c их помощью можно получить не только классификацию, но и очень информативное численное представление изображения для ранжирования результатов, выданных алгоритмом tf-idf.
Стек технологий:
— C++, cuda и Python — сама модель и обучение;
— AWS GPU instance — как железо для обучения;
— Python (Flask) — для использования в продакшене системы распознавания и рекомендаций;
— Elasticsearch — для поиска и работы tf-idf;
— MongoDB — для хранения данных;
— Docker — для деплоя.
Результаты
Результаты распознавания очень хорошие, для нашей области мы достигли точности 89%.
До недавнего времени мы были сконцентрированы на разработке и уделяли мало внимания продвижению продукта, но в нашем приложении уже сформировалось сообщество пользователей из Европы и Америки, которые регулярно используют функцию Dress me. О Cluise написали Washington Post, TheStar и другие мировые издания, о нем рассказали в эфире популярного американского телешоу The Rachael Ray. На днях нас включили в список 10 лучших стартапов Украины, мы заняли второе место в конкурсе UVCA challenge.
Мы продолжаем работать над улучшением рекомендательной системы с учетом первых отзывов и работаем над расширением функций приложения. Ищем в команду ML Engineer, Support Manager, QA. Буду благодарен вам за рекомендации.