Руководство. Обучение модели обнаружения объектов с помощью AutoML и Python

ПРИМЕНИМО К:Расширение ml Azure CLI версии 2 (текущая версия)Пакет SDK для Python azure-ai-ml версии 2 (текущая версия)

В этом руководстве описано, как обучить модель обнаружения объектов с помощью автоматизированного машинного обучения Azure с расширением CLI Машинного обучения Azure версии 2 или пакетом SDK Python для Машинного обучения Azure версии 2. Эта модель обнаружения объектов определяет, содержит ли изображение объекты, такие как жестяная банка, картонная коробка, бутылка с молоком или бутылка с водой.

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

В этом руководстве вы пишете код с помощью пакета SDK для Python и изучите следующие задачи:

  • Скачивание и преобразование данных.
  • Обучение модели обнаружения объектов автоматизированного машинного обучения.
  • Определение значений гиперпараметров для модели.
  • Выполнение очистки гиперпараметров.
  • Развертывание модели
  • Визуализация обнаружений.

Предварительные требования

  • Чтобы использовать Машинное обучение Azure, сначала потребуется рабочая область. Если у вас ее нет, выполните инструкции По созданию ресурсов, чтобы приступить к созданию рабочей области и узнать больше об ее использовании.

  • Для этой возможности поддерживается Python 3.6 и 3.7

  • Скачайте и распакуйте файл данных *odFridgeObjects.zip. Набор данных объявляется в формате Pascal VOC, в котором каждое изображение соответствует XML-файлу. Каждый XML-файл содержит сведения о том, где находится соответствующий файл изображения, а также содержит сведения об ограничивающих прямоугольниках и метках объектов. Чтобы использовать эти данные, сначала необходимо преобразовать их в требуемый формат JSONL, как показано в разделе Преобразование скачанных данных в JSONL записной книжки.

  • Используйте вычислительный экземпляр для выполнения этого руководства без дальнейшей установки. (Узнайте, как создать вычислительный экземпляр.) Или установите CLI/SDK, чтобы использовать собственную локальную среду.

    ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение ML для Azure CLI версии 2 (текущая версия)

    Этот же учебник доступен в репозитории azureml-examples на сайте GitHub. Если вы хотите запустить его в собственной локальной среде:

Настройка целевых объектов вычисления

Примечание

Чтобы попробовать бессерверные вычисления (предварительная версия), пропустите этот шаг и перейдите к настройке эксперимента.

Сначала необходимо настроить целевой объект вычислений, который будет использоваться для обучения модели автоматизированного машинного обучения. Для моделей автоматизированного машинного обучения требуются номера SKU GPU для выполнения задач с изображениями.

В этом руководстве используется серия NCsv3 (с GPU версии 100), так как этот тип целевого объекта вычислений использует несколько GPU для ускорения обучения. Кроме того, можно настроить несколько узлов, чтобы воспользоваться преимуществами параллелизма при настройке гиперпараметров модели.

Следующий код создает вычислительный ресурс с GPU размера Standard_NC24s_v3, который содержит четыре узла.

ОБЛАСТЬ ПРИМЕНЕНИЯ:расширение Машинного обучения для Azure CLI версии 2 (текущая версия)

Создайте YML-файл со следующей конфигурацией.

$schema: https://azuremlschemas.azureedge.net/latest/amlCompute.schema.json 
name: gpu-cluster
type: amlcompute
size: Standard_NC24s_v3
min_instances: 0
max_instances: 4
idle_time_before_scale_down: 120

Чтобы создать вычислительный ресурс, выполните следующую команду CLI версии 2 и укажите для нее путь к YML-файлу, имя рабочей области, группу ресурсов и идентификатор подписки.

az ml compute create -f [PATH_TO_YML_FILE] --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]

Настройка эксперимента

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

ОБЛАСТЬ ПРИМЕНЕНИЯ:расширение Машинного обучения для Azure CLI версии 2 (текущая версия)

Имя эксперимента можно указать с помощью ключа experiment_name следующим образом:

experiment_name: dpv2-cli-automl-image-object-detection-experiment

Визуализация входных данных

После подготовки данных изображения ввода в формате JSON (строки JSON) для изображения можно визуализировать фактические ограничивающие прямоугольники. Для этого установите matplotlib.

%pip install --upgrade matplotlib

%matplotlib inline
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import matplotlib.patches as patches
from PIL import Image as pil_image
import numpy as np
import json
import os

