Где я могу найти место для парковки?

Любые розничные торговцы, владеющие такими крупными универмагами, как Macy’s, могут анализировать количество клиентов, заходящих в их магазины, по вместимости своих парковок. Подсчитывая, сколько автомобилей припарковано в течение рабочего дня, обычные розничные торговцы могут обнаружить тенденции потребительских покупок, которые могут быть не очевидны для них при простом анализе продаж.

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

Знать, сколько и какие парковочные места есть в наличии, не должно быть дорогостоящим мероприятием. Быстрый поиск в Google приведет к тому, что многие компании используют технологию IoT и устанавливают датчики на каждом парковочном месте, чтобы отслеживать доступность. Это кажется очень дорогостоящим методом и потребует большого объема текущего обслуживания.

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

Как мы этого добьемся?

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

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

Используемый набор сервисов AWS:

  1. S3: расположение данных обучения и тестирования. Артефакты окончательной модели также автоматически загружались в s3 после его обучения.
  2. SageMaker: среда, в которой выполнялась основная часть работы по разработке Python, включая обучение модели и настройку гиперпараметров. IDE для записных книжек Jupyter упростила кодирование.
  3. API Gateway: это полностью управляемая служба для создания и публикации API любого масштаба. Эта служба размещала модель Sagemaker на конечной точке API, чтобы внешние приложения могли получить доступ к модели.
  4. Lambda: служба оркестровки, позволяющая запускать бессерверный код всякий раз, когда используется конечная точка API.
  5. CloudWatch: содержит журналы для помощи в отладке в процессе разработки.

Основные шаги:

  1. Сбор данных
  2. Инженерия данных
  3. Классификация изображений Обучение модели
  4. Модель хоста на открытом API
  5. Синхронизация с использованием Lambda и API Gateway
  6. Мониторинг с помощью CloudWatch

Сбор данных

Чтобы обучить модель классификации изображений, алгоритм должен понимать, какие изображения представляют собой пустое пространство, а какие изображения представляют собой занятое пространство. Нам нужен набор помеченных изображений, на которых мы можем тренироваться. К счастью для нас, добрый незнакомец в Интернете уже обозначил этот набор изображений, которые мы можем использовать. Каждый файл представляет собой изображение одного парковочного места. Все они отсортированы таким образом, что пустые места находятся в Пустом каталоге, а занятые места - в Занятом каталоге. Это будет важно позже, когда мы начнем обучать модели.

Если этот предварительно помеченный набор недоступен, другой рекомендацией будет использование AWS SageMaker Ground Truth. Ground Truth - это сервис, предоставляемый AWS, который передает маркировку стороннему поставщику. Они пометят вам набор изображений в соответствии с вашими требованиями, и все, что вам нужно сделать, это указать местоположение корзины S3.

Инженерия данных

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

Во-первых, вам нужно будет установить несколько пакетов Python, которые позволят нам изменять и уточнять наши изображения. Были установлены следующие пакеты: cv2, glob и PIL.

Когда изображения загружаются в виде массивов numpy в нашей среде Python, они представляются как 3-мерные массивы 8-битных целых чисел без знака.

Первое измерение - это высота, а второе - ширина. Изображения хранятся таким образом, потому что они представлены множеством строк пикселей, соединенных по порядку. Третье измерение предназначено для RGB, 3-байтового значения, представляющего цвет пикселя. У вас также могут быть изображения, которые не имеют третьего измерения, а имеют просто высоту и ширину. Эти пиксели не имеют никакого связанного с ними цвета, поэтому они называются изображениями в оттенках серого. Есть несколько других типов изображений, но в этом упражнении мы будем использовать только эти два.

Порядок массива по умолчанию - последний канал, где измерение RGB размещается в 3-м измерении, но для уверенности вы можете подтвердить, проверив форму с помощью этого кода:

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

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

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

После загрузки изображений в S3 мы готовы обучать нашу модель!

Обучение модели классификации изображений

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

Преобразуйте все файлы .jpg в нашем каталоге S3 в файлы RecordIO. Вы можете тренироваться с файлами .jpg, но файлы RecordIO оптимизированы для обучающих моделей, поэтому они сокращают время и расходы. Если вы тренируетесь с файлами .jpg, вы просто обновите content_type на «image / jpg».

Класс сеанса Sagemaker создает определения для входных данных. Необходимо указать расположение данных, а также их распространение, тип содержимого и тип данных. Допустимые значения находятся здесь. Затем класс оценки Sagemaker устанавливает параметры для обучения модели. Вы можете найти документацию здесь. Затем выберите, на каком инстансе EC2 вы хотите тренироваться. В этом случае мы использовали 1 ml.p3.2xlarge, которые оптимизированы для высокопроизводительного машинного обучения. Время обучения модели зависит от типа и количества экземпляров. Поскольку наборы данных для обучения и проверки состоят из изображений, AWS рекомендует экземпляры с достаточным объемом памяти для обучения моделей классификации изображений.

Чтобы начать обучение модели, запустите следующий скрипт:

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

Каждая комбинация гиперпараметров приведет к отличной производительности модели. AWS SageMaker имеет простой сервис настройки гиперпараметров, который можно легко вызвать из кода Python:

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

Вы создадите модель SageMaker из лучшего учебного задания. Это означает, что артефакты и интерференционный код наиболее эффективной модели сохраняются в бакете S3, чтобы его можно было использовать для прогнозирования. Модель будет размещена и развернута на конечной точке HTTPS, так что выведение модели можно будет использовать вне AWS.

Лямбда и API-шлюз

Lambda и API Gateway - это сервисы AWS, которые позволяют интегрировать решения как часть бессерверной архитектуры. Это означает, что операционные обязанности ваших решений возлагаются на AWS, что позволяет быстрее совершенствовать и внедрять инновации. Бессерверный режим позволяет создавать и запускать приложения и службы, не думая о серверах. Он хорошо масштабируется, и вы платите только за выполнение. Он устраняет такие задачи управления инфраструктурой, как подготовка серверов или кластеров, установка исправлений и обслуживание операционной системы.

Конвейер AWS выглядит следующим образом:

  1. Клиентское приложение вызывает действие шлюза API и передает значения параметров. API Gateway - это уровень, предоставляющий API клиенту.
  2. API Gateway передает значения параметров лямбда-функции.
  3. Функция Lambda анализирует полезные данные и отправляет их в конечную точку модели SageMaker.
  4. Модель выполняет прогноз и возвращает прогнозируемое значение в Lambda.
  5. Функция Lambda анализирует возвращаемое значение и отправляет его обратно в API Gateway.
  6. API Gateway отвечает клиенту этим значением.

Построить трубопровод для парковки

Теперь, когда у нас есть готовая модель, мы можем определить, занято ли место на парковке или нет. Затем нам нужно найти способ выделить отдельные парковочные места из изображения парковки. Стратегия состоит в том, чтобы найти белые линии, которые используются для обозначения границ каждого пространства. В данном случае использовалось Canny Edge Detection.

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

Мы можем проанализировать каждое пятно, чтобы его можно было пропустить по модели.

Из 52 пятен модель обнаружила 16 занятых.

Заключение

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

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