Введение в компьютерное зрение с AWS и Python

Компьютерное зрение (CV) — это область искусственного интеллекта (ИИ), которая обрабатывает все типы цифровых изображений или видео, извлекая соответствующую информацию и позволяя нам идентифицировать некоторые элементы или объекты в этих изображениях/видео. Чтобы идентифицировать эти элементы, мы применяем математические модели, которые борются с позициями пикселей, цветовыми слоями и отношениями между каждым различным соседством или цветом пикселя. Все эти задачи выполняются с помощью различных алгоритмических структур, таких как деревья решений, хэши, нейронные сети (NN) или графы, и других методов, таких как жадные алгоритмы, разделяй и властвуй, динамические алгоритмы, методы поиска, методы сортировки и т. д.

Введение

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

  • Классификация изображений — присваиваете метку класса раскрытия всему изображению.
  • Обнаружение объектов: вы идентифицируете несколько отдельных объектов (собаку, велосипед, автомобиль) на изображении, создавая вокруг них ограничивающие рамки.
  • Семантическая сегментация: вы определяете ограничивающие пиксели в каждом объекте вместо прямоугольников, потому что они недостаточно точны, поэтому каждому пикселю назначается класс, чтобы идентифицировать его как маску на объекте, что позволяет вам отделить это с фона. Здесь один и тот же тип объекта (собака, велосипед, машина) находится в одном классе.
  • Сегментация экземпляров — когда вы различаете объекты одного класса, идентифицированные в процессе семантической сегментации, что, например, означает, что вы можете найти разные породы собак на одном и том же изображении.
  • Оценка позы — здесь вы можете найти, определить и отследить относительное положение некоторых конкретных ключевых точек, таких как локоть или колено человеческого тела.

Эти методы имеют множество применений в промышленности, таких как роботизированные, беспилотные автомобили, оптическое распознавание отсканированных документов (OCR), помощники хирурга, распознавание лиц для мониторинга реакции потребителей, а также автоматизация магазинов клиентов или автоматизация управления запасами в магазинах. розничная торговля, автоматизированное тестирование, диагностическое обслуживание, дополненная реальность и так далее.

Заинтересованы в технологии AWS для вашего бизнеса? Наши специалисты могут дать вам оценку БЕСПЛАТНО!

Как упоминалось ранее, компьютерное зрение — это область искусственного интеллекта, и поэтому она пронизана другой областью, называемой машинным обучением (ML), которая изучает то, как машины способны к обучению. Среди различных методов, которые использует ML:

  • Обучение с учителем. Здесь мы обычно предоставляем несколько образцов входных данных, и система использует алгоритмы для извлечения из них релевантной информации (обучение) и учится определять похожие новые входящие данные. Обучение сохраняется в структуру, называемую моделью. Это может быть математическая модель или функция, применяющая предопределенные правила, определенные на этапе обучения, для идентификации или классификации поступающих данных. Этот метод ML используется для задач классификации или регрессии. Первый отвечает на вопрос: какой класс или метку мы можем присвоить? И эти классы или метки являются дискретными значениями. Второй пытается ответить на тот же вопрос, но в этом случае на выходе получается непрерывный класс или метка, то есть функция, представляющая отношение между данными, которая всегда получает число с плавающей запятой при ее оценке.
  • При неконтролируемом обучении — когда входные данные не соответствуют некоторым предопределенным классам или меткам. Используемые алгоритмы пытаются извлечь информацию для логического вывода, которая может помочь классифицировать данные по классам или меткам, поскольку они имеют некоторые общие характеристики, которые необходимо им подгонять. Возможно, самой известной проблемой здесь является кластеризация, которая включает в себя поиск групп в данных.
  • Обучение с подкреплением — иногда его называют обучением на основе вознаграждения. Алгоритмы выполняют действия, чтобы получить обратную связь от среды и учиться у тех, кто дал хорошие результаты. Это похоже на игру, где мы получаем очки за достижение какой-то цели.

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

Мы должны особо упомянуть Глубокое обучение, которое представляет собой тип алгоритма ML, в котором используются многослойные нейронные сети (NN), особенно Сверточные нейронные сети (CNN). В настоящее время они стали актуальными при создании успешных автономных систем, таких как беспилотные автомобили. Понятно, что это не единственная технология, стоящая за этими замечательными системами, у нас также есть статистические алгоритмы обучения (индуктивные, дедуктивные, трансдуктивные), многозадачные, активные, трансферные, а также как ансамблевые алгоритмы обучения и многие другие области исследования.

