Samouczek: trenowanie modelu wykrywania obiektów za pomocą rozwiązania AutoML i języka Python

DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)Zestaw PYTHON SDK azure-ai-ml w wersji 2 (bieżąca)

Z tego samouczka dowiesz się, jak wytrenować model wykrywania obiektów przy użyciu zautomatyzowanego uczenia maszynowego usługi Azure Machine Learning za pomocą rozszerzenia interfejsu wiersza polecenia usługi Azure Machine Learning w wersji 2 lub zestawu SDK języka Python usługi Azure Machine Learning w wersji 2. Ten model wykrywania obiektów określa, czy obraz zawiera obiekty, takie jak kan, karton, butelka mleka czy butelka wody.

Zautomatyzowane uczenie maszynowe akceptuje dane treningowe i ustawienia konfiguracji i automatycznie iteruje za pomocą kombinacji różnych metod normalizacji/standaryzacji funkcji, modeli i ustawień hiperparametrów, aby uzyskać najlepszy model.

W tym samouczku napiszesz kod przy użyciu zestawu SDK języka Python i poznasz następujące zadania:

  • Pobieranie i przekształcanie danych
  • Trenowanie modelu wykrywania obiektów zautomatyzowanego uczenia maszynowego
  • Określanie wartości hiperparametrów dla modelu
  • Wykonywanie zamiatania hiperparametrów
  • Wdrażanie modelu
  • Wizualizowanie wykrywania

Wymagania wstępne

DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)

Ten samouczek jest również dostępny w repozytorium azureml-examples w witrynie GitHub. Jeśli chcesz uruchomić go we własnym środowisku lokalnym, skonfiguruj go, korzystając z poniższych instrukcji

Konfiguracja docelowego obiektu obliczeniowego

Najpierw należy skonfigurować docelowy obiekt obliczeniowy do użycia na potrzeby zautomatyzowanego trenowania modelu uczenia maszynowego. Zautomatyzowane modele uczenia maszynowego dla zadań obrazu wymagają jednostek SKU procesora GPU.

W tym samouczku użyto serii NCsv3 (z procesorami GPU V100), ponieważ ten typ docelowego obiektu obliczeniowego korzysta z wielu procesorów GPU w celu przyspieszenia trenowania. Ponadto można skonfigurować wiele węzłów, aby korzystać z równoległości podczas dostrajania hiperparametrów dla modelu.

Poniższy kod tworzy obliczenia procesora GPU o rozmiarze Standard_NC24s_v3 z czterema węzłami.

DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)

Utwórz plik yml z następującą konfiguracją.

$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

Aby utworzyć środowisko obliczeniowe, uruchom następujące polecenie interfejsu wiersza polecenia w wersji 2 ze ścieżką do pliku yml, nazwy obszaru roboczego, grupy zasobów i identyfikatora subskrypcji.

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

Utworzone zasoby obliczeniowe można podać przy użyciu compute klucza w automl pliku yaml konfiguracji zadania:

compute: azureml:gpu-cluster

Konfiguracja eksperymentu

Możesz użyć eksperymentu do śledzenia zadań trenowania modelu.

DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)

Nazwę eksperymentu można podać przy użyciu experiment_name klucza w następujący sposób:

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

Wizualizowanie danych wejściowych

Po przygotowaniu danych obrazu wejściowego w formacie JSONL (JSON Lines) można zwizualizować pola ograniczenia prawdy podstawowej dla obrazu. W tym celu upewnij się, że zainstalowano 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))

Za pomocą powyższych funkcji pomocnika dla dowolnego obrazu można uruchomić następujący kod, aby wyświetlić pola ograniczenia.

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

plot_ground_truth_boxes_jsonl(image_file, jsonl_file)

Przekazywanie danych i tworzenie tabeli MLTable

Aby użyć danych do trenowania, przekaż dane do domyślnej usługi Blob Storage obszaru roboczego usługi Azure Machine Learning i zarejestruj je jako zasób. Korzyści wynikające z rejestrowania danych to:

  • Łatwe udostępnianie innym członkom zespołu
  • Przechowywanie wersji metadanych (lokalizacja, opis itp.)
  • Śledzenie pochodzenia danych

DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)

Utwórz plik yml z następującą konfiguracją.

$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

Aby przekazać obrazy jako zasób danych, uruchom następujące polecenie interfejsu wiersza polecenia w wersji 2 ze ścieżką do pliku yml, nazwy obszaru roboczego, grupy zasobów i identyfikatora subskrypcji.

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

Następnym krokiem jest utworzenie MLTable danych w formacie jsonl, jak pokazano poniżej. Narzędzie MLtable pakuje dane do obiektu eksploatacyjnego na potrzeby trenowania.

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

DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)

Poniższa konfiguracja tworzy dane trenowania i walidacji z tabeli MLTable.

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

Konfigurowanie eksperymentu wykrywania obiektów

