Локи - шпионит за эмоциями пользователей

Подтверждение концепции доставки контента, ориентированного на эмоции.

С появлением iOS 11 Apple добавила в ARKit несколько новых API для распознавания лиц, что значительно упростило разработчикам создание программного обеспечения с функциями отслеживания лиц. Для nwHacks 2018 мы решили разработать доказательство концепции, которая демонстрирует ее более зловещую сторону - то, что может быть прямо из эпизода Черное зеркало.

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

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

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

Когда наша команда пришла на nwHacks, мы не знали, что строить. У нас четверых был опыт работы с iOS, машинным обучением и серверной разработкой, поэтому после довольно продолжительного мозгового штурма мы решили использовать способность iPhone X захватывать информацию о лицах для создания «классификатора эмоций». Однако мы умерили наши ожидания относительно успеха этого проекта. Чтобы повысить наши шансы получить рабочую демонстрацию к концу хакатона, мы решили ограничить его объем классификацией четырех основных эмоций: счастливая, грустная, злая. , и удивлен.

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

Теперь, когда мы собрали около сотни точек данных, необходимо задать важный вопрос: «как на самом деле выглядят наши данные»?

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

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

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

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

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

CoreML - это еще один фреймворк, который Apple поставила в iOS 11, который позволяет легко интегрировать предварительно обученные модели в приложения и выполнять прогнозирование на устройстве. Хотя CoreML был в первую очередь разработан, чтобы позволить разработчикам создавать большие модели для включения непосредственно в свои двоичные файлы приложений, для Loki мы хотели сделать еще один шаг вперед. Поскольку у нас уже был способ беспрепятственно создавать новые точки данных для обучения, мы хотели иметь возможность обучать новые модели и развертывать их на лету без необходимости перестраивать приложение.

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

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

В целом, наша команда была очень довольна тем, что нам удалось построить всего за 24 часа. Хотя мы не были финалистами хакатона, все, кому мы показывали Локи, были впечатлены его способностью улавливать каждую эмоцию. Было действительно приятно видеть, как люди реагируют на приложение, правильно определяющее их лица; когда люди искренне удивлялись его точности, Локи (правильно) регистрировал их удивление!

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

Loki был разработан во время nwHacks 2018 компаниями Кевин Яп, Ланси Чу, Натан Таннар и Патрик Хубер. Посетите репозиторий GitHub здесь.