Вам не нужно работать в области искусственного интеллекта (ИИ), чтобы быть ошеломленным достижениями, достигнутыми в этой области в недавнем прошлом. Это откровение могло также прийти через случайное цифровое взаимодействие, такое как прокрутка фотопленки вашего iPhone, и при нажатии на изображение оно внезапно отделяет человека от изображения и удаляет фон (это недавно меня удивило, попробуйте!). Мы будем использовать ту же технику, что и Apple здесь, и знаете что, она гораздо доступнее, чем вы могли подумать сначала.

Вам больше не нужно быть звездным специалистом по данным, чтобы использовать Computer Vision и использовать его для своих собственных приложений!

В этой статье представлено практическое руководство по обучению собственной модели сегментации экземпляров с использованием возможностей Azure AutoML в составе Azure Machine Learning Studio (Azure ML). Прежде чем приступить к фрагментам кода, которые позволят вам обучить вашу модель, давайте сначала объясним параметры данных и хранения, которые будут использоваться в рамках этого руководства.

Набор данных и хранилище

Мы будем работать над проблемой, которая распознает, находит и маркирует мусорные предметы. Для этого мы будем использовать набор данных мусора TACO, который в настоящее время содержит 1500 предварительно размеченных изображений. Чтобы загрузить изображения, вы можете следовать инструкциям репозитория GitHub. После получения изображений рекомендуется загрузить их в хранилище BLOB-объектов Azure ML через Azure Storage Explorer. Azure Storage Explorer позволяет загружать и скачивать файлы, а также упорядочивать их с помощью интуитивно понятного пользовательского интерфейса. Это также позволяет нам более эффективно обучать наши модели, поскольку позже мы будем считывать обучающие файлы напрямую из связанной учетной записи хранения, а не из локальной общей папки. Чтобы скачать Azure Storage Explorer, следуйте инструкциям здесь.

Azure ML позволяет создавать версии наборов данных. Это выгодно, поскольку вы можете легко получить к ним доступ через SDK (Python или CLI), а также потому, что он обеспечивает происхождение каждого артефакта, который использует этот версионный набор данных. В частности, такой артефакт представляет собой обученную модель, но его также можно использовать для других задач, не обязательно включающих обучение модели, таких как конвейеры преобразования данных или мониторинг данных с помощью дрейфа данных. Чтобы использовать это, мы подключим изображения, которые мы загрузили в хранилище BLOB-объектов, с нашей функциональностью данных Azure ML. Для этого следуйте инструкциям, изображенным на скриншоте.

Задача

В компьютерном зрении мы различаем 3 разные задачи:

  1. Классификация изображений. Для данного изображения укажите, какие объекты/классы присутствуют.
  2. Обнаружение объектов:классификация изображений + где эти изображения расположены с использованием прямоугольной ограничивающей рамки
  3. Сегментация экземпляра: обнаружение объекта + точные координаты объекта. Вместо того, чтобы использовать прямоугольную ограничивающую рамку, мы размещаем элемент с помощью многоугольника.

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

Теперь, когда у нас есть все данные, мы продолжим и обучим нашу модель. Полный обучающий код можно найти в этом репозитории. Чтобы обучить модель, мы выполним 2 шага:

  1. Предварительно обработайте данные, поступающие в формате файла COCO, в JSONL.
  2. Обучите модель с помощью пакета SDK Python v2 для машинного обучения Azure (предварительная версия)

Концепции