Стек машинного обучения AWS

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

Службы искусственного интеллекта ориентированы на быструю разработку приложений для компьютерного зрения. Например, Распознавание можно использовать для предопределенных служб, таких как распознавание текста, распознавание лиц или определение пути, среди прочих. У нас, как у разработчиков, не так много прямого взаимодействия с методами или алгоритмами, почти все они настроены на быструю сборку приложения. Нам нужно только предоставить данные и изменить значения в гиперпараметрах. Amazon Polly — это сервис, который используется для преобразования аудио в текст и наоборот на нескольких языках. Как видите, в этом разделе много сервисов, так что не стесняйтесь исследовать их столько, сколько захотите.

Службы машинного обучения включают SageMaker, который представляет собой набор инструментов, помогающих построить, обучить и настроить модель для решения нашей задачи, т. е. он предоставляет онлайн-среду IDE с все виды алгоритмов ML и фреймворков ML. Оптимизирует и развертывает инструменты для сгенерированной модели (Neo); automated ML (Автопилот) — интересная методика, автоматизирующая процесс поиска лучшей прогностической эффективности модели. В этом разделе есть много предварительно упакованных инструментов, поэтому не стесняйтесь исследовать рынок машинного обучения AWS сколько угодно долго.

У нас есть специальное оборудование в инфраструктуре машинного обучения, предназначенное для обработки огромных объемов данных, например оптимизированный ЦП; Инстансы EC2 с GPU (и предустановленным набором инструментов Cuda) или инстансы EC2 с FPGA (Inferentia). Не стесняйтесь исследовать этот раздел сколько хотите.

У нас есть сторонние платформы, доступные в средах машинного обучения, например TensorFlow, PyTorch или Keras, или распределенная среда обучения глубокому обучению, например Horovod и фреймворки AWS, такие как Apache MXNet и Gluon (GluonCV, GluonNPL, GluonTS). В этом посте мы дадим краткое описание MXNet и GluonCV для приложений Computer Vision, а затем воспользуемся этими инструментами для примера кода.

MXNet и GluonCV с Python

MXNet (или mix-net) — это многоязычная библиотека машинного обучения, упрощающая разработку алгоритмов машинного обучения, особенно для глубоких нейронных сетей. Он позволяет максимально повысить эффективность и производительность за счет смешивания символьного и императивного программирования. GluonCV — это набор скриптов, который обеспечивает реализацию моделей глубокого обучения в компьютерном зрении.

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

  • В этом случае мы будем использовать контейнер Jupyter Docker:

Jupyter — интерактивная среда разработки для Python и других языков программирования. Мы используем его, потому что он нужен нам как для документирования, так и для программирования. Расположение тома докера упрощает совместное использование ресурсов между хостом и контейнером.

  • Войдите в контейнер как пользователь root:

Установить MXNet и GluonCV в контейнере. Здесь мы должны иметь в виду следующие соображения:

  • Собираетесь ли вы использовать только процессор в вашем компьютере? Если да, то установите:

  • Собираетесь ли вы использовать ЦП и подключить графическую карту для оптимизации вычислений? Если да, то установите:

До версии MXNet 1.7 пакет назывался mxnet-mkl.

  • Собираетесь ли вы использовать GPU плюс CUDA? Если да, то установите:

В этом случае у вас должен быть установлен и настроен Инструментарий CUDA.

Теперь мы собираемся использовать второй вариант: процессор плюс подключенная графическая карта.

  • Установите GluonCV в контейнер:

  • Перепроверьте версии установленных пакетов:

С этого момента мы будем использовать блокнот Jupyter, который вы можете найти в репозитории Github (файл demo_object_detection.ipynb). Но вы также можете проверить это локально. Шаги:

1. Найдите изображение для обработки из любого места:

Эта инструкция сохранит образ по локальному пути установки Jupyter или в каталог, в котором вы работаете.

2. Загрузите изображение и получите некоторую информацию:

Тип изображения показывает, что изображение загружено как MXNet ndarray.

Форма изображения показывает, что у нас есть макет данных в формате HWC, т. е. изображение имеет высоту 576 пикселей и ширину 768 пикселей, и это цветное изображение с тремя каналами. .

