Введение

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

Если вы загрузите помеченный набор данных, AutoML извлечет шаблоны и создаст настраиваемую модель машинного обучения. AutoML можно использовать с таблицами, текстом, изображениями и видео. Затем к обученной модели можно получить доступ через API или клиент, что позволит использовать возможности машинного обучения для вашего конкретного варианта использования. Это похоже на загрузку рецепта хлеба в машину, загрузку всех ингредиентов, и в течение нескольких часов выходит идеально испеченная буханка хлеба, даже не зная, как ее выпекать.

Недавно Google выпустил AutoML Edge для распознавания зрения. Это открывает множество новых инновационных возможностей. Раньше для доступа к модели, размещенной в облаке, можно было использовать только вызовы API, хотя вызов модели через API мог занимать больше секунды. Однако с помощью AutoML Edge вы можете загрузить модель и запустить ее на своем локальном компьютере, сократив время получения прогнозов от модели до миллисекунд. Таким образом, пользователи получают опыт в реальном времени.

В Incentro, компании, занимающейся цифровыми изменениями, мы всегда следим за новыми технологиями, которые могут привести к действительно инновационным преимуществам для наших клиентов. Как оказалось, AutoML Edge идеально подходил для бизнес-кейса, над которым мы работали. Заказчик - глобальный розничный продавец оптики. Бизнес-кейс заключался в разработке «волшебного зеркала». Волшебное зеркало представлено в офлайн-магазинах, и оно может направлять клиентов во время процедуры примерки, когда они покупают очки, и помогает им найти идеальную пару очков. В данном случае важны и скорость, и удобство модели. Поэтому мы сделали Proof of Concept (PoC) для представления клиенту. В этом сообщении в блоге я расскажу вам больше об этом волшебном зеркале и о том, как оно появилось.

Дело

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

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

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

К счастью для нас, недавно был выпущен AutoML Vision Edge. Пора это проверить!

Параметр AutoML

Выбирая AutoML Vision, вы сразу же сталкиваетесь с некоторыми вопросами: классификация или обнаружение объектов? Edge или в облаке?

Сначала я экспериментировал с обнаружением объектов в облаке. Однако вскоре я обнаружил, что маркировка объектов (в нашем случае очков) вручную занимала очень много времени: мы должны были нарисовать прямоугольник вокруг каждого объекта, присвоить ему метку, а затем перейти к следующему, снова и снова. снова более тысячи раз. К счастью, этот процесс можно легко автоматизировать с помощью стандартного API обнаружения объектов машинного зрения AutoML. API позаботится о маркировке очков на фотографиях, и, поскольку я уже знал, на каких фотографиях изображены очки, я мог просто вставить название очков на этикетку. Задача решена!

Ну… не совсем так. Иногда стандартный API Google Vision не обнаруживал очки должным образом или обнаруживал несколько очков на одном изображении. Поэтому снимки все равно нужно было проверять вручную - трудоемкая задача, которая сильно обескураживала. Разве у нас не было возможности просто расслабиться и насладиться шоу?

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

Но есть еще несколько вариантов, например поэкспериментировать с AutoML Vision Edge. Это сделало бы маркировку намного более простой задачей, поскольку нам не нужно было бы окружать объекты рамкой - все изображение просто получило бы (несколько) меток.

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

Распознавание лиц для уменьшения шума

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

Способ создания картинок

AutoML, как и машина для выпечки хлеба, нуждается в своих ингредиентах. В нашем случае это изображения. Их куча. Для PoC я решил тренировать нашу модель с 10 разными парами очков, некоторые из них почти идентичны. Эмпирическое правило состоит в том, что если человеческий глаз должен уметь видеть разницу между двумя парами очков, сколь бы малой она ни была, AutoML также сможет ее изучить.

Наполнившись уверенностью, я начал фотографировать на мобильный телефон - около 20 на пару очков. Я вырезал головы, чтобы уменьшить шум, загрузил почти бесшумные изображения в AutoML и непосредственно обучил первую модель AutoML. Через час модель была готова к развертыванию. Наполненный волнением и ожиданием, я создал простой API-интерфейс, используя встроенную веб-камеру своего MacBook, надел один из очков на лицо и… получил, мягко говоря, очень запутанные результаты. Похоже, модель делала случайные предположения, а не точный прогноз. Какой анти-кульминационный момент.

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

После покупки более совершенной веб-камеры я снова начал обучать модель AutoML. На этот раз я подумал, что было бы разумным решением перегружать AutoML изображениями - а какой способ сделать много изображений быстрее, чем снимать видео? Я попросил пятерых своих коллег выступить в качестве модели для моей модели (каламбур) и записал видео продолжительностью около 10 секунд для каждой пары очков. При 30 кадрах в секунду, 10 секундах на видео и 5 коллегах / моделях на пару очков это привело к 1500 изображениям на пару очков, чего должно было быть достаточно.

После загрузки и повторного обучения модели, ожидания еще в течение часа, загрузки модели и реализации ее в моем коде я был готов попробовать еще раз. Теперь, если бы я использовал новую веб-камеру, стоя за столом, результаты были хорошими. Но как только я встал со своего стола и попробовал модель где-нибудь в другом месте в офисе, результаты были не отличными, не ужасными (https://www.quora.com/What-does-not-great-not-terrible- означает ).

Так что я снова задумался. Возможно, проблема заключалась в разнообразии изображений, которые я загружал в AutoML, или, скорее, в отсутствии разнообразия. Кадры из сделанного мною видео, снятого с неподвижного места, были (логически) почти идентичными. Для следующей пары изображений я написал сценарий, который будет автоматически делать около 5 снимков в секунду, обрезать лицо, загружать их в облако, маркировать их и, наконец, передавать в AutoML. Я любезно попросил своих прежних коллег смоделировать еще раз и на этот раз использовал большее разнообразие источников света, мест и движений головы. Таким образом, я сделал еще пару сотен снимков на пару очков, удалил большую часть видеокадров, чтобы избежать переобучения, и снова попытал счастья. Эта штука с AutoML становилась привычным ритуалом: загрузка, ожидание в течение часа, загрузка модели, реализация ее в моем коде и - уф! Модель сработала! Время отклика было молниеносным, а результат был очень надежным: модель распознала каждую пару очков. Пора подключить его к интеллектуальному зеркалу и посмотреть, как это работает.

Предоставление результатов клиентам

Теперь, когда бэкэнд работает правильно, я могу посмотреть, что происходит во фронтенде. Каждые 200 мс интерфейс будет делать запрос к бэкэнду через вызов REST-API. Затем серверная часть делает снимок с помощью веб-камеры внутри зеркала и проверяет, есть ли на изображении человек. Если есть, серверная часть классифицирует, носит ли человек очки, и если да, классифицирует очки, наконец, отправляя данные обратно во внешний интерфейс - и все это занимает менее 200 мс для обработки следующего запроса.

Алгоритм обнаружения рассматриваемого человека

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

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

Сбор данных

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

Дальнейшие действия

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

Если это заставило вас задуматься, и вы ищете кого-нибудь, чтобы узнать о возможностях, или если у вас просто есть вопрос, вы знаете, где меня найти. Чтобы узнать больше, посетите www.incentro.com.