Настройка AutoML для обучения моделей компьютерного зрения

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

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

Автоматизированное машинное обучение поддерживает обучение моделей для задач компьютерного зрения, например для классификация изображений, обнаружения объектов и сегментации экземпляров. Создание моделей AutoML для задач компьютерного зрения в настоящее время поддерживается на основе пакета SDK Машинного обучения Azure для Python. Полученные пробные версии экспериментов, модели и выходные данные доступны из пользовательского интерфейса Студия машинного обучения Azure. Дополнительные сведения об автоматизированном машинном обучении для задач компьютерного зрения на данных изображений.

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

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

Выберите тип задачи

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

Тип задачи Синтаксис задания AutoML
классификация изображений. CLI (версия 2): image_classification
Пакет SDK (версия 2): image_classification()
классификация изображений с несколькими метками CLI (версия 2): image_classification_multilabel
Пакет SDK (версия 2): image_classification_multilabel()
обнаружение объектов изображений CLI (версия 2): image_object_detection
Пакет SDK (версия 2): image_object_detection()
сегментация экземпляров изображений CLI (версия 2): image_instance_segmentation
Пакет SDK (версия 2): image_instance_segmentation()

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

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

Пример:

task: image_object_detection

Данные для обучения и проверки

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

Если данные обучения имеют другой формат (например, pascal VOC или COCO), можно применить вспомогательные скрипты, входящие в пример записных книжек, чтобы преобразовать данные в JSONL. Дополнительные сведения о подготовке данных для задач компьютерного зрения с помощью автоматизированного машинного обучения.

Примечание

Для отправки задания AutoML обучающие данные должны содержать не менее 10 изображений.

Предупреждение

Для этой возможности создание MLTable на основе данных в формате JSONL поддерживается только с использованием пакета SDK и CLI. Создание MLTable через пользовательский интерфейс в настоящее время не поддерживается.

Примеры схемы JSONL

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

Поле Описание
image_url Содержит путь к файлу в виде объекта StreamInfo
image_details Сведения о метаданных изображения включают высоту, ширину и формат. Это поле является необязательным, поэтому оно может существовать или не существовать.
label Представление JSON метки изображения на основе типа задачи.

Ниже приведен пример файла JSONL для классификации изображений:

{
      "image_url": "azureml://subscriptions/<my-subscription-id>/resourcegroups/<my-resource-group>/workspaces/<my-workspace>/datastores/<my-datastore>/paths/image_data/Image_01.png",
      "image_details":
      {
          "format": "png",
          "width": "2230px",
          "height": "4356px"
      },
      "label": "cat"
  }
  {
      "image_url": "azureml://subscriptions/<my-subscription-id>/resourcegroups/<my-resource-group>/workspaces/<my-workspace>/datastores/<my-datastore>/paths/image_data/Image_02.jpeg",
      "image_details":
      {
          "format": "jpeg",
          "width": "3456px",
          "height": "3467px"
      },
      "label": "dog"
  }

Нижеприведенный код представляет собой пример файла JSONL для классификации объектов:

{
    "image_url": "azureml://subscriptions/<my-subscription-id>/resourcegroups/<my-resource-group>/workspaces/<my-workspace>/datastores/<my-datastore>/paths/image_data/Image_01.png",
    "image_details":
    {
        "format": "png",
        "width": "2230px",
        "height": "4356px"
    },
    "label":
    {
        "label": "cat",
        "topX": "1",
        "topY": "0",
        "bottomX": "0",
        "bottomY": "1",
        "isCrowd": "true",
    }
}
{
    "image_url": "azureml://subscriptions/<my-subscription-id>/resourcegroups/<my-resource-group>/workspaces/<my-workspace>/datastores/<my-datastore>/paths/image_data/Image_02.png",
    "image_details":
    {
        "format": "jpeg",
        "width": "1230px",
        "height": "2356px"
    },
    "label":
    {
        "label": "dog",
        "topX": "0",
        "topY": "1",
        "bottomX": "0",
        "bottomY": "1",
        "isCrowd": "false",
    }
}

Использование данных

Подготовив данные в формате 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

Автоматизированное Машинное обучение не накладывают ограничений на размер данных для обучения или проверки в задачах компьютерного зрения. Максимальный размер набора данных ограничен уровнем хранилища за набором данных (т. е. хранилище больших двоичных объектов). Не существует минимального требования к количеству изображений или меток. Но мы рекомендуем начинать не менее чем с 10–15 примеров на каждую метку, чтобы обеспечить достаточную точную модель. Чем больше общее количество меток и классов, тем больше примеров потребуется для каждой метки.

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

