Боди, куртка, пара шпилек

История о том, как программисты покоряли мир умеренно высокой моды.

Давайте знакомиться. Мы — ad-tech компания Inventale. Специализируемся на Data Mining, Big Data и искусственном интеллекте. Наш основной продукт помогает крупным изданиям прогнозировать и оптимизировать ход рекламных кампаний, освобождая головы их аккаунт-менеджеров от бесчисленных формул, а рабочие столы — от стопок Excel-таблиц. Но наша экспертиза онлайн-рекламой не ограничивается.

Например, пару лет назад мы создали систему, предсказывающую успех фильма или сериала еще на стадии планирования. Эта задача привычная — прогнозирование, да и кинематограф мы уважаем. В этот же раз мы хотим рассказать о стартапе, который заставил нас окунуться в неизвестность. Один из партнеров предложил — а что, если создать карманного личного стилиста?

Небольшой экскурс в рынок цифровой моды

Подобрать наряд виртуально модники и модницы могут в основном по двум сценариям: «примерочная» и поиск по картинке.

Примерочные — выбор брендовых онлайн-магазинов. Для этого модель фотографируется во всем ассортименте магазина, а пользователь одевает ее по такому механизму:

Боди, куртка, пара шпилек

Во втором случае сервисы с помощью визуального поиска собирают аутфит с фото или видео по всем доступным онлайн-магазинам. Примеры: Styleshop от Amazon, Pinterest Lens, Style Match от Asos и Screenshop. Отечественный рынок в стороне не остается: ребята из Sarafan Technology еще в 2017 запустили аналогичный сервис для Instagram, а Яндекс осенью 2019 открыли для широкой аудитории Sloy с AR-примочками.

Из нестандартного: hands-free камера Echo Look от Amazon выберет из двух твоих нарядов тот, что по каким-то только ей понятным критериям смотрится лучше.

Ни один из этих инструментов в общем-то стилиста не заменяет. Они создают образ в вакууме, не связанный ни с твоим имеющимся гардеробом, ни с твоей внешностью. Echo Look — исключение, но с тем же успехом можно кинуть фото другу, вкусу которого доверяешь. Источник вдохновения перед шоппингом? Вполне. Стилист? Едва ли.

В общем, в цифровом измерении моды не без пробелов. Их мы и решили восполнить приложением, которое подбирало бы образ из личных вещей с учетом заданного стиля, повода, погоды, настроения Славы Зайцева, положения Сатурна на небосводе и т.д.

А самое главное — оно бы принимало в расчет физические характеристики пользователя: фигуру, цветотип, типаж, возраст, создавая по-настоящему персонализированные образы. А еще бы видело, когда до безупречного лука чего-то не хватает, находило это что-то в онлайн-магазине и отрисовывало на виртуальной модели пользователя.

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

Proof of Concept

Для начала предстояло выяснить, можно ли вообще переложить знания и опыт стилиста на машинный язык. Спойлер — можно. В общих чертах процесс выглядит следующим образом:

  1. Запираешь стилиста и аналитика в одной комнате.

  2. Ждешь.

  3. Получаешь базу знаний и оцифровываешь ее.

  4. Проверяешь, какие образы предлагает система.

  5. Повторяешь, пока не получится хорошо.

Третий пункт распадается еще на два этапа. Сначала мы набором атрибутов описывали человека (возраст, типаж, тип фигуры и т.д.) и каждый элемент одежды (материал, цвет, фактура, форма, тип горловины, рукав и т.д.), а затем прописывали правила их сочетания. Данные обрабатывала нейросеть, построенная на правилах (rule-based neural network).

Знаниями и опытом с нами делилась Алиса Жигалина — профессиональный стилист из Москвы, соосновательница школы мод Izum. До того, как стать нашим экспертом, она успела посотрудничать и с «Модным приговором», и с СТС, и с Novikov group, и с Carlo Pazolini.

Для проверки гипотезы мы ограничились самым-самым базовым женским весенне-летним гардеробом. Никаких аксессуаров и прочих изысков, только пять стилей и минимальный набор атрибутов. Для начала мы описали два тестовых гардероба по 800-1000 вещей каждый, а к ним — модель хранения знаний на пять с лишним тысяч правил.

Понятно, что никому в здравом уме (кроме нас) не сдался виртуальный стилист для выдуманного гардероба — он нужен, чтобы наводить порядок в шкафах пользователя. А для этого гардероб надо как-то оцифровать.

Глазами виртуального стилиста должна была стать камера телефона — сложно найти что-то более подходящее для визуального сервиса, чем фото. По крайней мере, так думали мы. Чтобы система сама распознавала одежду по фото, мы прикрутили к ней AI. Обучали ее на юбках и штанах всех сортов: джинсы, брюки, бойфренды — вот это вот все.