Aby skonfigurować zadania zautomatyzowanego uczenia maszynowego dla zadań związanych z obrazem, utwórz zadanie specyficzne dla rozwiązania AutoML.

DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)

task: image_object_detection
primary_metric: mean_average_precision

Automatyczne zamiatanie hiperparametrów dla zadań obrazu (AutoMode)

Ważne

Ta funkcja jest obecnie w publicznej wersji zapoznawczej. Ta wersja zapoznawcza jest udostępniana bez umowy dotyczącej poziomu usług. Niektóre funkcje mogą być nieobsługiwane lub ograniczone. Aby uzyskać więcej informacji, zobacz Uzupełniające warunki korzystania z wersji zapoznawczych platformy Microsoft Azure.

W zadaniu rozwiązania AutoML można wykonać automatyczne zamiatanie hiperparametrów w celu znalezienia optymalnego modelu (nazywamy to funkcją AutoMode). Określasz tylko liczbę prób; Nie są potrzebne zasady hiperparametru wyszukiwania, metody próbkowania i wczesnego kończenia. System automatycznie określi region przestrzeni hiperparametrów, aby zamiatać na podstawie liczby prób. Wartość z zakresu od 10 do 20 prawdopodobnie będzie działać dobrze w przypadku wielu zestawów danych.

DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)

limits:
  max_trials: 10
  max_concurrent_trials: 2

Następnie możesz przesłać zadanie w celu wytrenowania modelu obrazu.

DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)

Aby przesłać zadanie rozwiązania AutoML, uruchom następujące polecenie interfejsu wiersza polecenia w wersji 2 ze ścieżką do pliku yml, nazwy obszaru roboczego, grupy zasobów i identyfikatora subskrypcji.

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]

Ręczne zamiatanie hiperparametrów dla zadań obrazu

W zadaniu zautomatyzowanego uczenia maszynowego można określić architektury modelu przy użyciu model_name parametru i skonfigurować ustawienia w celu przeprowadzenia zamiatania hiperparametrów przez zdefiniowaną przestrzeń wyszukiwania w celu znalezienia optymalnego modelu.

W tym przykładzie wytrenujemy model wykrywania obiektów za pomocą yolov5 elementów i fasterrcnn_resnet50_fpn, z których oba są wstępnie wytrenowane na platformie COCO, czyli zestaw danych wykrywania obiektów na dużą skalę, segmentacji i podpisów, który zawiera ponad tysiące oznaczonych obrazów z ponad 80 kategoriami etykiet.

Aby znaleźć optymalny model, można wykonać zamiatanie hiperparametrów na zdefiniowanym obszarze wyszukiwania.

Limity zadań

Zasoby wydane w zadaniu trenowania obrazów automatycznego uczenia maszynowego można kontrolować, określając timeout_minutesparametr i max_trials dla max_concurrent_trials zadania w ustawieniach limitu. Zapoznaj się ze szczegółowym opisem parametrów limitów zadań.

DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)

limits:
  timeout_minutes: 60
  max_trials: 10
  max_concurrent_trials: 2

Poniższy kod definiuje przestrzeń wyszukiwania w ramach przygotowań do zamiatania hiperparametrów dla każdej zdefiniowanej architektury yolov5 i fasterrcnn_resnet50_fpn. W obszarze wyszukiwania określ zakres wartości dla learning_rate, optimizer, lr_scheduleritp., aby rozwiązanie AutoML wybierało, próbując wygenerować model z optymalną metryką podstawową. Jeśli nie określono wartości hiperparametrów, wartości domyślne są używane dla każdej architektury.

W przypadku ustawień dostrajania użyj losowego próbkowania, aby wybrać próbki z tej przestrzeni parametrów przy użyciu random sampling_algorithm. Powyższe limity zadań informują zautomatyzowane uczenie maszynowe o wypróbowaniu w sumie 10 prób z tymi różnymi próbkami, uruchamiając jednocześnie dwie próby na naszym docelowym obiekcie obliczeniowym, który został skonfigurowany przy użyciu czterech węzłów. Tym więcej parametrów zawiera przestrzeń wyszukiwania, tym więcej prób jest potrzebnych do znalezienia optymalnych modeli.

Są również używane zasady wczesnego kończenia działania bandyty. Ta zasada kończy próby o niskiej wydajności; oznacza to, że te wersje próbne, które nie mieszczą się w 20% okresie próbnym, co znacznie oszczędza zasoby obliczeniowe.

DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)

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]

Po zdefiniowaniu ustawień obszaru wyszukiwania i czyszczenia można przesłać zadanie w celu wytrenowania modelu obrazu przy użyciu zestawu danych trenowania.

DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)

Aby przesłać zadanie rozwiązania AutoML, uruchom następujące polecenie interfejsu wiersza polecenia w wersji 2 ze ścieżką do pliku yml, nazwy obszaru roboczego, grupy zasobów i identyfikatora subskrypcji.

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]

