Итак, в моем последнем посте я рассказал о том, как я построил Plant AI - модель обнаружения болезней растений с использованием сверточной нейронной сети. В конце концов, у нас была модель, которую мы будем разворачивать в этом посте. Код для Plant AI можно найти здесь, а вывод - здесь.

Но что хорошего в Модели, которую нельзя использовать? Итак, в этом посте я расскажу о том, как я развернул эту модель для использования с Android-приложением через API.

Чтобы развернуть нашу обученную модель для использования через API, мы должны сделать что-то подобное следующему:

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

Мы можем использовать нашу модель в производстве разными способами, например:

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

файл_модели = pickle.load (open («cnn_model.pkl», ’rb’))

или model_file = load_model (‘my_model.h5’)

  • Сделайте модель доступной для использования через API. Это то, что я сделал для Plant AI. Есть много способов сделать модель доступной через API. Некоторые из них включают:

Пользовательский REST-API с Django или Flask: в этом случае мы создаем пользовательский REST-API с одним из Django или Flask. При этом мы должны сделать нашу модель доступной в нашей папке проекта, как указано выше, загрузить ее и выполнить прогноз, а затем отправить результат в виде ответа JSON.

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

AWS Lambda / Serverless: это предполагает использование AWS Lambda, чтобы сделать вашу модель глубокого обучения доступной. Вы можете ознакомиться с Документацией AWS по развертыванию модели глубокого обучения с помощью Tensorflow, чтобы получить помощь в этом.

Kubernetes: другой вариант - использовать Kubernetes для развертывания вашей модели. Вы можете проверить документацию Kubernetes или этот средний пост, чтобы узнать, как развернуть вашу модель глубокого обучения с Kubernetes, Docker и Flask.

Я разработал API для Plant AI с Django - Python Web Framework. Независимо от того, какой Python Framework вы решите использовать, процесс должен быть таким же.

  • Сначала убедитесь, что у вас установлены эти пакеты

Django: веб-фреймворк на Python. Прекрасно использовать Flask или любой другой веб-фреймворк Python по вашему выбору.

Django-heroku (требуется только в том случае, если ваше приложение будет размещено на Heroku)

Django-RestFramework: мощный инструмент для создания веб-API.

Gunicorn: это HTTP-сервер WSGI для UNIX.

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

Keras: Keras - это библиотека нейронной сети с открытым исходным кодом, написанная на Python. Он может работать поверх TensorFlow, Microsoft Cognitive Toolkit или Theano. Разработанный для быстрого экспериментирования с глубокими нейронными сетями, он ориентирован на удобство использования, модульность и расширяемость (Источник: Wikipedia)

Sklearn: бесплатное программное обеспечение машинное обучение библиотека для языка программирования Python. Он имеет различные алгоритмы классификации, регрессии и кластеризации, включая опорные векторные машины, случайные леса, повышение градиента, k -средства и DBSCAN, а также разработан для взаимодействия с числовыми и научными библиотеками Python NumPy и SciPy. (Источник: Википедия)

django-cors-headers: приложение Django, которое добавляет в ответы заголовки CORS (Cross-Origin Resource Sharing).

  • Настройте свой проект Django.
  • Затем убедитесь, что ваша модель находится в папке среди файла проекта. Вы можете скачать модель для Plant AI здесь
  • Вот как выглядит мой код

Как обычно, в Строках 1–7 я импортировал необходимые пакеты.

В строке 33 я сохранил данные (изображение больного растения в base64), отправленные через конечную точку API, в request_data. Затем в строке 34 я разделяю данные, чтобы получить только изображение. Затем изображение было преобразовано в массив с помощью приведенной ниже функции convert_image. Эта функция вернет массив изображений или просто None и сообщение об ошибке, если оно есть.

В строке 38 ниже я загрузил сгенерированную модель с помощью Pickle. Затем в строке 39 я передал в модель массив изображений. Это вернет бинаризованную метку. С помощью загруженного бинаризатора этикеток из нашего проекта здесь я смог преобразовать прогноз модели в любую из доступных меток (в данном случае для различных болезней растений).

Строка 41–43 содержит dict Python, содержащий вывод, который будет выдавать этот API. В Строке 60 этот запрос был отправлен обратно в виде ответа JSON. И да, это все !!!

Тестирование моего API с помощью Postman дало мне желаемый результат примерно за 47312,525 миллисекунд (47,3 секунды).

Этот проект доступен на Github здесь. Спасибо за прочтение.