За три недели AI навострился относительно неплохо различать одежду, что, конечно, сильно облегчило работу. Поначалу для проверки адекватности правил рекомендаций мы тратили уйму времени на проставление атрибутов к каждой вещи от и до. Теперь наша роль сводилась к уточнению мелочей: тип и фактура ткани, вид декора или вырез горловины (их, оказывается, десятки, ребят).

Пришла пора испытать систему в деле. Первым она породила вот такой авангардно-минималистичный look для вечернего стиля:

Боди, куртка, пара шпилек

Сейчас можно дать волю фантазии и представить, как пятеро серьезных бородатых программистов в рабочее время с жаром дискутируют на тему «боди без низа — это шик и блеск или стыд и срам» (пишите свое мнение в комментариях). Копья ломались напрасно, поскольку последнее слово все равно было за Алисой. С этого момента итерационный процесс выглядел так: «хихиканье эксперта — доработка правил — тестирование рекомендации».

Хоть творческие позывы системы не всегда встречали всеобщее одобрение, подход к генерации рекомендаций оказался очень даже жизнеспособным. Что до распознавания одежды, результат не удивил:

  • очень важно качество фотографии и расположение вещи в кадре;

  • многие атрибуты AI распознает очень хорошо, но отдельные параметры пользователю придется уточнять (например, фактуру ткани).
Пример работы системы
Пример работы системы

В перерывах между обсуждением новой коллекции Balenciaga и подбором классных вещичек для тестового гардероба, надо было еще успеть подумать над визуализацией. Сходу набралось с десяток вариантов — от простого коллажа до реалистичной 3D-модели с текстурами. Наш выбор пал на 2D-визуализацию. Одевать 3D-копию пользователя — дорого, муторно и «как-нибудь в следующей итерации».

И даже с 2D горизонт работ был огромен. По нашим прикидкам, одних только распространенных вариаций вещей из базового гардероба набегало 10 тысяч <шутка про «нечего надеть»>.

Поэтому вместо того, чтобы рисовать, например, десятки блузок по отдельности, мы комбинировали один корпус с разными рукавами, как конструктор. На блузках же и отрабатывали подход — нарисовали все вариации, наложили текстуры порядка двадцати материалов и примерили каждую на дефолтную модель.

Была мысль наложить на модель фото пользователя для пущей реалистичности. Но очень скоро стало ясно, что для этого оно должно идеально ложиться на шаблон. Не то чтобы мы сомневаемся в чьих-то навыках делать селфи, но риски сравниться в художественной выразительности с редактором персонажей The Elder Scrolls IV: Oblivion были налицо.

Боди, куртка, пара шпилек

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

Итак, мы выяснили: перевести знания стилиста на машинный язык можно; нейронка отличает свитер от носков; для визуализации одежды проще всего собирать ее из шаблонных деталей, как Лего. Оставалось сложить все это вместе и унести в массы.

Minimum Viable Product

Мы решили, что самым оптимальным форматом для виртуального стилиста будет мобильное приложение. Базовая конфигурация продукта уже была бы на порядок круче того, что имелось на рынке, но взлетит ли — вот в чем вопрос. Доверят ли люди бездушной железяке свой внешний вид? Захотят ли делиться фотографиями вещей?

Мы провели опрос среди ЦА, получили добро и выяснили, в каких сценариях сервис был бы теоретически полезен. А чтобы понять, что будет востребовано на деле, решили перед запуском собственно MVP создать beta-версию beta-версии с минимумом функций, обкатав ее на тест-группе из полусотни женщин 16-50 лет.

Pre-MVP или Proof of Concept II

Чтобы наш стильный AI мог других посмотреть и себя показать, нужно было:

  • расширить модель знаний (добавить недостающие предметы одежды базового гардероба и атрибуты);

  • расширить список поводов (вечеринка, день рождения тещи, публичное выступление, поход в кино, прогулка в лесу и т.п.);

  • дополнить систему правил с учетом новых вводных;

  • откалибровать рекомендательную систему для новых требований.

Поселить стилиста для начала решили в приложение на iOS.

На следующие два с половиной месяца мы с головой ушли в [мир Dolce & Gabbana] работу: описали большую часть возможного гардероба, исключив аксессуары и зимние вещи, и расширили описание атрибутов одежды вдвое (вплоть до типа застежки). Число правил возросло в 15 раз, перевалив за 70 тысяч. Виртуальный стилист превратился в цифрового Голиафа, и вернуть контроль над ним могла только алгоритмическая оптимизация.

Чтобы понять, в чем проблема, вернемся к устройству системы.

Что там под капотом

