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

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

Предыстория: форма глаз и цвет лица

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

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

Эта проблема

Давайте формализуем проблему: для набора изображений лиц и небольшого количества изображений, помеченных людьми (цвет глаз, форма век и т. Д.), Найдите интуитивно понятный показатель визуального сходства между глазами ( «У этого гуру красоты глаза, похожие на твои!») И классификатор, который фиксирует свойства, помеченные людьми. В этом сообщении блога мы сосредоточимся на сходстве глаз; последующие меры будут решать задачи классификации.

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

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

  • Поза глаз / направление взгляда
  • Особые условия освещения (и, конечно, фильтры Insta)
  • Какой макияж уже нанесен

Нормализация изображения с помощью проективного преобразования

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

В то время как кадрированные изображения глаз будут иметь много очевидных структурных различий (например, глаз не в центре или повернут из-за наклона головы и т. Д.), Проективное преобразование позволяет нам «деформировать» изображения так, чтобы те же самые ориентиры глаз гарантированно занимают одни и те же координаты.

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

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

Репрезентативное обучение с триплетной потерей

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

Проще говоря, мы обучим сверточную нейронную сеть (CNN) потреблять изображения глаз, а затем вывести векторы, которые более похожи для одного и того же человека, чем для разных людей. Сеть научится выводить стабильные / непротиворечивые изображения глаз человека в различных контекстах.

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

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

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

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

Комбинирование вложений для сходства на уровне человека

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

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

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

Заключение и дальнейшая работа

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

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

Весь код и результаты, представленные в этом посте, использовали NumPy, SciPy, Matplotlib, Chainer, dlib и архитектуру SqueezeNet. Все изображения, представленные выше, предназначены исключительно для некоммерческих иллюстративных целей. Не стесняйтесь обращаться к нам, чтобы узнать больше о нашем подходе и реализации!

Приходите работать с нами!

Если такие проблемы вас интересуют, вам понравится работать в MIRA BEAUTY. Мы - гибкое и трудолюбивое сообщество опытных хакеров, специалистов по обработке данных и заядлых энтузиастов красоты - и мы нанимаем их :). Приходите и помогите нам организовать знания коллективного разума и произвести революцию в электронной коммерции!