Поделиться через


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

ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение машинного обучения Azure CLI версии 2 (current)Python SDK azure-ai-ml версии 2 (current)

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

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

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

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

Необходимые компоненты

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

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

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

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

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

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

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

Примечание.

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

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

В этом руководстве используется серия NCsv3 (с gpu V100), так как этот тип целевого объекта вычислений использует несколько 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.

ОБЛАСТЬ ПРИМЕНЕНИЯ: расширение машинного обучения 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

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

Внимание

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

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

ОБЛАСТЬ ПРИМЕНЕНИЯ: расширение машинного обучения 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_minutesmax_trials max_concurrent_trials задание и задание в параметрах ограничения. Дополнительные сведения о параметрах ограничений заданий см. в подробном описании.

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

limits:
  timeout_minutes: 60
  max_trials: 10
  max_concurrent_trials: 2

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

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

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

ОБЛАСТЬ ПРИМЕНЕНИЯ: расширение машинного обучения 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. Вы можете перейти к этому пользовательскому интерфейсу, перейдя на вкладку "Дочерние задания" в пользовательском интерфейсе основного automl_image_job выше, который является родительским заданием HyperDrive. Затем вы можете перейти на вкладку "Дочерние задания" этого.

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

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

CLI example not available, please use Python SDK.

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

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

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

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

CLI example not available, please use Python SDK.

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

Зарегистрируйте модель с помощью azureml пути или локально скачаемого пути.

ОБЛАСТЬ ПРИМЕНЕНИЯ: расширение машинного обучения 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.

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

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

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

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

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

ОБЛАСТЬ ПРИМЕНЕНИЯ: расширение машинного обучения 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 или процессора.

ОБЛАСТЬ ПРИМЕНЕНИЯ: расширение машинного обучения 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 ранее развертывания мы создадим развертывание в рабочей области. Эта команда запускает создание развертывания и возвращает ответ подтверждения во время создания развертывания.

ОБЛАСТЬ ПРИМЕНЕНИЯ: расширение машинного обучения 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 %.

ОБЛАСТЬ ПРИМЕНЕНИЯ: расширение машинного обучения 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]

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

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

CLI example not available, please use Python SDK.

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

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

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

CLI example not available, please use Python SDK.

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

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

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

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

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

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

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

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

Примечание.

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