Обучение распознаванию эмоций в блокноте Jupyter и преобразование его в проект Flask API без дополнительного кода с помощью Cuttle

Люди, которые довольно часто используют записные книжки Jupyter для разработки и тестирования, вероятно, привыкли постоянно копировать и вставлять код.

Удаление тестовых фрагментов, использование другой IDE для компиляции и повторного тестирования кода и разработка API - это лишь некоторые из трудоемких задач, к которым привык ML-разработчик.

Разве не было бы замечательно, если бы мы могли автоматизировать рутинную работу шаблонного кода, необходимого для создания проекта API? Здесь мы обучим модель распознавания эмоций в Jupyter Notebook и преобразуем ее в проект Flask API с помощью абсолютно никакого лишнего кода!

Зависимости

pip install 
tensorflow==2.5.0 Keras==2.4.3 numpy==1.19.5 opencv-python==4.4.0.44

Нам также необходимо установить Cuttle, чтобы преобразовать нашу записную книжку ML в проект Flask API.

pip install cuttle

Набор данных

Вы можете использовать любой набор данных для распознавания эмоций или создать свой собственный набор данных. В этой статье мы используем набор данных по распознаванию эмоций, доступный на Kaggle. Вы должны найти его здесь. Этот набор данных содержит изображения 7 классов: гнев, отвращение, страх, счастливый, нейтральный, грустный и удивленный. Если вы хотите добавить еще один класс, просто создайте новый каталог и добавьте изображения, принадлежащие этому классу.

Создайте блокнот в том же каталоге, что и загруженный набор данных, с папками «обучение» и «проверка».

Импорт

Увеличение набора данных

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

Мы изменяем масштаб изображений, потому что цвета варьируются от [0–255], а масштабирование их изменяет значение каждого пикселя в диапазоне [0–1]. Здесь мы определяем целевой размер для нашей модели как 48x48, а batch_size как 64.

Модельное обучение

Здесь мы определяем CNN, но вы можете использовать любую из предварительно обученных доступных моделей, таких как VGG16 или ResNet, или также использовать трансферное обучение.

Ваша модель будет сохранена в заданном пути после завершения обучения.

Распознавание эмоций

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

Давайте воспользуемся тестовым изображением test.jpeg.

Результат, который мы получаем для этого из предсказания модели, - «страх». Продолжайте тестирование с еще несколькими изображениями, пока не будете удовлетворены точностью модели и результатами. Давайте посмотрим, как мы можем преобразовать это в проект API.

Инициализировать Cuttle

Инициализируйте cuttle с помощью "cuttle init", как показано ниже, и введите имя используемой записной книжки.

Создать среду Cuttle

На этом этапе вы даете имя среде, указываете используемую платформу и какой преобразователь хотите использовать. В этом сценарии мы хотим использовать преобразователь flask. Вы можете выбрать любое удобное имя для среды. В качестве примера я использовал "Emotion-rec".

На этом этапе ваш cuttle.json должен выглядеть примерно так:

После того, как вы закончите создание конфигурации, пришло время отредактировать записную книжку Jupyter, включив в нее конфигурацию Cuttle. Нам нужно только отредактировать последнюю часть кода, чтобы определить маршрут API и установить конфигурацию вывода.

Добавление конфигурации в ячейки:

Мы используем конфигурацию Cuttle для выполнения двух основных действий здесь, как показано здесь.

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

Чтобы отключить ячейки, добавьте этот конфиг в начало ячейки.

#cuttle-environment-disable emotion-rec

Теперь добавьте конфигурацию для преобразования вашего скрипта в API следующим образом:

Мы устанавливаем две конфигурации: cuttle-environment-set-config и cuttle-environment-assign. Они соответственно ограничены клеточным и линейным охватом. Конфигурация с привязкой к ячейке задает конфигурацию, необходимую во время преобразования для ячеек. Конфигурация с линейной областью видимости позволяет нам настраивать переменные.

В первой строке мы устанавливаем конфигурацию области ячейки, указав имя среды, метод и маршрут по нашему выбору. Мы также настраиваем переменную «file», позволяющую нам получить конфигурацию из метода запроса, и переменную «output», которая будет нашим ответом.

Преобразовать

Наш последний шаг - это карательное преобразование, используя имя среды, которое мы использовали. Давайте посмотрим, как:

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

Теперь наш код по умолчанию работает на порту 5000 localhost. Проверьте это, отправив изображения с помощью Postman, чтобы получить ответ.

Теперь ваш проект API готов к развертыванию! Cuttle также позволяет преобразовать записную книжку в сценарий или конвейер.

Ресурсы

Веб-сайт Cuttle: cuttle.it
Github: Источник API распознавания эмоций
Источник Cuttle: Источник интерфейса командной строки Cuttle

Вы также можете найти нас в Twitter @ https://twitter.com/cuttlehq