Цели этого проекта:

  • Используйте TensorFlow и Sagemaker в VSCode для обучения и развертывания классификатора изображений, способного классифицировать облака на пять групп; Patterned, Thick Dark, Thick White, Veil и, наконец, Blue Sky.
  • Напишите приложение, используя приложение Flask, которое позволяет пользователям делать снимки неба и обмениваться данными с этой моделью для классификации.

Вот Ссылка на GitHub для тех, кому просто нужен код!

Построение модели

Данные были взяты из набора данных Singapore Whole Sky IMaging CATegories (SWIMCAT), который состоит всего из 784 изображений, принадлежащих к 5 классам. Этот набор данных случайным образом разбивается на обучение и проверку с разделением 80/20 и преобразуется в пустые массивы. Эти изображения RGB имеют размер 125x125 пикселей, образуя форму обучающего массива (628, 125, 125, 3). Примеры каждой из меток класса можно увидеть ниже:

После преобразования изображений и меток в пустые массивы они затем загружаются в корзину S3 для использования Sagemaker. Подготовка и загрузка изображений осуществляется скриптом image_prep.py. Затем мы можем указать наш скрипт training.py, который включает модель, определяемую функцией ниже:

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

Затем этот обучающий сценарий можно запустить на выбранном экземпляре с помощью Sagemaker и приведенного ниже кода:

Инициализировав TensorBoard и указав путь к папке журналов в корзине S3, можно сохранить показатели обучения. Запустив следующую строку в bash, TensorBoard размещается на локальном сервере:

S3_REGION=YOUR_REGION tensorboard --logdir=s3://PATH_TO_LOGS

После 500 эпох и скорости обучения 0,1 точность обучения и проверки оптимизируется примерно до 0,87. Графики потерь и точности можно увидеть ниже, где синяя линия указывает на обучение, а оранжевая — на проверку.

Затем модель можно развернуть для использования в нашем приложении, используя следующую строку:

predictor = estimator.deploy(initial_instance_count=1, instance_type=instance_type)

Теперь, когда модель успешно развернута, мы можем перейти к созданию приложения!

Создание приложения

С помощью одного скрипта Flask app.py и файла index.html можно создать простое приложение, использующее камеру пользователя и взаимодействующее с развернутой моделью. Маршрут загрузки и логика Ajax передает изображение от внешнего интерфейса к внутреннему для прогнозирования, а затем передает предсказанное значение во внешний интерфейс для отображаемого прогноза!

К сожалению, только после попытки развернуть это приложение в Elastic Beanstalk я понял, что камера не работает, поскольку облачные серверы не имеют доступа к локальной веб-камере пользователя. Обходной путь состоял бы в том, чтобы пользователь загружал изображение напрямую, но в истинном стиле решения проблем я решил проигнорировать проблему и вместо этого просто разместить ее локально.

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

Конечный продукт

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

Следующие шаги

Было бы интересно применить эту модель и приложение к более полному набору данных. Возможно, тот, который может обнаруживать отдельные облака и определять их тип (например, используя эти данные). Также было бы неплохо попробовать создать более совместимое мобильное приложение с помощью Amplify.

Вывод

Очевидно, что это не самое полезное приложение, так как почти каждый сможет определить, к какой категории относятся облака, просто взглянув на них. Особенно те, что в Англии — вы, вероятно, могли бы просто угадать что угодно, кроме голубого неба, и быть правильным. Тем не менее, он показывает, как модель классификации изображений может быть связана с удобным для пользователя интерфейсом для получения прогнозов в реальном времени, и это само по себе имеет множество реализаций (например, для обнаружения сыпи или идентификации продукта). Надеемся, что этот проект показал, как можно легко внедрить AWS для создания комплексного решения проблемы в области науки о данных!

Весь код можно увидеть на моем GitHub, так что не стесняйтесь вносить свой вклад, предлагать идеи и задавать вопросы!

Удобные репозитории

Моделирование AWS Repo MNIST с помощью SageMaker

AWS Repo с использованием TensorBoard с Keras (включает опцию Hyperperameter)