def plot_ground_truth_boxes(image_file, ground_truth_boxes):
    # Display the image
    plt.figure()
    img_np = mpimg.imread(image_file)
    img = pil_image.fromarray(img_np.astype("uint8"), "RGB")
    img_w, img_h = img.size

    fig,ax = plt.subplots(figsize=(12, 16))
    ax.imshow(img_np)
    ax.axis("off")

    label_to_color_mapping = {}

    for gt in ground_truth_boxes:
        label = gt["label"]

        xmin, ymin, xmax, ymax =  gt["topX"], gt["topY"], gt["bottomX"], gt["bottomY"]
        topleft_x, topleft_y = img_w * xmin, img_h * ymin
        width, height = img_w * (xmax - xmin), img_h * (ymax - ymin)

        if label in label_to_color_mapping:
            color = label_to_color_mapping[label]
        else:
            # Generate a random color. If you want to use a specific color, you can use something like "red".
            color = np.random.rand(3)
            label_to_color_mapping[label] = color

        # Display bounding box
        rect = patches.Rectangle((topleft_x, topleft_y), width, height,
                                 linewidth=2, edgecolor=color, facecolor="none")
        ax.add_patch(rect)

        # Display label
        ax.text(topleft_x, topleft_y - 10, label, color=color, fontsize=20)

    plt.show()

def plot_ground_truth_boxes_jsonl(image_file, jsonl_file):
    image_base_name = os.path.basename(image_file)
    ground_truth_data_found = False
    with open(jsonl_file) as fp:
        for line in fp.readlines():
            line_json = json.loads(line)
            filename = line_json["image_url"]
            if image_base_name in filename:
                ground_truth_data_found = True
                plot_ground_truth_boxes(image_file, line_json["label"])
                break
    if not ground_truth_data_found:
        print("Unable to find ground truth information for image: {}".format(image_file))

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

image_file = "./odFridgeObjects/images/31.jpg"
jsonl_file = "./odFridgeObjects/train_annotations.jsonl"

plot_ground_truth_boxes_jsonl(image_file, jsonl_file)

Загрузка данных и создание MLTable

Чтобы использовать данные для обучения, отправьте данные в хранилище BLOB-объектов по умолчанию рабочей области Машинного обучения Azure и зарегистрируйте их в качестве ресурса. Регистрация данных дает несколько преимуществ:

  • легко поделиться данными с другими участниками команды;
  • управление версиями метаданных (расположение, описание и так далее);
  • отслеживание происхождения данных.

ОБЛАСТЬ ПРИМЕНЕНИЯ:расширение Машинного обучения для Azure CLI версии 2 (текущая версия)

Создайте YML-файл со следующей конфигурацией.

$schema: https://azuremlschemas.azureedge.net/latest/data.schema.json
name: fridge-items-images-object-detection
description: Fridge-items images Object detection
path: ./data/odFridgeObjects
type: uri_folder

Чтобы отправить изображения как ресурсы данных, выполните следующую команду CLI версии 2 и укажите для нее путь к YML-файлу, имя рабочей области, группу ресурсов и идентификатор подписки.

az ml data create -f [PATH_TO_YML_FILE] --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]

Следующим шагом создайте MLTable на основе данных в формате JSONL, как показано ниже. MLtable упаковывает данные в объект, пригодный для употребления при обучении.

paths:
  - file: ./train_annotations.jsonl
transformations:
  - read_json_lines:
        encoding: utf8
        invalid_lines: error
        include_path_column: false
  - convert_column_types:
      - columns: image_url
        column_type: stream_info

ОБЛАСТЬ ПРИМЕНЕНИЯ:расширение Машинного обучения для Azure CLI версии 2 (текущая версия)

Следующая конфигурация создает обучающие и проверочные данные на основе MLTable.

target_column_name: label
training_data:
  path: data/training-mltable-folder
  type: mltable
validation_data:
  path: data/validation-mltable-folder
  type: mltable

Настройка эксперимента по обнаружению объектов

Чтобы настроить автоматические задания машинного обучения для задач, связанных с образами, создайте задание AutoML для конкретной задачи.

ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение ml для Azure CLI версии 2 (текущая версия)

Чтобы использовать бессерверные вычисления (предварительная версия), замените строку compute: azureml:gpu-cluster следующим кодом:

resources:
 instance_type: Standard_NC24s_v3
 instance_count: 4
task: image_object_detection
primary_metric: mean_average_precision
compute: azureml:gpu-cluster

Автоматическое очистка гиперпараметров для задач изображений (автомоделя)

Важно!

