Руководство. Обучение модели обнаружения объектов с помощью AutoML и Python
ПРИМЕНИМО К:Расширение машинного обучения Azure CLI версии 2 (в настоящее время)
Пакет SDK для Python azure-ai-ml версии 2 (текущая версия)
В этом руководстве описано, как обучить модель обнаружения объектов с помощью автоматизированного машинного обучения Azure с расширением CLI Машинного обучения Azure версии 2 или пакетом SDK Python для Машинного обучения Azure версии 2. Эта модель обнаружения объектов определяет, содержит ли изображение объекты, такие как жестяная банка, картонная коробка, бутылка с молоком или бутылка с водой.
В ходе автоматизированного машинного обучения добавляются данные для обучения и настраиваются параметры, а также выполняется автоматическая итерация с использованием комбинаций разных методов нормализации или стандартизации признаков, моделей и настроек гиперпараметров для получения оптимальной модели.
Работая с этим учебником, вы напишите код с помощью пакета SDK для Python и изучите следующие задачи:
- Скачивание и преобразование данных.
- Обучение модели обнаружения объектов автоматизированного машинного обучения.
- Определение значений гиперпараметров для модели.
- Выполнение очистки гиперпараметров.
- Развертывание модели
- Визуализация обнаружений.
Предварительные требования
Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу. Опробуйте бесплатную или платную версию Машинного обучения Azure.
Для этой возможности поддерживается Python 3.6 и 3.7
Выполните инструкции из краткого руководства по началу работы с Машинным обучением Azure, если у вас еще нет рабочей области службы "Машинное обучение Azure".
Скачайте и распакуйте файл данных *odFridgeObjects.zip. Набор данных объявляется в формате Pascal VOC, в котором каждое изображение соответствует XML-файлу. Каждый XML-файл содержит сведения о том, где находится соответствующий файл изображения, а также содержит сведения об ограничивающих прямоугольниках и метках объектов. Чтобы использовать эти данные, сначала необходимо преобразовать их в требуемый формат JSONL, как показано в разделе Преобразование скачанных данных в JSONL записной книжки.
ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение ML для Azure CLI версии 2 (текущая версия)
Этот же учебник доступен в репозитории azureml-examples на сайте GitHub. Если вы предпочитаете выполнять его в собственной локальной среде, настройте ее по приведенным ниже инструкциям.
- Установите и настройте интерфейс командной строки (версии 2), а также установите для него расширение
ml
.
Настройка целевых объектов вычисления
Сначала необходимо настроить целевой объект вычислений, который будет использоваться для обучения модели автоматизированного машинного обучения. Для моделей автоматизированного машинного обучения требуются номера SKU GPU для выполнения задач с изображениями.
В этом учебнике используется серия NCsv3 (с графическими процессорами V100), так как этот тип целевого объекта вычислений использует несколько графических процессоров для ускорения обучения. Кроме того, можно настроить несколько узлов, чтобы воспользоваться преимуществами параллелизма при настройке гиперпараметров модели.
Следующий код создает вычислительный ресурс с 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]
Созданные вычислительные ресурсы можно предоставить с помощью ключа compute
в YAML-файле конфигурации задачи automl
:
compute: azureml:gpu-cluster
Настройка эксперимента
Вы можете использовать эксперимент для отслеживания заданий обучения модели.
ОБЛАСТЬ ПРИМЕНЕНИЯ:расширение Машинного обучения для 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 (текущая версия)
task: image_object_detection
primary_metric: mean_average_precision
Автоматическое очистка гиперпараметров для задач изображения (автомодирование)
Важно!
Эта функция сейчас доступна в виде общедоступной предварительной версии. Эта предварительная версия предоставляется без соглашения об уровне обслуживания. Некоторые функции могут не поддерживаться или их возможности могут быть ограничены. Дополнительные сведения см. в статье Дополнительные условия использования предварительных выпусков 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
В следующем коде определяется пространство поиска при подготовке к очистке гиперпараметров для каждой определенной архитектуры и yolov5
fasterrcnn_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. Вы можете перейти к этому пользовательскому интерфейсу, перейдя на вкладку "Дочерние задания" в пользовательском интерфейсе основного automl_image_job выше, который является родительским заданием HyperDrive. Затем можно перейти на вкладку "Дочерние задания" этой вкладки.
Кроме того, ниже вы можете просмотреть родительское задание HyperDrive и перейти на вкладку "Дочерние задания":
ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение ml для Azure CLI версии 2 (текущая версия)
CLI example not available, please use Python SDK.
регистрация и развертывание модели.
После завершения задания можно зарегистрировать модель, созданную на основе лучшей пробной версии (конфигурации, которая привела к лучшей первичной метрике). Вы можете зарегистрировать модель после скачивания или указать путь к azureml с соответствующим идентификатором задания (jobid).
Получите лучшую пробную версию
ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение 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.
Если вы не планируете использовать созданные ресурсы, удалите их, чтобы с вас не взималась плата.
- На портале Azure выберите Группы ресурсов в левой части окна.
- В списке выберите созданную группу ресурсов.
- Выберите Удалить группу ресурсов.
- Введите имя группы ресурсов. Теперь щелкните Удалить.
Вы также можете сохранить группу ресурсов, но удалить одну рабочую область. Отобразите свойства рабочей области и нажмите кнопку Удалить.
Дальнейшие действия
Изучив это руководство об автоматическом машинном обучении, вы выполнили следующие задачи.
- Настройка рабочей области и подготовка данных для эксперимента.
- Обучение модели автоматизированного обнаружения объектов.
- Определение значения гиперпараметров для модели.
- Очистка гиперпараметров.
- Развертывание модели.
- Визуализация обнаружений.
Узнайте больше о компьютерном зрении в автоматизированном машинном обучении.
Узнайте, как настроить AutoML для обучения моделей компьютерного зрения с помощью Python.
Узнайте, как настроить добавочное обучение на моделях компьютерного зрения.
Узнайте , какие параметры доступны для задач компьютерного зрения.
Примеры кода:
ОБЛАСТЬ ПРИМЕНЕНИЯ:
Расширение ML для Azure CLI версии 2 (текущая версия)
- Изучите подробные примеры кода и варианты использования в репозитории azureml-examples для примеров автоматизированного машинного обучения. В папках с префиксом cli-automl-image- просмотрите примеры, связанные с созданием моделей компьютерного зрения.
Примечание
Использование набора данных объектов "Холодильник" доступно через лицензирование в рамках лицензии MIT.