Итак, в моем последнем посте я рассказал о том, как я построил 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 здесь. Спасибо за прочтение.