Перевод | Базовый лагерь технологий искусственного интеллекта (общедоступный идентификатор: rgznai100)
Участвовать | Линь Чунсюань
Править | Фэй Ци
FaceID — одна из самых популярных функций нового iPhone X, заменившая TouchID в качестве передового метода разблокировки.
Некоторые конкуренты Apple продолжают использовать традиционный метод разблокировки по отпечатку пальца, а метод разблокировки FaceID явно революционный: взгляните на себя, и телефон автоматически разблокируется.
Для реализации технологии FaceID Apple использует продвинутую и компактную фронтальную камеру глубины, которая позволяет iPhone X создавать 3D-карту лица пользователя. Кроме того, в нем также представлена инфракрасная камера для захвата изображения лица пользователя, а снимки, которые она делает, более устойчивы к изменениям света и цвета во внешней среде. Благодаря глубокому обучению смартфоны могут распознавать лицо пользователя в мельчайших деталях. Поэтому, когда пользователь ответит на звонок, телефон автоматически распознает и разблокируется. Но, возможно, еще более удивительным является его безопасность: технические специалисты Apple говорят, что FaceID имеет коэффициент ошибок всего 1: 1 000 000 по сравнению с TouchID.
Меня очень интересует Apple FaceID и технология глубокого обучения, стоящая за ним, и я хочу знать, как использовать глубокое обучение для реализации и оптимизации каждого шага этой технологии. В этой статье я описываю, как реализовать алгоритм, подобный FaceID, с помощью фреймворка глубокого обучения Keras, объясняю различные архитектурные решения, которые я принял, и представляю некоторые окончательные экспериментальные результаты с использованием Kinect. Kinect — очень популярная камера глубины RGB, которая дает такие же результаты, как и фронтальная камера iPhone X.
▌Понять, как работает FaceID
Процесс настройки FaceID▲
Во-первых, нам нужно проанализировать, как работает FaceID, чтобы понять, как он работает на iPhone X. Но перед этим давайте поговорим о некоторых основных операциях TouchID: когда пользователь использует TouchID, он должен несколько раз нажать на сенсор, чтобы инициализировать и записать отпечаток, после примерно 15-20 касаний под разными углами информация об отпечатке будет на экране. Завершите регистрацию, и TouchID готов к работе.
Точно так же использование FaceID также требует, чтобы пользователь зарегистрировал свое лицо.Процесс очень прост: пользователю нужно только смотреть на экран телефона естественным образом, а затем медленно поворачивать голову по кругу, чтобы записать информацию о лице в разные позы. Таким образом, пользователь может использовать функцию разблокировки лица мобильного телефона.
Такой быстрый процесс регистрации может рассказать нам кое-что об алгоритме глубокого обучения, лежащем в основе FaceID. Например, нейронные сети с поддержкой FaceID делают больше, чем выполняют классификацию.
Apple Keynote представляет новые функции для iPhone X и FaceID▲
Для нейронных сетей задача классификации объектов означает, что модель должна угадать, соответствует ли лицо пользователю. Обычно решение такого рода задач предполагает использование некоторых данных для обучения модели, чтобы модель научилась отличать истинное (True) от ложного (False). Однако этот подход нельзя применить к обучению модели для FaceID, что отличается от других случаев глубокого обучения.
Во-первых, нейронную сеть необходимо переобучить на новых данных, полученных с лица пользователя, что требует много времени, энергии и сложных данных для обучения лица, что нецелесообразно. Конечно, вы также можете использовать трансферное обучение для тонкой настройки предварительно обученной сети, и ситуация может улучшиться, но кардинально проблему это не решит. Кроме того, этот метод не может использовать преимущества сложных сетей, обученных в автономном режиме в лабораториях Apple, что делает невозможным развертывание более продвинутых сетевых моделей на мобильных телефонах.
Итак, как именно проходит обучение модели FaceID?
Фактически, FaceID управляется сверточной нейронной сетью, похожей на сиамскую. Эта сетевая модель обучается в автономном режиме компанией Apple, которая сопоставляет информацию о лицах с низкоразмерным скрытым пространством и максимизирует разницу между разными лицами за счет контрастных потерь. Таким образом, вы получаете точную структуру модели, пригодную для однократного обучения, которая способна изучать признаки выборки и выполнять предполагаемую классификацию всего с несколькими обучающими выборками.
▌Сиамская нейросеть и ее преимущества
В общем случае он состоит из двух одинаковых нейронных сетей, которые делят между собой все веса. Эта сетевая структура может вычислять расстояния между определенными типами данных, например изображениями. Передайте данные через сиамскую сеть или просто передайте данные в ту же сеть в два разных этапа, и сеть отобразит их в низкоразмерное пространство признаков, например, в n-мерный массив. Затем вам нужно обучить сеть создавать карты объектов, которые захватывают как можно больше точек данных разных классов, в то время как точки данных одного класса находятся как можно ближе.
Мы надеемся, что сеть сможет извлекать и изучать наиболее значимые функции из данных и сжимать их в массив для создания значимой карты.
Чтобы понять этот процесс более интуитивно, представьте, как использовать небольшой вектор для описания пород собак, чтобы у похожих собак были более близкие векторы. Вы можете использовать число для кодирования цвета шерсти собаки, размера собаки, длины шерсти и т. д. Таким образом, похожие собаки будут иметь схожие векторы признаков. Точно так же сиамская нейронная сеть может сделать это за вас, используя разные коды для представления различных характеристик цели, например, автоэнкодер.
Изображение выше взято из статьи «Уменьшение размерности путем изучения инвариантного отображения» Хадселла, Чопры и Лекуна. Обратите внимание, как модель изучает сходство между числами и автоматически группирует их в двухмерном пространстве. FaceID использует аналогичную технологию.
С помощью этого метода можно использовать большое количество данных о лицах для обучения такой структуры модели с конечной целью, чтобы модель автоматически определяла, какие лица наиболее похожи. Кроме того, нам нужно не только иметь точный бюджет для вычислительной стоимости модели, но и сделать модель адаптируемой ко все более сложным случаям лица, например сделать нейронные сети полезными для таких вещей, как распознавание близнецов, состязательные атаки (маски) и т. д. , Сильная надежность.
В чем преимущество подхода Apple?
В итоге мы получаем готовую модель, которая просто вычисляет, где находится лицо в пространстве сопоставления лиц, после того, как сделали несколько снимков лица в процессе первоначальной настройки, без дальнейшего обучения или оптимизации модели для идентификации разных пользователей. Как и в предыдущей задаче классификации пород собак, он кодирует вектор признаков для новой породы собак и сохраняет его в пространстве признаков. Кроме того, FaceID может адаптироваться к изменениям лица пользователя, таким как некоторые резкие изменения (очки, шляпы и макияж) и некоторые незначительные изменения (растительность на лице). Эти изменения функций обычно выполняются путем добавления некоторых опорных векторов лица в пространство признаков лица, а затем выполнения вычислений новых функций лица на основе этих векторов.
FaceID может автоматически адаптироваться к изменениям лица▲
Ниже я опишу, как реализовать описанный выше процесс на Python с использованием фреймворка Keras.
▌ Реализуйте FaceID с помощью Keras
Как и во всех проектах машинного обучения, первое, что вам нужно, — это данные. Создание собственного набора данных лиц требует много времени и трудозатрат, что будет чрезвычайно сложной задачей. Я увидел в сети набор данных о лицах RGB-D и обнаружил, что он очень подходит для нашего набора данных о лицах. Набор данных состоит из серии изображений RGB-D, ориентированных в разных направлениях, с разными выражениями лица, точно так же, как данные лица, необходимые для FaceID в iPhone X.
Затем я построил сверточную нейронную сеть на основе архитектуры SqueezeNet. Сеть принимает в качестве входных данных RGBD-изображение связанного лица, поэтому размерность входного изображения составляет 4 канала, а выходным значением является расстояние между двумя встроенными значениями. Сеть обучается с контрастным проигрышем, который минимизирует расстояние между похожими людьми на картинке и максимизирует расстояние между разными людьми на картинке. Математическое выражение функции контрастных потерь выглядит следующим образом:
Выражение функции потери контраста▲
После обучения модели сеть способна отображать лица в 128-мерные массивы и группировать одних и тех же людей на изображении в одну группу, насколько это возможно, от других людей на изображении. Это означает, что для разблокировки телефона сети достаточно рассчитать расстояние между фотографией вашего лица, сделанной в процессе разблокировки, и фотографией вашего лица, сохраненной при регистрации. Если это расстояние ниже определенного порога, телефон будет разблокирован, и чем ниже установлен порог, тем более безопасным будет ваш телефон.
Кроме того, я использовал алгоритм t-SNE для визуализации 128-мерного пространства встраивания в 2-мерное пространство, при этом каждый цвет соответствует разным людям: как вы можете видеть ниже, сеть научилась точно группировать эти лица. Стоит отметить, что расстояния между кластерами не имеют смысла при визуализации с использованием алгоритма t-SNE. Кроме того, есть некоторые интересные вещи, которые можно увидеть при визуализации с помощью алгоритма уменьшения размерности PCA.
Различные кластеры лиц генерируются в пространстве вложения с использованием алгоритма t-SNE. Каждый цвет представляет собой отдельное лицо (некоторые цвета здесь используются повторно)▲
Сгенерируйте различные кластеры лиц в пространстве встраивания, используя алгоритм PCA. Каждый цвет представляет собой отдельное лицо (некоторые цвета здесь используются повторно)▲
▌Эксперимент!
Теперь мы смоделируем общий процесс разблокировки FaceID и посмотрим, как работает модель. Во-первых, зарегистрируйте информацию о лице пользователя; на этапе разблокировки другие пользователи не могут успешно разблокировать устройство в обычных условиях. Как упоминалось ранее, нейронная сеть вычисляет расстояние между текущим лицом и зарегистрированным изображением лица на этапе разблокировки и проверяет, меньше ли расстояние определенного порога.
Мы начинаем с этапа регистрации, собираем фотографии лица одного и того же человека в наборе данных и моделируем весь этап регистрации. Затем устройство рассчитает текущее встраивание для каждой позы лица и сохранит его локально.
Процесс регистрации нового пользователя на FaceID▲
Процесс регистрации виден с камеры глубины▲
Что происходит, когда тот же пользователь пытается разблокировать устройство? Мы видим, что разные позы и выражения лица одного и того же пользователя имеют меньшие расстояния, со средним расстоянием около 0,30.
Расчет расстояния до лица от одного и того же пользователя в пространстве встраивания▲
Для RGBD-изображений лиц разных людей расчетное значение расстояния равно 1,1.
Расчет расстояния между лицами разных пользователей в пространстве встраивания▲
Поэтому установки порога расстояния на 0,4 достаточно, чтобы посторонние не смогли разблокировать ваш телефон.
▌Заключение
В этой статье, от концепции до экспериментальной проверки, мы покажем, как реализовать механизм разблокировки FaceID на основе встраивания лица и сиамской сверточной нейронной сети.
Весь соответствующий код Python находится вздесь, нет, спасибо!
Оригинальный автор | Норман Ди Пало