Машине не надо наряжать человека. Машине надо оптимально заполнить элементами [одеждой] 6-8 слотов [частей тела] в рамках заданного стиля и с учетом характеристик пользователя. Каждому слоту соответствуют отдельные атрибуты — параметры пользователя и вещей.

В идеале все атрибуты должны были определяться собственными нейронками по фото, но из-за жестких сроков мы не трогали распознавание с прошлого этапа. Алгоритм отличал грубо говоря штаны от куртки и джинсы от брюк, частные детали все еще вводили вручную.

Заполнение слотов подчинялось предписывающим и запрещающим правилам. Сочетания атрибутов, а вместе с ними и итоговый наряд получали рейтинг

Боди, куртка, пара шпилек

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

Но система перебирала необъятное количество комбинаций. А мы стремились к реал-тайм рекомендациям и обработке запроса за пять секунд. Чтобы предотвратить комбинаторный взрыв и уложиться во временные рамки, мы использовали метод ветвей и границ, и в целом он с поставленными задачами справился, но:

  1. Алгоритм сокращал число комбинаций за счет того, что отбирал оптимальные сочетания последовательно, заполняя слот за слотом и отсеивая варианты на каждом шаге. Иногда сочетания, отобранные на промежуточных итерациях алгоритма, не давали оптимального результата в конце. Можно собрать идеальный костюм, а потом обнаружить, что к нему нет подходящей обуви.
  2. При текущей загрузке алгоритм сбавил время обработки запросов до нескольких секунд. Но в перспективе, когда мы снова увеличим гардероб, его быстродействия будет недостаточно. Пострадает либо скорость ответа на запрос, либо качество рекомендаций. Это не нужно ни нам, ни пользователям.

Поэтому на будущее мы рассмотрели и другие методы машинного обучения. Наша задача сводилась к регрессионному анализу:

  • есть множество объектов — готовые луки и комбинации отдельных вещей;

  • каждая вещь имеет наборы своих атрибутов;

  • каждая комбинация или лук оценивается экспертом (а в перспективе и пользователями) в диапазоне 0-10.

Нам нужна была модель машинного обучения, которую можно обучить на оценках эксперта и периодически переобучать на новых данных (обратная связь от пользователя, новые тренды и т.п.), чтобы предсказывать рейтинг нового лука или комбинации вещей.

Мы рассматривали метод наивного Байеса, опорных векторов, решающих деревьев и т.д., но остановились на факторизационных машинах, так как они лучше всего подходят для разреженных матриц. У каждого предмета одежды есть свои отдельные атрибуты: форма каблука обуви, тип ворота и рукавов блузки, крой брюк, лямка сумки. Поэтому наша матрица объектов и атрибутов была бы сильно разрежена — для каждого объекта задана лишь небольшая часть общего числа атрибутов.

К тому же мы успели плотно поработать с факторизационными машинами в рамках основного продукта — оптимизации онлайн-рекламы и прогнозирования рекламных показов и конверсий. ФМ помогают нам предсказывать клики с высокой точностью, несмотря на то что в запросах на показ рекламы зачастую пропущены многие параметры. Абсолютно разные предметные области оказались очень схожи в плане обучения и разреженности моделей.

Мы проанализировали готовые библиотеки, которые используются для решения задач на базе ФМ и нашли две наиболее распространенные:

Прочитав многочисленные отзывы и поигравшись с каждой самостоятельно, решили остановиться на xLearn, потому что она:

  • имеет более удобный API с разделением на фазы обучения и предсказания;
  • быстрее libFM, если верить графикам на основной странице проекта;
  • да и что там греха таить, имеет больше звезд на гитхабе.

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

Что там вокруг капота

За полтора месяца мы придумали, согласовали с заказчиком и разработали с нуля приложение на iOS. Пользователю нужно было загрузить свое фото в личный кабинет, указать тип фигуры и возраст.

Боди, куртка, пара шпилек

Чтобы добавить вещь в виртуальный гардероб, достаточно было сфотографировать ее на нейтральном фоне. После этого у нас было 12 часов на то, чтобы проставить все недостающие атрибуты и определить типаж пользователя.

Нейронка сортировала загруженные вещи: рубашку к рубашкам, платье к платьям. Идеальный порядок как после генеральной уборки. Если бы в жизни можно было так же — кинул вещь в сторону шкафа, а она сама на свое место.

Боди, куртка, пара шпилек

Нам было важно, чтобы рекомендации учитывали не только внешность, но и предпочтения пользователя. Для этого мы прикрутили кнопки «лайк», «дизлайк» и «избранное». Пользователь мог оценить предложенный образ, сохранить в «избранное», оставить к нему комментарий и закрепить отдельную вещь или категорию вещей, которая обязательно должна быть в образе. Механизм самообучения подстраивал рекомендации на основе обратной связи, а также мог регулярно дополнять и обновлять базу знаний вслед за трендами.