Эта функция сейчас доступна в виде общедоступной предварительной версии. Эта предварительная версия предоставляется без соглашения об уровне обслуживания. Некоторые функции могут не поддерживаться или их возможности могут быть ограничены. Дополнительные сведения см. в статье Дополнительные условия использования предварительных выпусков Microsoft Azure.

В задании AutoML можно выполнить автоматическую очистку гиперпараметров, чтобы найти оптимальную модель (мы называем эту функцию Автомодированием). Вы указываете только количество проб; пространство поиска гиперпараметров, метод выборки и политика досрочного завершения не требуются. Система автоматически определяет область пространства гиперпараметров для очистки на основе количества испытаний. Значение от 10 до 20, скорее всего, будет хорошо работать со многими наборами данных.

ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение ML для Azure CLI версии 2 (текущая версия)

limits:
  max_trials: 10
  max_concurrent_trials: 2

Затем можно отправить задание для обучения модели изображения.

ОБЛАСТЬ ПРИМЕНЕНИЯ:расширение Машинного обучения для Azure CLI версии 2 (текущая версия)

Чтобы отправить задание AutoML, выполните следующую команду CLI версии 2 и укажите для нее путь к YML-файлу, имя рабочей области, группу ресурсов и идентификатор подписки.

az ml job create --file ./hello-automl-job-basic.yml --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]

Ручная очистка гиперпараметров для задач с изображениями

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

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

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

Ограничения заданий

Вы можете управлять ресурсами, затраченными на задание обучения изображений AutoML, указав timeout_minutes, max_trials и max_concurrent_trials для задания в параметрах ограничения. См. подробное описание параметров ограничения заданий.

ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение ml для Azure CLI версии 2 (текущая версия)

limits:
  timeout_minutes: 60
  max_trials: 10
  max_concurrent_trials: 2

Следующий код определяет пространство поиска при подготовке к очистке гиперпараметров для каждой определенной архитектуры и yolov5fasterrcnn_resnet50_fpn. В пространстве поиска укажите диапазон значений для learning_rate, optimizer, lr_scheduler и так далее, в пределах которых служба AutoML будет выбирать эти значения в попытках создать модель с оптимальной первичной метрикой. Если значения гиперпараметров не указаны, то для каждой архитектуры используются значения по умолчанию.

Для параметров настройки используйте случайную выборку, чтобы выбрать примеры из этого пространства параметров путем применения алгоритма random sampling_algorithm. Ограничения заданий, настроенные выше, предписывают автоматизированному машинному обучению опробовать в общей сложности 10 проб с этими различными примерами, запуская одновременно две пробные версии на целевом объекте вычислений, который был настроен с использованием четырех узлов. Чем больше параметров содержит пространство поиска, тем больше попыток потребуется для поиска оптимальных моделей.

Кроме того, используется политика преждевременного завершения Bandit. Эта политика прекращает работу пробных версий с низкой производительности; то есть те пробные версии, которые не соответствуют 20 % резерва от наиболее производительной пробной версии, что значительно экономит вычислительные ресурсы.

ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение ML для Azure CLI версии 2 (текущая версия)

sweep:
  sampling_algorithm: random
  early_termination:
    type: bandit
    evaluation_interval: 2
    slack_factor: 0.2
    delay_evaluation: 6
search_space:
  - model_name:
      type: choice
      values: [yolov5]
    learning_rate:
      type: uniform
      min_value: 0.0001
      max_value: 0.01
    model_size:
      type: choice
      values: [small, medium]

  - model_name:
      type: choice
      values: [fasterrcnn_resnet50_fpn]
    learning_rate:
      type: uniform
      min_value: 0.0001
      max_value: 0.001
    optimizer:
      type: choice
      values: [sgd, adam, adamw]
    min_size:
      type: choice
      values: [600, 800]

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

ОБЛАСТЬ ПРИМЕНЕНИЯ:расширение Машинного обучения для Azure CLI версии 2 (текущая версия)

Чтобы отправить задание AutoML, выполните следующую команду CLI версии 2 и укажите для нее путь к YML-файлу, имя рабочей области, группу ресурсов и идентификатор подписки.

az ml job create --file ./hello-automl-job-basic.yml --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]

При выполнении очистки гиперпараметров может быть полезно визуализировать различные пробные версии, которые были опробованы с помощью пользовательского интерфейса HyperDrive. Чтобы перейти к этому пользовательскому интерфейсу, перейдите на вкладку "Дочерние задания" в пользовательском интерфейсе main automl_image_job выше, которая является родительским заданием HyperDrive. Затем можно перейти на вкладку "Дочерние задания" этой вкладки.

