Сегодня на рынке изобилие умных домашних устройств. Часто они становятся своего рода центром дома – инструментом, к которому обращаются домочадцы с разными задачами: узнать погоду, найти фильм, заказать еду или такси. Некоторые сценарии платные, и проводить оплату хочется, с одной стороны, быстро и удобно, без лишних телодвижений – чтобы не нужно было брать в руки телефон, заходить в онлайн-банк, вводить реквизиты или коды из пуш-уведомлений. А с другой стороны, хочется безопасности и защищённости, чтобы ребёнок, например, не заказал ящик мороженого без ведома взрослых. Мы в SberDevices занялись вопросом персонализированных оплат на наших умных устройствах и придумали, как это сделать с помощью распознавания лица и голоса пользователя. В области лицевого распознавания нашим технологическим партнёром стала команда VisionLabs.
Как это работает
Наши девайсы SberBox Top и SberPortal, в отличие от обычный умных колонок, имеют камеру. Это позволило сделать нам двухфакторную аутентификацию по лицу и по голосу. Общий пайплайн оплаты выглядит так:
Допустим, пользователь хочет оплатить собранную корзину продуктов или подписку. Если он привязал банковскую карту и настроил персонализацию – сохранил на устройстве голос и изображение своего лица, ему достаточно посмотреть в камеру и прочитать вслух 6-значный случайный набор цифр на экране устройства. Человек, данных которого в системе нет, провести оплату с привязанной карты не сможет. При этом её владелец может гибко настраивать доступы для домочадцев – чтобы, например, жена или муж тоже могли проводить оплаты с этой же карты. Но для этого им, конечно, тоже нужно будет сохранить на устройстве свое изображение и "слепок" голоса. Удалить их можно в любой момент.
Распознавание лица
На первом этапе происходит обработка лица, которая в свою очередь состоит из двух шагов: детектирование лиц и извлечение дескрипторов. Под дескриптором обычно понимают математический вектор заданного размера, который описывает положение точки в пространстве признаков. Решают эту задачу, конечно же, нейронные сети.
На первом шаге для детектирования лиц за основу взят детектор RetinaFace. Первое преимущество этого детектора – использование feature pyramid. Для детектора очень важно находить лица, в какой бы близости к камере они ни находились. В первых детекторах применялся подход sliding window, когда изображение делилось сеткой на кусочки и каждый из них отправлялся в классификатор для подтверждения, что на нём изображено лицо.
Проблема заключается в сетке: в зависимости от размера её ячеек в каждую может попасть одно лицо, несколько лиц или вообще некоторая часть близко расположенного к камере лица. Для решения этой проблемы придумали Image pyramid.
Теперь классификатор видит изображение в разном размере и сможет на одном из уровней правильно обработать изображение лица нужного размера. Проблемой становится объём данных для обработки: вместо одного изображения нужно обработать целый массив разномасштабных копий, плюс обработка каждой копии происходит отдельно и нейронная сеть не может брать информацию из соседних копий.
Для решения этой проблемы придумали feature pyramid. В этом подходе разномасштабная обработка производится не на уровне исходного изображения, а на уровне нейронной сети. Это позволяет обрабатывать только исходное изображение и, как показала практика, повысить качество за счёт обмена признаками между слоями сети.
Ещё одно преимущество RetinaFace – мультизадачность. За один проход нейронная сеть возвращает не только решение о том, присутствует ли лицо на изображении, но и координаты, где оно находится, а также основные лицевые точки. Эта информация необходима для дальнейшей обработки изображения. Кроме того, было доказано, что мультизадачность при обучении нейронных сетей повышает их точность на основной задаче. В итоге полный пайплайн детектирования лиц выглядит следующим образом:
Вторым шагом идёт извлечение дескрипторов. Для этого найденное лицо вырезается по координатам детектора из исходного изображения и выравнивается.
Подготовленное изображение отправляется в массивную нейронную сеть для извлечения дескрипторов. За основу мы взяли глубокую нейронную сеть ResNet. На рисунке схематично представлена её блочная структура на 34 слоя:
Преимуществами этой архитектуры является блочная структура и наличие skip-connections (чёрные стрелки), по которым информация пробрасывается в обход слоёв на следующий уровень. Изначально skip-connections придумали для решения проблемы обучения очень глубоких нейронных сетей. Для нас же преимуществом является то, что такую архитектуру можно быстро и легко модернизировать на любом этапе обучения без значительных просадок в качестве.
Задача по извлечению дескрипторов называется metric learning, её суть заключается в том, чтобы отобразить входное изображение в пространство меньшей размерности, причём сделать это так, чтобы получившееся отображение подчинялось наперёд заданным правилам. Обычно это правило заключается в том, чтобы похожие объекты лежали в пространстве близко (например, в терминах Евклидова расстояния), а непохожие – далеко. Для примера можно рассмотреть отображение фотографий автомобилей:
На картинке явно прослеживается группировка по форме и цвету автомобилей. И если предположить, что на картинке представлена наша база фотографий, для каждой из которых у нас есть расшифровка что это за автомобиль, то при поступлении к нам новой фотографии для распознавания мы извлечем из неё дескриптор и найдём ближайший в базе, посмотрим на расшифровку и выдадим её как ответ. Также эта технология используется для поиска товаров по картинке и в целом для поиска похожих картинок.
В нашем случае нам необходимо такое отображение, при котором дескрипторы лиц с разных фотографий одного человека лежали бы близко друг к другу, а дескрипторы лиц разных людей – далеко. Тогда при оплате мы сравним текущий дескриптор с дескриптором, который получен из фотографии при регистрации и, если окажется, что расстояние между ними мало, вернём системе ответ, что мы вас узнали.
Работа с дескрипторами очень упрощает жизнь: не нужно хранить и передавать фотографии, всё происходит прямо на девайсе, а для дальнейшей работы необходимо сохранить только дескриптор, который весит меньше килобайта, что здорово экономит ресурсы.
Распознавание голоса
На втором этапе аутентификации пользователя мы будем распознавать голос. Для сбора голоса мы подготовим и покажем на экране случайный 6-значный код, который необходимо прочитать. Этот код отправляется в ASR для проверки совпадения прочитанных цифр с теми, что вы увидели на экране. После совпадения необходимо снова получить дескриптор, но уже голосовой. В целом здесь подход идентичный лицевому – массивная нейронная сеть и metric-learning. Но вызов заключается в том, что в отличие от фотографии лица звук – это зависимая от времени информация. Сделав снимок с камеры, мы получаем сразу всё лицо, а вот с голосом ситуация обстоит по-другому.
Характеристики голоса накапливаются со временем в течение произнесения какой-либо фразы. Одну и ту же фразу можно произнести быстро или медленно. Это влияет на количество информации в единицу времени, а также на то, что в отличие от картинок, нейронные сети, принимающие на вход звук, должны уметь работать с данными разной длины. В случае с изображениями такой проблемы нет, потому что их всегда можно сжать до нужного размера.
Еще одна проблема – сырой формат звука. Обычно он представляет собой временной ряд колебаний амплитуды с 16000 отсчетами в секунду. Заставить нейронные сети работать с таким форматом очень сложно, поэтому для повышения качества используют разложения сигнала в спектр c постобработкой.
Исходный сигнал, представленный на верхнем рисунке, преобразуется в спектр частот посредством Оконного преобразования Фурье, а далее переводится в Mel-шкалу на нижнем рисунке. Mel-преобразование имитирует нелинейное восприятие звука человеческим ухом, которое более разборчиво на низких частотах и менее разборчиво на высоких.
Для решения возникших проблем существует архитектура TDNN – Time delay neural network. Первая часть архитектуры приведена на рисунке.
Смысл этой части заключается в том, чтобы обеспечить широкий контекст каждого выхода в конце архитектуры для агрегации, разнесённой во времени информации исходного сигнала. В итоге каждый из выходов t собирает в себе информацию из множества отсчетов на входе.
На выходе формируются промежуточные дескрипторы, которые всё ещё остаются зависимыми от времени – то есть выход из этой части будет пропорционален входу. Такой дескриптор не подходит, потому что не очень понятно, как сравнивать дескрипторы разной длины. Чтобы это исправить, производится подсчёт статистик промежуточных дескрипторов по времени. Высчитываются средние значения и стандартное отклонение. Далее ещё несколько нейронных слоёв – и можно забирать дескриптор.
На последнем шаге мы сравниваем голосовой дескриптор с дескриптором полученным при регистрации голоса и, если они совпадут так же, как и лицевые, то оплата пройдёт, иначе в ней будет отказано.
Нейросетевые технологии позволяют нам делать сервисы ещё удобнее и безопаснее. Теперь вы можете гибко настраивать доступ к привязанной карте для членов семьи и без лишних усилий и траты времени проводить оплаты, взаимодействуя только с умным устройством.
Если вам интересны описанные технологии и их применение, у вас есть опыт в computer vision или audio processing и вы хотите присоединиться к команде SberDevices, присылайте мне своё резюме на Хабре(@Tkinai) или в Slack ODS(@nikt).