3. Преобразование изображения. Нам нужно преобразовать изображение, чтобы отправить его в сеть или применить к нему модель CV. Нам нужно добавить N в качестве четвертого измерения в формат HWC, чтобы преобразовать его в NCHW (N: партия C: канал H: высота W: ширина).

4. Загрузите и загрузите предварительно обученную модель: мы будем использовать сеть YOLOv3 (You Only Look Once), которая является самым популярным алгоритмом для обнаружения объектов, с магистралью darknet53. который был обучен на наборе изображений Microsoft COCO. Наши сетевые параметры имеют размер 237 мегабайт и хранятся в кеше mxnet, т.е. ~/.mxnet/models/ — это путь, по которому мы можем найти загруженные модели.

5. Сделайте прогноз

а). Прогнозируемые объекты

Первый обнаруженный объект имеет предсказанный класс с номером 16, и мы видим больше объектов с классами 1, 7, 2, 13 и 0. После этого у нас есть много объектов с индексом класса -1, где -1 — это конкретный индекс класса, который используется для указания на отсутствие обнаруженного объекта. Всего у нас есть шесть обнаруженных объектов, а остальные 94 потенциальных объекта дополнены значениями -1.

Первый объект с номером 16 — это предсказанный класс «собака».

б). Вероятности объекта

Если использовать доверительный порог 50%, то можно сказать, что были обнаружены первые три объекта. Значения -1 означают, что нет уверенности в этих классах (категориях изображений).

Первая вероятность означает, что у нас есть 99% уверенность в том, что объект с номером 17 является «собакой».

в). Границы объекта

Это координаты ограничивающих рамок для каждого обнаруженного объекта. Они определяют координаты верхнего левого угла и нижнего правого угла.

6. Визуализируйте прогноз

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

Если вам нужны дополнительные сведения, перейдите в Jupyter note on Github (файл demo_object_detection.ipynb).

MXNet и GluonCV с использованием AWS и Python

Теперь, когда мы узнали, как работает MXNet и GluonCV, мы готовы разработать тот же пример, но в данном случае на AWS SageMaker. Здесь есть много возможных способов развертывания модели CV в рабочей среде, но мы собираемся использовать блокноты Jupyter.

1.Перейдите к сервису AWS SageMaker.

2. В меню слева выберите Экземпляры Notebook и нажмите Создать экземпляр Notebook.

3. Настройте экземпляр блокнота

ml.t2.medium — это минимальный экземпляр EC2 для демонстрации CV, и нам не нужен оптимизированный экземпляр, поэтому для параметра Elastic Inference следует оставить значение «none».

а). В разделе разрешений создайте новую роль с параметром доступа «Любая корзина S3»:

б). Остальные опции оставляем по умолчанию.

4. Наконец, нажмите кнопку «Создать экземпляр блокнота».

5. Через несколько минут создается следующий экземпляр.

6. Как видите, у нас есть два варианта открытия этой записной книжки: с помощью классического Jupyter или JupyterLab; в нашем случае мы будем использовать классический. Затем в этой записной книжке мы создаем каталог:

7. В правом верхнем углу выберите параметр "Создать", чтобы выбрать ядро. Если вы знаете, что такое ядро, выберите одно из ваших предпочтений или выберите «conda_mxnet_p36», что означает, что это ядро ​​​​имеет инструмент Python conda с инфраструктурой MXNet ML поверх Python 3.6.

С этого момента мы будем использовать блокнот Jupyter, поэтому взгляните на код в репозитории Github (файл deploy_mxnet_sagemaker.ipynb). В общем, следующие шаги:

1. Обновите инструменты MxNet и GluonCV.

2. Импортируйте инструменты AWS SageMaker и создайте корзину S3:

3. Загрузите предварительно обученную библиотеку GluonCV, как и раньше:

Просто для проверки, у него восемьдесят классов.

4. Теперь мы делаем тестовый прогноз, просто чтобы проверить:

5. Разверните сервер обнаружения

а). Нам нужно сохранить загруженную модель локально (в том же месте, что и блокнот).

б). Затем сжать модель

в). И загрузите сжатую модель в корзину AWS S3.