Обучающие данные являются обязательным параметром и передаются с помощью training_data ключа. При желании вы можете указать другую таблицу MLtable в качестве проверочных данных с помощью ключа validation_data. Если проверочные данные не указаны, по умолчанию для проверки будет использоваться 20 % от данных обучения, если не предоставлен аргумент validation_data_size с другим значением.

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

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

Объект вычислений для выполнения эксперимента

Предоставьте целевой объект вычислений для автоматизированного машинного обучения, чтобы провести обучение модели. Модели автоматизированного машинного обучения для задач компьютерного зрения нуждаются в SKU GPU и поддерживают семейства NC и ND. Для ускорения обучения мы рекомендуем использовать серию NCsv3 (с GPU версии 100). Целевой объект вычислений с SKU виртуальной машины с несколькими GPU использует несколько GPU, что также ускоряет обучение. Кроме того, при настройке целевого объекта вычислений с несколькими узлами можно ускорить обучение модели с помощью параллелизма при настройке гиперпараметров для модели.

Примечание

Если вы используете вычислительный экземпляр в качестве целевого объекта вычислений, убедитесь, что несколько заданий AutoML не выполняются одновременно. Кроме того, убедитесь, что max_concurrent_trials в ограничениях заданий задано значение 1.

Целевой объект вычислений передается с помощью параметра compute. Пример:

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

compute: azureml:gpu-cluster

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

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

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

Основная метрика

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

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

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

Параметр Подробный сведения
max_trials Параметр для максимального количества пробных версий для очистки. Требуется целое число от 1 до 1000. При изучении только гиперпараметров по умолчанию для заданной архитектуры модели задайте для этого параметра значение 1. Значение по умолчанию — 1.
max_concurrent_trials Максимальное количество пробных версий, которые могут выполняться одновременно. Значение должно быть целым числом от 1 до 100. Значение по умолчанию — 1.