Кроме того, ниже вы можете просмотреть родительское задание HyperDrive и перейти на вкладку "Дочерние задания":

ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение ml для Azure CLI версии 2 (текущая версия)

CLI example not available, please use Python SDK.

регистрация и развертывание модели.

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

Получите лучшую пробную версию

ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение ML для Azure CLI версии 2 (текущая версия)

CLI example not available, please use Python SDK.

Регистрация модели

Зарегистрируйте модель, используя azureml путь или скачанный локально путь.

ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение ML для Azure CLI версии 2 (текущая версия)

 az ml model create --name od-fridge-items-mlflow-model --version 1 --path azureml://jobs/$best_run/outputs/artifacts/outputs/mlflow-model/ --type mlflow_model --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]

Завершив регистрацию модели, которую вы хотите использовать, вы можете развернуть ее с помощью управляемой сетевой конечной точки deploy-managed-online-endpoint.

Настройка сетевой конечной точки

ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение ML для Azure CLI версии 2 (текущая версия)

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
name: od-fridge-items-endpoint
auth_mode: key

Создание конечной точки

С помощью созданного ранее объекта MLClient мы создадим конечную точку в рабочей области. Эта команда запускает создание конечной точки и возвращает ответ подтверждения, пока создание конечной точки продолжается.

ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение ML для Azure CLI версии 2 (текущая версия)

az ml online-endpoint create --file .\create_endpoint.yml --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]

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

Настройка сетевого развертывания

Развертывание представляет собой набор ресурсов, необходимых для размещения модели, которая выполняет процесс вывода. Мы создаем развертывание для нашей конечной ManagedOnlineDeployment точки с помощью класса . Для кластера развертывания можно использовать номера SKU для виртуальных машин GPU или процессора.

ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение ML для Azure CLI версии 2 (текущая версия)

name: od-fridge-items-mlflow-deploy
endpoint_name: od-fridge-items-endpoint
model: azureml:od-fridge-items-mlflow-model@latest
instance_type: Standard_DS3_v2
instance_count: 1
liveness_probe:
    failure_threshold: 30
    success_threshold: 1
    timeout: 2
    period: 10
    initial_delay: 2000
readiness_probe:
    failure_threshold: 10
    success_threshold: 1
    timeout: 10
    period: 10
    initial_delay: 2000 

Создание развертывания

С помощью созданного MLClient ранее мы создадим развертывание в рабочей области. Эта команда запускает создание развертывания и возвращает ответ с подтверждением во время создания развертывания.

ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение ml для Azure CLI версии 2 (текущая версия)

az ml online-deployment create --file .\create_deployment.yml --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]

Обновление трафика:

По умолчанию текущее развертывание получает 0 % трафика. Вы можете задать процент трафика, который будет направляться в текущее развертывание. Сумма трафика всех развертываний для одной конечной точки не должна превышать 100 %.

ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение ML для Azure CLI версии 2 (текущая версия)

az ml online-endpoint update --name 'od-fridge-items-endpoint' --traffic 'od-fridge-items-mlflow-deploy=100' --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]

тестирование развертывания

ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение ML для Azure CLI версии 2 (текущая версия)

CLI example not available, please use Python SDK.

Визуализация обнаружений

После оценки тестового изображения можно визуализировать ограничивающие прямоугольники для этого изображения. Для этого убедитесь, что у вас установлена библиотека matplotlib.

ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение ML для Azure CLI версии 2 (текущая версия)

CLI example not available, please use Python SDK.

Очистка ресурсов

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

Если вы не планируете использовать созданные ресурсы, удалите их, чтобы с вас не взималась плата.

  1. На портале Azure выберите Группы ресурсов в левой части окна.
  2. В списке выберите созданную группу ресурсов.
  3. Выберите Удалить группу ресурсов.
  4. Введите имя группы ресурсов. Теперь щелкните Удалить.

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

Дальнейшие действия

Изучив это руководство об автоматическом машинном обучении, вы выполнили следующие задачи.

  • Настройка рабочей области и подготовка данных для эксперимента.
  • Обучение модели автоматизированного обнаружения объектов.
  • Определение значения гиперпараметров для модели.
  • Очистка гиперпараметров.
  • Развертывание модели.
  • Визуализация обнаружений.

Примечание

Использование набора данных объектов "Холодильник" доступно через лицензирование в рамках лицензии MIT.