6. Теперь нам нужно записать модель обнаружения в спецификации SageMaker MXNet. AWS SageMaker предоставляет обслуживающие контейнеры для Sklearn, TensorFlow, PyTorch и Apache MXNet. Эти контейнеры удобны тем, что нам не нужно писать код веб-сервера, так как сервер уже написан, т.е. он предоставляет все спецификации YAML для создания образа докера (с нашим проектом и зависимостями), а затем регистрирует его в ECR. для создания контейнера и его развертывания.

Для этого нам нужно предоставить некоторые конкретные функции Python, а именно:

  • обработка ввода с помощью input_fn(request_body, request_content_type, model)
  • загрузить модель с помощью model_fn(model_dir)
  • прогноз с помощью predict_fn(input_object, model)
  • обработка вывода с помощью output_fn(prediction, content_type)

Весь скрипт содержимого находится в репозитории Github (файл deploy_mxnet_sagemaker.ipynb).

7. Далее нам нужно создать экземпляр модели.

Этот код похож на спецификацию докера YAML, которая использовалась для создания образа.

8. Разверните модель

Этот код создаст образ и контейнер Docker, который необходимо развернуть в указанном экземпляре EC2. Этот шаг займет ок. десять минут.

а). После завершения шага развертывание модели мы можем перейти в консоль AWS и посмотреть, что она создала. Перейдите в сервис SageMaker и в левом меню найдите запись «Конечные точки»:

Статус должен быть "InService", что означает, что служба готова к использованию. Если вы нажмете на имя конечной точки, вы получите URL-адрес HTTP для запросов к модели (круто, не так ли?):

Но мы должны иметь в виду, что эта конечная точка не является публичной. Это означает, что нам нужна авторизация AWS для доступа к нему, то есть пользователь с ключами доступа и секретным ключом, чтобы делать безопасные запросы протокола запросов REST или HTTP.

9. Тестирование сервера

а). Изнутри AWS, т. е. вызовы из SageMaker Notebook.

i) Создать предиктор

ii) Загрузите изображение для тестирования

iii) Запустите прогноз

iv) Просто для проверки мы наносим результат

В этом случае мы отображаем только объекты с порогом достоверности более 90%.

б). Извне AWS, то есть код, который может быть в веб-приложении или мобильном сервисе и т. д., поскольку у нас есть конечная точка для использования нашей модели обнаружения объектов.

i) Использование инструмента Postman. На шаге номер восемь (8) мы получили URL-адрес HTTP из развертывания SageMaker, поэтому теперь мы будем его использовать.

(1) Загрузите изображение в качестве тела запроса

(2) Добавьте аутентификацию AWS. Чтобы получить эти учетные данные, включите «Ключи доступа» в сервисе AWS IAM для пользователя.

(3) Отправить запрос

Как видите, у нас есть объект массивов, где каждая позиция имеет идентификатор класса (1,0), вероятность (0,98) и граничные координаты (75,9, 92,6, 418,2, 308,3). Эта информация может быть удобно использована в вашем приложении так, как вы хотите.

(4) Создавайте код на многих языках. Postman может генерировать эти фрагменты кода и использовать их как представление о наших проектах.

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

Похожие записи…



Рекомендации для производственной среды

Поскольку этот пост представляет собой введение в стек AWS ML, вы можете увидеть все открытые учетные данные пользователя, поэтому он бесполезен для реальных приложений. Возможно, лучший способ — создать API-шлюз и лямбда-функцию в качестве авторизатора, чтобы защитить связь с нашим сервером и избежать злоупотребления запросом.

Как видите, на шаге 9a (изнутри AWS) вы можете использовать функцию Lambda для создания и вызова предиктора и написать некоторую логику вашего приложения, но вы должны учитывать SageMaker Python SDK и его зависимости.

Репозиторий GitHub. Пример приложения, описанный выше, доступен в следующем репозитории https://github.com/edycop/aws_cv_python, где вы можете найти:

  • Файл demo_object_detection.ipynb, который представляет собой код, относящийся к разделу MXNet и GluonCV с Python этого сообщения.
  • deploy_mxnet_sagemaker.ipynb — это код, связанный с MXNet и GluonCV с использованием AWS и Python в разделе этой публикации.

Спасибо за прочтение и следите за обновлениями нашего следующего технического поста!

Помните, что Codescrum управляет несколькими технологиями как AWS, если у вас есть какие-либо сомнения или комментарии по этой теме, не стесняйтесь связаться с нами!



использованная литература