ПРИМЕЧАНИЕ.
  • Количество одновременных пробных версий зависит от ресурсов, доступных в указанном целевом объекте вычислений. Убедитесь, что целевой объект вычислений имеет доступные ресурсы для требуемого уровня параллелизма.
  • max_concurrent_trials ограничивается внутренним max_trials значением. Например, если пользователь задает max_concurrent_trials=4, max_trials=2значения будут внутренне обновлены как max_concurrent_trials=2, max_trials=2.
  • timeout_minutes Время в минутах до завершения эксперимента. Если ни один из них не указан, timeout_minutes эксперимента по умолчанию составляет семь дней (не более 60 дней).

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

    limits:
      timeout_minutes: 60
      max_trials: 10
      max_concurrent_trials: 2
    

    Автоматически масштабируемые гиперпараметры модели (autoMode)

    Важно!

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

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

    Активация автомоделя

    Вы можете выполнить автоматическую очистку, задав max_trials значение больше 1 в limits и не указывая пространство поиска, метод выборки и политику завершения. Мы называем эту функцию automode; См. пример ниже.

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

    limits:
      max_trials: 10
      max_concurrent_trials: 2
    

    Некоторые пробные версии от 10 до 20, скорее всего, будут хорошо работать со многими наборами данных. Бюджет времени для задания AutoML по-прежнему можно задать, но мы рекомендуем делать это только в том случае, если каждая пробная версия может занять много времени.

    Предупреждение

    Запуск автоматической очистки через пользовательский интерфейс в настоящее время не поддерживается.

    Отдельные пробные версии

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

    Поддерживаемые архитектуры моделей

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

    Задача архитектуры моделей Синтаксис строкового литерала
    default_model* обозначено звездочкой *
    Классификация изображений
    (несколько классов и несколько меток)
    MobileNet: легковесные модели для мобильных приложений
    ResNet: остаточные сети
    ResNeSt: сети разделенного внимания
    SE-ResNeXt50: сети сжатия и возбуждения
    ViT: сети преобразователя зрения
    mobilenetv2
    resnet18
    resnet34
    resnet50
    resnet101
    resnet152
    resnest50
    resnest101
    seresnext
    vits16r224 (малый)
    vitb16r224* (базовый)
    vitl16r224 (крупный)
    Обнаружение объектов YOLOv5: одна модель обнаружения объектов этапа
    Ускорение RCNN ResNet FPN: две модели обнаружения объектов этапа
    RetinaNet ResNet FPN: дисбаланс класса адреса с утратой фокуса

    Примечание: см. model_sizeгиперпараметр для размеров модели YOLOv5.
    yolov5*
    fasterrcnn_resnet18_fpn
    fasterrcnn_resnet34_fpn
    fasterrcnn_resnet50_fpn
    fasterrcnn_resnet101_fpn
    fasterrcnn_resnet152_fpn
    retinanet_resnet50_fpn
    Сегментация экземпляров MaskRCNN ResNet FPN maskrcnn_resnet18_fpn
    maskrcnn_resnet34_fpn
    maskrcnn_resnet50_fpn*
    maskrcnn_resnet101_fpn
    maskrcnn_resnet152_fpn

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

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

    Если вы хотите использовать значения гиперпараметров по умолчанию для заданной архитектуры (например, yolov5), их можно указать с помощью ключа model_name в разделе training_parameters. Например,

    training_parameters:
        model_name: yolov5
    

    Очистка гиперпараметров модели вручную

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

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

    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]
    

    определение пространства поиска параметров;

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

    Методы выборки для очистки

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

    Тип выборки Синтаксис задания AutoML
    Случайная выборка random
    Решетчатая выборка grid
    Байесовская выборка bayesian

    Примечание

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

    Политика досрочного завершения

    Вы можете автоматически завершить неудовлетворительные пробные версии с помощью политики досрочного завершения. Раннее завершение повышает эффективность вычислений, экономя вычислительные ресурсы, которые в противном случае были бы потрачены на менее перспективные испытания. Автоматизированное ML для изображений поддерживают следующую политику досрочного завершения с помощью параметра early_termination. Если политика завершения не указана, все пробные версии выполняются до завершения.

    Политика досрочного завершения Синтаксис задания AutoML
    Политика Bandit CLI (версия 2): bandit
    Пакет SDK (версия 2): BanditPolicy()
    Политика медианной остановки CLI (версия 2): median_stopping
    Пакет SDK (версия 2): MedianStoppingPolicy()
    Политика выбора усечения CLI (версия 2): truncation_selection
    Пакет SDK (версия 2): TruncationSelectionPolicy()

    Дополнительные сведения о настройке политики досрочного завершения для очистки гиперпараметров.

    Примечание

    Пример конфигурации полной очистки см. в этом учебнике.

    Вы можете настроить все параметры, связанные с очисткой, как показано в примере ниже.

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

    sweep:
      sampling_algorithm: random
      early_termination:
        type: bandit
        evaluation_interval: 2
        slack_factor: 0.2
        delay_evaluation: 6
    

    Фиксированные параметры

    Вы можете передать фиксированные параметры, которые не изменяются во время очистки пространства параметров, как показано ниже.

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

    training_parameters:
      early_stopping: True
      evaluation_frequency: 1
    

    Дополнение данных

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

    Задача Затронутый набор данных Примененные методики приращения данных
    Классификация изображений (с несколькими классами и с несколькими метками) Обучение


    Проверка & тестирование
    Случайное изменение размера и обрезка, горизонтальное переворачивание, дрожание цвета (яркость, контрастность, насыщенность и оттенок), нормализация с использованием среднего и стандартного отклонения ImageNet по каналу


    Изменение размера, обрезка по центру, нормализация
    Обнаружение объектов, сегментация экземпляров Обучение

    Проверка & тестирование
    Случайная обрезка вокруг ограничивающих прямоугольников, развертывание, горизонтальное переворачивание, нормализация, изменение размера


    Нормализация, изменение размера
    Обнаружение объектов с использованием yolov5 Обучение

    Проверка & тестирование
    Мозаика, случайное аффинное преобразование (вращение, преобразование, масштабирование, сдвиг), горизонтальное переворачивание


    Изменение размера киноформата "Letterbox"

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

    1. apply_mosaic_for_yolo: Этот флаг относится только к модели Yolo. При установке значения False отключается расширение мозаичных данных, которое применяется во время обучения.
    2. apply_automl_train_augmentations: Установка этого флага в значение false отключает расширение, применяемое во время обучения для моделей обнаружения объектов и сегментации экземпляров. Дополнительные сведения см. в таблице выше.
      • Для моделей обнаружения объектов, отличных от yolo, и моделей сегментации экземпляров этот флаг отключает только первые три расширения, т. е. случайная обрезка вокруг ограничивающих прямоугольник, расширение, горизонтальное переворачивание. Нормализация и изменение размера по-прежнему применяются независимо от этого флага.
      • Для модели Yolo этот флаг отключает случайные аффинные и горизонтальные расширения флипментации.

    Эти два флага поддерживаются через advanced_settings в training_parameters и могут управляться следующим образом.

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

    training_parameters:
      advanced_settings: >
        {"apply_mosaic_for_yolo": false}
    
    training_parameters:
      advanced_settings: >
        {"apply_automl_train_augmentations": false}
    

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

    training_parameters:
     advanced_settings: >
       {"apply_automl_train_augmentations": false, "apply_mosaic_for_yolo": false}
    

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

    Добавочное обучение (необязательно)

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

    Передача контрольной точки с помощью идентификатора задания

    Вы можете передать идентификатор задания, из которого нужно загрузить контрольную точку.

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

    training_parameters:
      checkpoint_run_id : "target_checkpoint_run_id"
    

    Отправка задания AutoML

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

    Выходные данные и метрики вычисления

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

    Совет

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

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

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

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

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

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

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

    Снимок экрана: страница развертывания после выбора действия .

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

    Снимок экрана: верхняя часть страницы проверки данных после выбора параметров развертывания.. Снимок экрана: нижняя часть страницы проверки данных после выбора параметров развертывания..

    Обновление параметров вывода

    На предыдущем шаге мы скачали файл mlflow-model/artifacts/settings.json из лучшей модели. Теперь мы можем применить его для обновления параметров вывода, прежде чем регистрировать модель. Хотя для повышения производительности рекомендуется использовать те же параметры, что и для обучения.

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

    Задача Имя параметра Значение по умолчанию
    Классификация изображений (с несколькими классами и с несколькими метками) valid_resize_size
    valid_crop_size
    256
    224
    Обнаружение объектов min_size
    max_size
    box_score_thresh
    nms_iou_thresh
    box_detections_per_img
    600
    1333
    0,3
    0,5
    100
    Обнаружение объектов с использованием yolov5 img_size
    model_size
    box_score_thresh
    nms_iou_thresh
    640
    средняя
    0.1
    0,5
    Сегментация экземпляров min_size
    max_size
    box_score_thresh
    nms_iou_thresh
    box_detections_per_img
    mask_pixel_score_threshold
    max_number_of_polygon_points
    export_as_image
    image_type
    600
    1333
    0,3
    0,5
    100
    0,5
    100
    Неверно
    JPG

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

    Если вы хотите использовать мозаичное заполнение и хотите управлять поведением мозаичного заполнения, доступны следующие параметры: tile_grid_size, tile_overlap_ratio и tile_predictions_nms_thresh. Дополнительные сведения об этих параметрах см. разделе Обучение модели обнаружения объектов с помощью AutoML.

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

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

    Создание объяснений для прогнозов

    Важно!

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

    Предупреждение

    Объяснение модели поддерживается только для многоклассовой классификации и классификации с несколькими метками.

    Некоторые преимущества использования Объясняемого искусственного интеллекта (XAI) с AutoML для изображений:

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

    Объяснения

    Объяснения — это атрибуты признаков или весовые коэффициенты, присваиваемые каждому пикселю на входном изображении на основе его вклада в прогнозирование модели. Каждый вес может быть отрицательным (отрицательно коррелирует с прогнозом) или положительным (положительно коррелирует с прогнозом). Эти атрибуты вычисляются на основе прогнозируемого класса. Для многоклассовой классификации для каждой выборки будет создана ровно одна матрица атрибуции размера [3, valid_crop_size, valid_crop_size] , тогда как для классификации с несколькими метками матрица атрибуции размера [3, valid_crop_size, valid_crop_size] будет создана для каждой прогнозируемой метки или класса для каждой выборки.

    С помощью объясняемого искусственного интеллекта в AutoML для изображений в развернутой конечной точке пользователи могут получать визуализации объяснений (атрибутов, наложенных на входное изображение) и (или) атрибутов (многомерный массив размера [3, valid_crop_size, valid_crop_size]) для каждого изображения. Помимо визуализаций, пользователи также могут получить матрицы атрибуции, чтобы получить больший контроль над объяснениями (например, создавать пользовательские визуализации с помощью атрибутов или изучать сегменты атрибуции). Все алгоритмы объяснения будут использовать обрезанные квадратные изображения с размером valid_crop_size для создания атрибутов.

    Объяснения можно создать либо из сетевой конечной точки , либо из конечной точки пакетной службы. После завершения развертывания эту конечную точку можно использовать для создания объяснений для прогнозов. При развертывании в сети обязательно передайте request_settings = OnlineRequestSettings(request_timeout_ms=90000) параметр ManagedOnlineDeployment в и задайте request_timeout_ms его максимальное значение, чтобы избежать проблем с временем ожидания при создании объяснений (см. раздел Регистрация и развертывание модели). Некоторые методы объяснимости (XAI), например xrai , требуют больше времени (специально для классификации по нескольким меткам, так как нам нужно создавать атрибуты и /или визуализации для каждой прогнозируемой метки). Поэтому мы рекомендуем использовать любой экземпляр GPU для более быстрых объяснений. Дополнительные сведения о схеме входных и выходных данных для создания объяснений см. в документации по схеме.

    Мы поддерживаем следующие алгоритмы объяснения в AutoML для изображений:

    В следующей таблице описаны параметры настройки алгоритма объяснимости для XRAI и интегрированных градиентов. Для интерактивного обратного распространения и управляемого gradcam не требуются параметры настройки.

    Алгоритм XAI Параметры, относящиеся к алгоритму Значения по умолчанию
    xrai 1. n_steps: количество шагов, используемых методом аппроксимации. Большее количество шагов приводит к более точному приближению атрибутов (объяснений). Диапазон n_steps — [2, inf), но производительность атрибутов начинает сходиться после 50 шагов.
    Optional, Int

    2. xrai_fast: следует ли использовать более быструю версию XRAI. Если Trueзадано значение , то время вычисления для объяснений выполняется быстрее, но приводит к менее точным объяснениям (атрибутам).
    Optional, Bool
    n_steps = 50
    xrai_fast = True
    integrated_gradients 1. n_steps: количество шагов, используемых методом аппроксимации. Большее количество шагов приводит к улучшению атрибутов (объяснений). Диапазон n_steps — [2, inf), но производительность атрибутов начинает сходиться после 50 шагов.
    Optional, Int

    2. approximation_method: метод для аппроксимации целочисленного. Доступные методы приближения: riemann_middle и gausslegendre.
    Optional, String
    n_steps = 50
    approximation_method = riemann_middle

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

    Мы рекомендуем использовать алгоритмы управляемого Градиента > XRAI > GradCAM > Guided BackPropagation для более эффективного объяснения, тогда как управляемые > градиенты > GradCAM Integrated GradCAM > рекомендуется использовать для более быстрого объяснения в указанном порядке.

    Пример запроса к сетевой конечной точке выглядит следующим образом. Этот запрос создает объяснения, если model_explainability имеет значение True. Следующий запрос создаст визуализации и атрибуты с помощью более быстрой версии алгоритма XRAI с 50 шагами.

    import base64
    import json
    
    def read_image(image_path):
        with open(image_path, "rb") as f:
            return f.read()
    
    sample_image = "./test_image.jpg"
    
    # Define explainability (XAI) parameters
    model_explainability = True
    xai_parameters = {"xai_algorithm": "xrai",
                      "n_steps": 50,
                      "xrai_fast": True,
                      "visualizations": True,
                      "attributions": True}
    
    # Create request json
    request_json = {"input_data": {"columns":  ["image"],
                                   "data": [json.dumps({"image_base64": base64.encodebytes(read_image(sample_image)).decode("utf-8"),
                                                        "model_explainability": model_explainability,
                                                        "xai_parameters": xai_parameters})],
                                   }
                    }
    
    request_file_name = "sample_request_data.json"
    
    with open(request_file_name, "w") as request_file:
        json.dump(request_json, request_file)
    
    resp = ml_client.online_endpoints.invoke(
        endpoint_name=online_endpoint_name,
        deployment_name=deployment.name,
        request_file=request_file_name,
    )
    predictions = json.loads(resp)
    

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

    Интерпретация визуализаций

    Развернутая конечная точка возвращает строку образа в кодировке Base64, если для обоих model_explainability и visualizations задано значение True. Декодируйте строку base64, как описано в записных книжках , или используйте следующий код для декодирования и визуализации строк изображения base64 в прогнозе.

    import base64
    from io import BytesIO
    from PIL import Image
    
    def base64_to_img(base64_img_str):
        base64_img = base64_img_str.encode("utf-8")
        decoded_img = base64.b64decode(base64_img)
        return BytesIO(decoded_img).getvalue()
    
    # For Multi-class classification:
    # Decode and visualize base64 image string for explanations for first input image
    # img_bytes = base64_to_img(predictions[0]["visualizations"])
    
    # For  Multi-label classification:
    # Decode and visualize base64 image string for explanations for first input image against one of the classes
    img_bytes = base64_to_img(predictions[0]["visualizations"][0])
    image = Image.open(BytesIO(img_bytes))
    

    На следующем рисунке описывается визуализация объяснений для примера входного изображения. Снимок экрана: визуализации, созданные XAI для AutoML для изображений.

    Декодированные фигуры base64 будут содержать четыре раздела изображения в сетке 2 x 2.

    • Изображение в левом верхнем углу (0, 0) — это обрезанное входное изображение
    • Изображение в правом верхнем углу (0, 1) — это тепловая карта атрибуции на цветовой шкале bgyw (синий зеленый желтый белый), где вклад белых пикселей в прогнозируемом классе является самым высоким, а синий — самым низким.
    • Изображение в левом нижнем углу (1, 0) смешанная тепловая карта атрибуции на обрезаном входном изображении
    • Изображение в правом нижнем углу (1, 1) — это обрезанное входное изображение с верхними 30 процентами пикселей на основе оценок атрибуции.

    Интерпретация атрибутов

    Развернутая конечная точка возвращает атрибуты, если для обоих model_explainability и attributions задано значение True. Дополнительные сведения см. в записных книжках с многоклассовой классификацией и классификацией с несколькими метками.

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

    Используйте точные valid_resize_size значения и valid_crop_size выбранной модели для создания объяснений (значения по умолчанию — 256 и 224 соответственно). Следующий код использует функцию визуализации Captum для создания пользовательских визуализаций. Пользователи могут использовать любую другую библиотеку для создания визуализаций. Дополнительные сведения см. в статье Служебные программы визуализации captum.

    import colorcet as cc
    import numpy as np
    from captum.attr import visualization as viz
    from PIL import Image
    from torchvision import transforms
    
    def get_common_valid_transforms(resize_to=256, crop_size=224):
    
        return transforms.Compose([
            transforms.Resize(resize_to),
            transforms.CenterCrop(crop_size)
        ])
    
    # Load the image
    valid_resize_size = 256
    valid_crop_size = 224
    sample_image = "./test_image.jpg"
    image = Image.open(sample_image)
    # Perform common validation transforms to get the image used to generate attributions
    common_transforms = get_common_valid_transforms(resize_to=valid_resize_size,
                                                    crop_size=valid_crop_size)
    input_tensor = common_transforms(image)
    
    # Convert output attributions to numpy array
    
    # For Multi-class classification:
    # Selecting attribution matrix for first input image
    # attributions = np.array(predictions[0]["attributions"])
    
    # For  Multi-label classification:
    # Selecting first attribution matrix against one of the classes for first input image
    attributions = np.array(predictions[0]["attributions"][0])
    
    # visualize results
    viz.visualize_image_attr_multiple(np.transpose(attributions, (1, 2, 0)),
                                      np.array(input_tensor),
                                      ["original_image", "blended_heat_map"],
                                      ["all", "absolute_value"],
                                      show_colorbar=True,
                                      cmap=cc.cm.bgyw,
                                      titles=["original_image", "heatmap"],
                                      fig_size=(12, 12))
    

    Большие наборы данных

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

    Важно!

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

    Обучение с использованием нескольких GPU и нескольких узлов

    По умолчанию каждая модель обучается на одной виртуальной машине. Если обучение модели занимает слишком много времени, может помочь использование виртуальных машин, содержащих несколько GPU. Время обучения модели на больших наборах данных должно уменьшиться примерно в линейной пропорции к количеству используемых GPU. (Например, модель должна обучаться примерно в два раза быстрее на виртуальной машине с двумя GPU, чем на виртуальной машине с одним GPU.) Если время обучения модели на виртуальной машине с несколькими GPU по-прежнему велико, можно увеличить количество виртуальных машин, используемых для обучения каждой модели. Как и при обучении с использованием нескольких GPU, время обучения модели на основе больших наборов данных также должно уменьшиться примерно в линейной пропорции к количеству используемых виртуальных машин. При обучении модели на нескольких виртуальных машинах для достижения наилучших результатов используйте номер SKU вычислений, поддерживающий InfiniBand . Вы можете настроить количество виртуальных машин, используемых для обучения одной модели, задав node_count_per_trial свойство задания AutoML.

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

    properties:
      node_count_per_trial: "2"
    

    Потоковая передача файлов изображений из хранилища

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

    Примечание

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

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

    training_parameters:
      advanced_settings: >
        {"stream_image_files": true}
    

    Примеры записных книжек

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

    Примеры кода

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