Предварительную обработку данных и все необходимые шаги можно понять из этой записной книжки. Вы можете клонировать этот репозиторий с помощью Git прямо в рабочую область Azure ML, следуя этим инструкциям. Поскольку весь код объясняется в блокноте, я сосредоточусь на объяснении нескольких концепций.

  • Файл JSONL. Формат JSONL представляет собой словари, разделенные новой строкой. Это единственный формат, который поддерживает AutoML для изображений. Вы можете представить Azure AutoML как API, который получает данные в этом стандартизированном формате файла.
  • AutoML для изображений. Обширную документацию по AutoML Azure ML можно найти здесь.
  • AzureML Python SDK версии 2 (предварительная версия): этот пакет SDK содержит несколько существенных изменений. Например, в нем представлена ​​концепция, называемая клиентом ML, которая используется для нескольких задач/заданий, которые можно запускать либо через Python SDK, либо через интерфейс командной строки (CLI). Он позволяет регистрировать наборы данных, запускать задания (ранее известные как эксперименты), отслеживать задания, создавать компоненты или конвейеры и многое другое с помощью одного унифицированного класса. Больше можно найти здесь.

Обучение

Сама суть всего этого урока, обучение модели, удивительно коротка и проста. Эта записная книжка объясняет различные параметры конфигурации, а также параметры настройки гиперпараметров. Чтобы запустить запуск AutoML, следующий фрагмент кода выполнит эту работу. Он использует магистральную сеть Mask R-CNN (так же, как новая функция Apple Camera Roll). В конфигурации вы также можете поменять maskrcnn_resnet50_fpn на другой размер сети, например maskrcnn_resnet101_fpn.

from azure.ai.ml import automl
# Create the Instance Segmentation AutoML job

image_instance_segmentation_job = automl.image_instance_segmentation(
    compute=compute_name,
    experiment_name=exp_name,
    training_data=my_training_data_input,
    validation_data=my_validation_data_input,
    target_column_name="label",
)

image_instance_segmentation_job.set_limits(timeout_minutes=700) #The larger the dataset, the larger the timeout. 

image_instance_segmentation_job.set_image_model(model_name="maskrcnn_resnet50_fpn")
# Submit the AutoML job
returned_job = ml_client.jobs.create_or_update(image_instance_segmentation_job)
# Stream the AutoML job progress
ml_client.jobs.stream(returned_job.name)

После того, как вы отправили свою работу, вы можете отслеживать ее в пользовательском интерфейсе, который может выглядеть примерно так, как показано ниже. Вы можете ожидать, что ваша модель будет тренироваться несколько часов (4,5 в моем случае). Что особенно полезно, так это то, что AutoML уже создает все артефакты, которые можно использовать для последующего развертывания вашей модели, такие как конфигурация среды, файл модели, сценарий оценки и т. д.

Результаты модели не идеальны, но и не так уж плохи, как и ожидалось. Следуя руководству, вы можете увидеть, что существует сильный дисбаланс классов между различными классами предметов мусора. Некоторые предметы мусора, такие как бутылки, встречаются очень часто, а батарейки — очень редко. Чтобы улучшить результаты, вы можете попробовать развертку гиперпараметров и/или другие конфигурации сети, как показано в примерах кода. Кроме того, вы можете собирать изображения редко встречающихся классов и маркировать их самостоятельно, используя возможность маркировки AzureML.

Развертывание

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

online_endpoint_name = endpoint.name
deployment_name = "trash-segmentation-granular"

deployment = ManagedOnlineDeployment(
    name=deployment_name,
    endpoint_name=online_endpoint_name,
    model=registered_model.id,
    instance_type="Standard_DS3_V2",
    instance_count=1,
    liveness_probe=ProbeSettings(
        failure_threshold=30,
        success_threshold=1,
        timeout=2,
        period=10,
        initial_delay=2000,
    ),
    readiness_probe=ProbeSettings(
        failure_threshold=10,
        success_threshold=1,
        timeout=10,
        period=10,
        initial_delay=2000,
    ),
)
# This may take 30 minutes
ml_client.online_deployments.begin_create_or_update(deployment)

Развертывание модели может занять некоторое время, но после этого вы можете приступить к внедрению конечной точки в приложение по вашему вкусу (приложение, устройство Edge и т. д.) и приступить к сортировке мусора!

Конец

Спасибо, что прочитали этот урок. Все примеры кода можно найти по адресу:

Вы также можете подписаться на меня в LinkedIn.