Руководство по развертыванию ваших моделей, их мониторингу и предоставлению отзывов о результатах классификации с использованием Python и Dash.

Как специалист по данным, вы тратите много времени на обработку данных и разработку своих моделей, поэтому вы действительно хотите применить плоды своего труда на практике. На выставке Big Data Expo 2018 в Амстердаме встал вопрос, сможет ли наша команда в течение четырех недель создать рабочую игру с некоторыми классными вещами, связанными с машинным обучением. Цель: интерактивное и увлекательное веб-приложение, в котором можно было бы разместить самые современные модели машинного обучения. Вызов принят: мы решили реализовать модель обнаружения лиц и модели классификации для восьми черт лица. Кроме того, Python должен был быть языком как для моделей, так и для веб-приложения. Мы проявили изобретательность и в течение 4 недель разработали собственную версию игры «Угадай, кто?». Вот как мы это сделали.

Игра

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

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

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

Мы построили нашу игру с нуля и реализовали следующие пять этапов:

  1. Создавайте аватарки (сгенерируйте игровую доску)
  2. Разработка моделей распознавания лиц и классификации признаков
  3. Анализируйте аватарки с моделями
  4. Подтвердите прогноз моделей и при необходимости измените результат.
  5. Реализуйте игровую логику

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

Этап 1. Создание аватара и распознавание лиц

Мы создаем свои собственные аватары, фотографируя наших игроков, когда они носят такие атрибуты, как шляпа, очки или усы. Для этого мы использовали приложение Photo Booth (предустановлено на Mac). Если вы являетесь пользователем Windows или Linux, вы можете использовать камеру (также предустановленную). После съемки его необходимо (автоматически) сохранить в папке.

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

Этап 2. Модели классификации компонентов

Теперь у нас есть кадрированные фотографии с лицами, они готовы к анализу. Как сказано, подробную информацию о моделях вы найдете здесь. Чтобы дать вам немного контекста для этого блога: мы придумали восемь функций (пол, шляпа, очки, галстук, растительность на лице, тип волос, длина и цвет волос) и использовали предварительно обученную сеть Inception V3 для обучения модель для каждой функции.

Этап 3. Анализ аватаров

Прежде чем перейти к реализации, несколько слов о Dash и структуре проекта. Dash - это среда Python для создания аналитических веб-приложений. Поэтому мы решили использовать Dash для создания панели мониторинга для проверки модели, потому что это простой инструмент для создания интерактивных панелей мониторинга. На этой панели инструментов вы проверяете прогнозы моделей. Если модели сделали неверный прогноз, вы можете изменить результат на этой панели инструментов. Например: в предсказаниях на изображении ниже вы хотите поменять очки на «Нет», прежде чем играть в игру.

Структура

На рисунке ниже показана структура проекта. Как вы можете видеть в папке src, мы создали два приложения (информационные панели): приложение для проверки и игровое приложение. В папке data вы сохраняете фотографии, сделанные на этапе 1. В папке src/validation у вас должен быть скрипт для панели мониторинга, который называется ‘app.py’. Dash требуется один .py файл для макета панели мониторинга и папка с ресурсами для хранения файлов css и JavaScript. В этом проекте Bulma используется в качестве среды CSS. Bulma имеет открытый исходный код и значительно упрощает структуру CSS.

Dash использует реактивное программирование, а панель управления состоит из двух частей: макета и обратных вызовов. Макет описывает, как должна выглядеть панель управления, с использованием компонентов html. Обратный вызов делает панель мониторинга интерактивной и действует как функция: он сообщает элементу макета, что делать, когда предоставляется ввод. Обратный вызов требует вывода, ввода и может иметь состояние. Как и в случае с вызовом функции, вы определяете ввод, а обратный вызов создает вывод. Выход не обязательно должен быть числовым или текстовым, он также может быть чужим входом обратного вызова. Состояние может быть изменено пользователем, например: заполнение пустого поля текстом или изменение значения раскрывающегося списка. Dash создал несколько руководств по использованию обратных вызовов, их можно найти здесь.

Как работают обратные вызовы?

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

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

Теперь рассмотрим следующий код:

В этом обратном вызове вводом является щелчок по кнопке «Начать анализ». Состояние - это dropdown_value аргумент функции. Переменная RAW_IMAGES_DIR указывает на правильную папку в папке данных, где хранятся необработанные изображения из этапа 1. Когда мы нажимаем кнопку запуска в пользовательском интерфейсе, изображение будет просматриваться, обрезаться и оцениваться. Восемь моделей объединены в модуле model_scoring.py, а необработанные данные (изображение) будут оцениваться функцией model_scoring.predict. Эта функция вернет объект JSON, который содержит список с отсортированными прогнозами (по баллам) для каждого атрибута для всех функций. Например, гендерная модель вернет:

[{ключ: «пол», значение: «мужской», оценка: 0,9},

{ключ: «пол», значение: «женский», оценка: 0,1}]

У вас может быть несколько состояний (все они будут аргументом функции), но только один вход и выход. Порядок вывода, ввода, состояния важен для Dash, а также порядок аргументов, соответствующих состоянию.

Этап 4: проверка прогноза

Чтобы повторно использовать вывод контейнера данных, который был возвращен предыдущим обратным вызовом, мы используем некоторый JavaScript. Помните, что каждый обратный вызов соответствует элементу HTML-макета? Показанный выше обратный вызов соответствует «скрытому» элементу div с именем data-container. Этот контейнер данных представляет собой html-элемент, содержащий данные об изображении, которое скрыто со страницы. Простая функция JavaScript, такая как getElementById, может получить доступ к своим данным без отображения контейнера данных на странице. Эти данные можно использовать для отображения некоторых столбцов, показывающих, насколько модель была убеждена в своем прогнозе, или предварительного заполнения страницы проверки информацией о прогнозируемых классах.

Мы используем функциональные ключи и значения в качестве входных данных для обратных вызовов на странице проверки. Итак, если контейнера данных еще нет (в случае, если модель еще не запущена), компоненты «input» html пусты. Как только модель завершит анализ и невидимый контейнер данных будет создан, можно будет предоставить входные данные для обратных вызовов.

Посмотрите еще раз на изображение страницы проверки. Для каждого атрибута (функции) нужно создать отдельный обратный вызов. Изучите обратный вызов цвета волос:

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

Пользователь может изменить раскрывающиеся меню по своему усмотрению (изменить состояния) и сохранить правильные данные, нажав кнопку «Сохранить». Как вы можете видеть в приведенном ниже коде, этот обратный вызов принимает в качестве входных данных все измененные (или неизмененные) функции и имя аватара. Функция, принадлежащая обратному вызову, примет имя и правильные функции и создаст из них объект JSON. После этого объект JSON будет сохранен в CHECKED_DATA_DIR. В этом каталоге хранятся все аватары с правильной информацией об их функциях. Файлы в этом каталоге будут использоваться в качестве входных данных для игрового приложения.

Этап 5. Игра

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

Подведение итогов

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