Podczas wykonywania zamiatania hiperparametrów może być przydatne wizualizowanie różnych prób, które próbowano użyć interfejsu użytkownika funkcji HyperDrive. Możesz przejść do tego interfejsu użytkownika, przechodząc do karty "Zadania podrzędne" w interfejsie użytkownika głównego automl_image_job z powyższego, co jest zadaniem nadrzędnym funkcji HyperDrive. Następnie możesz przejść do karty "Zadania podrzędne" tego zadania.

Możesz też zobaczyć bezpośrednio zadanie nadrzędne funkcji HyperDrive i przejść do karty "Zadania podrzędne":

DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)

CLI example not available, please use Python SDK.

Rejestrowanie i wdrażanie modelu

Po zakończeniu zadania można zarejestrować model utworzony na podstawie najlepszej wersji próbnej (konfiguracja, która spowodowała najlepszą metryki podstawowej). Model można zarejestrować po pobraniu lub określając ścieżkę azureml przy użyciu odpowiedniego identyfikatora jobid.

Uzyskaj najlepszą wersję próbną

DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)

CLI example not available, please use Python SDK.

Rejestrowanie modelu

Zarejestruj model przy użyciu ścieżki azureml lub ścieżki pobranej lokalnie.

DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)

 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]

Po zarejestrowaniu modelu, którego chcesz użyć, możesz wdrożyć go przy użyciu zarządzanego punktu końcowego online deploy-managed-online-endpoint

Konfigurowanie punktu końcowego online

DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)

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

Tworzenie punktu końcowego

Przy użyciu utworzonego MLClient wcześniej punktu końcowego utworzymy punkt końcowy w obszarze roboczym. To polecenie spowoduje uruchomienie tworzenia punktu końcowego i zwrócenie odpowiedzi potwierdzenia, gdy tworzenie punktu końcowego będzie kontynuowane.

DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)

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

Możemy również utworzyć punkt końcowy wsadowy na potrzeby wnioskowania wsadowego na dużych ilościach danych w danym okresie. Zapoznaj się z notesem oceniania wsadowego wykrywania obiektów na potrzeby wnioskowania wsadowego przy użyciu punktu końcowego wsadowego.

Konfigurowanie wdrożenia online

Wdrożenie to zestaw zasobów wymaganych do hostowania modelu, który wykonuje rzeczywiste wnioskowanie. Utworzymy wdrożenie dla naszego punktu końcowego ManagedOnlineDeployment przy użyciu klasy . Dla klastra wdrażania można użyć jednostek SKU procesora GPU lub maszyny wirtualnej procesora CPU.

DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)

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 

Tworzenie wdrożenia

Przy użyciu utworzonego MLClient wcześniej wdrożenia utworzymy teraz w obszarze roboczym. To polecenie spowoduje uruchomienie tworzenia wdrożenia i zwrócenie odpowiedzi potwierdzenia podczas tworzenia wdrożenia.

DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)

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

Aktualizuj ruch:

Domyślnie bieżące wdrożenie jest ustawione na odbieranie 0% ruchu. Można ustawić procent ruchu bieżącego wdrożenia powinny być odbierane. Suma wartości procentowych ruchu we wszystkich wdrożeniach z jednym punktem końcowym nie powinna przekraczać 100%.

DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)

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]

Testowanie wdrożenia

DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)

CLI example not available, please use Python SDK.

Wizualizowanie wykrywania

Po badaniu obrazu testowego możesz zwizualizować pola ograniczenia dla tego obrazu. W tym celu upewnij się, że masz zainstalowaną bibliotekę matplotlib.

DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)

CLI example not available, please use Python SDK.

Czyszczenie zasobów

Nie należy wykonywać tej sekcji, jeśli planujesz uruchamianie innych samouczków usługi Azure Machine Learning.

Jeśli nie planujesz korzystać z utworzonych zasobów, usuń je, aby nie ponosić żadnych opłat.

  1. W witrynie Azure Portal na końcu z lewej strony wybierz pozycję Grupy zasobów.
  2. Wybierz utworzoną grupę zasobów z listy.
  3. Wybierz pozycję Usuń grupę zasobów.
  4. Wpisz nazwę grupy zasobów. Następnie wybierz pozycję Usuń.

Możesz też zachować grupę zasobów i usunąć jeden obszar roboczy. Wyświetl właściwości obszaru roboczego i wybierz pozycję Usuń.

Następne kroki

W tym samouczku zautomatyzowanego uczenia maszynowego wykonano następujące czynności:

  • Skonfigurowano obszar roboczy i przygotowano dane do eksperymentu.
  • Trenowanie modelu automatycznego wykrywania obiektów
  • Określone wartości hiperparametrów dla modelu
  • Wykonano zamiatanie hiperparametrów
  • Wdrożono model
  • Zwizualizowane wykrycia

Uwaga

Korzystanie z zestawu danych obiektów lodówki jest dostępne za pośrednictwem licencji na licencję MIT.