Руководство по обучению модели обнаружения объектов с помощью 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.9 или 3.10.
Скачайте и распакуйте файл данных *odFridgeObjects.zip. Набор данных объявляется в формате Pascal VOC, в котором каждое изображение соответствует XML-файлу. Каждый XML-файл содержит сведения о том, где находится соответствующий файл изображения, а также содержит сведения об ограничивающих прямоугольниках и метках объектов. Чтобы использовать эти данные, сначала необходимо преобразовать их в требуемый формат JSONL, как показано в разделе Преобразование скачанных данных в JSONL записной книжки.
Используйте вычислительный экземпляр для выполнения этого руководства без дополнительной установки. (Узнайте, как создать вычислительный экземпляр.) Или установите cli/SDK для использования собственной локальной среды.
ОБЛАСТЬ ПРИМЕНЕНИЯ: расширение машинного обучения Azure CLI версии 2 (текущее)
Этот же учебник доступен в репозитории azureml-examples на сайте GitHub. Если вы хотите запустить его в собственной локальной среде:
- Установите и настройте интерфейс командной строки (версии 2), а также установите для него расширение
ml
.
- Установите и настройте интерфейс командной строки (версии 2), а также установите для него расширение
Настройка целевых объектов вычисления
Примечание.
Чтобы попробовать бессерверные вычисления (предварительная версия), пропустите этот шаг и перейдите к настройке эксперимента.
Сначала необходимо настроить целевой объект вычислений, который будет использоваться для обучения модели автоматизированного машинного обучения. Для моделей автоматизированного машинного обучения требуются номера 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_minutes
max_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 учебники, не выполните этот раздел.
Если вы не планируете использовать созданные ресурсы, удалите их, чтобы с вас не взималась плата.
- На портале Azure выберите Группы ресурсов в левой части окна.
- В списке выберите созданную группу ресурсов.
- Выберите команду Удалить группу ресурсов.
- Введите имя группы ресурсов. Затем выберите Удалить.
Вы также можете сохранить группу ресурсов, но удалить одну рабочую область. Отобразите свойства рабочей области и нажмите кнопку Удалить.
Следующие шаги
Изучив это руководство об автоматическом машинном обучении, вы выполнили следующие задачи.
- Настройка рабочей области и подготовка данных для эксперимента.
- Обучение модели автоматизированного обнаружения объектов.
- Определение значения гиперпараметров для модели.
- Очистка гиперпараметров.
- Развертывание модели.
- Визуализация обнаружений.
Узнайте больше о компьютерном зрения в автоматизированном машинном обучении.
Узнайте, как настроить AutoML для обучения моделей компьютерного зрения с помощью Python.
Узнайте, как настроить добавочное обучение на моделях компьютерного зрения.
Узнайте, какие гиперпараметры доступны для задач компьютерного зрения.
Примеры кода:
ОБЛАСТЬ ПРИМЕНЕНИЯ: расширение машинного обучения Azure CLI версии 2 (текущее)
- Изучите подробные примеры кода и варианты использования в репозитории azureml-examples для примеров автоматизированного машинного обучения. Проверьте папки с префиксом cli-automl-image-, чтобы получить примеры, относящиеся к созданию моделей компьютерного зрения.
Примечание.
Использование набора данных объектов "Холодильник" доступно через лицензирование в рамках лицензии MIT.