Параллельно с личным гардеробом в приложение была добавлена имитация магазина на 1000 вещей: система подсказывала, чем разнообразить образы и как вещи из магазина будут сочетаться с уже имеющимися.

К концу этапа у нас на руках была продвинутая система рекомендаций. В отличие от основной массы подобных сервисов, наша система не просто копировала луки с картинок, а создавала образы под конкретного человека из его реальных вещей.

Она учитывала подробное описание одежды, личные параметры пользователя и внешние факторы: заданный стиль, характер мероприятия, сезон, все предыдущие оценки и пожелания пользователя. Заполняешь информацию о себе, загружаешь гардероб, нажимаешь на «Подобрать образ» и за 5-8 секунд получаешь всевозможные сочетания в виде коллажа из вещей.

Боди, куртка, пара шпилек

Приложение помогало выжать максимум из имеющегося гардероба и предлагало «правильные» обновки из магазина. По сути, рекомендации системы были сопоставимы с работой профессионального стилиста по адекватности, сложности и эстетике.

Настало время испытать продукт в деле.

Полевые испытания

Мы запустили приложение на TestFlight и разослали приглашения первой части фокус-группы вместе с инструкциями. iOS приложение работало на всех моделях iPhone, начиная с пятого. Пользователи начали загружать первые фотографии, кто-то одну-две, кто-то сразу полсотни. Запрашивали образы, ставили лайки и дизлайки, оставляли комментарии — дело закрутилось. За месяц приложением воспользовались около 80 человек.

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

Основное препятствие — это найти время, чтобы перефотографировать и загрузить всю свою одежду. Около 2/3 фокус-группы загружали либо с десяток вещей, либо вообще ничего, игрались с тестовым гардеробом, а вскоре забрасывали и его. Но это специфика задачи: чтобы разобрать гардероб, нужно участие его владельца.

В жизни профессиональный разбор занимает несколько часов и влетает в копеечку. Мы этот этап упростили до двух операций — сфотографировать вещь и загрузить фото в приложение, но полностью от него не избавиться.

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

На нескольких девайсах загруженные фотографии пропадали так же упорно, как ускользал от нас виновный в том баг. А к рекомендательной системе иногда заглядывала Муза, и то тут то там проскакивали экспериментальные аутфиты, достойные подиума и софитов, но сомнительные для будней.

Ну и организационный прокол: тестирование пришлось на октябрь-ноябрь, в то время как система была рассчитана на весенне-летний сезон. Из-за этого пласт гардероба оказался не у дел. Особенно обувь. Особенно босоножки.

И все же большинство девушек оценило приложение положительно, включая тех, кто загрузил мало фото либо не загрузил ни одного и довольствовался рекомендациями на основе ассортимента демо-магазина. Общее впечатление — приложение полезно и очень кстати, подкидывает новые идеи, помогает подобрать ту самую сумочку.

Тестовый магазин вообще зашел на ура. Изначально мы считали, что нашим конкурентным преимуществом станет персонализация: алгоритмы подбирают человеку образ из его собственных вещей, подходящий конкретному случаю и личным предпочтениям. Но на практике возможность сразу проверить, подружится ли кандидат на место в шкафу с остальным гардеробом, оказалась не вишенкой на торте, а одним из основных блюд.

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

Поиск инвесторов

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

В приложении изначально задумывался еще календарь образов и система тегов для удобной навигации и планирования. Было место и другим фишкам: конструирование одежды, 3D-моделирование пользователя и одежды на основе фотографий, примерка причесок и макияжа, элементы соцсети — развернуться можно широко.

Дело стало только за бюджетом. Полноценная версия тянула на несколько сотен тысяч долларов, а с учетом маркетинга и продвижения — и вовсе до миллиона.

Опыт поиска инвесторов у нас имеется. Мы продвигали на рынок как наш основной ad-tech продукт, так и проекты, в которых мы были аутсорс-командой. Если интересно, можем рассказать об этой кухне в отдельной статье. Но на этот раз мы выступали в качестве исполнительной стороны, поэтому особых подробностей не знаем.

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

И по сей день по офису снуют печальные, но неотразимые программисты. Вынужденные нести бремя красоты и утонченного стиля в одиночку, они все еще не потеряли надежду на продолжение этой истории.

#ML #машинноеобучение #разработкаприложений #мода

99
2 комментария

А можно прислать свое фото и получить консультацию приложения? :)

2
Ответить

Конечно! Подберем боди на любой случай жизни под ваш цветотип, без регистрации и смс

Ответить