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 SDK języka Python 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 platformy Azure przy użyciu 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 lub butelka wody.

Zautomatyzowane uczenie maszynowe akceptuje dane treningowe i ustawienia konfiguracji i automatycznie wykonuje iterację za pomocą kombinacji różnych metod normalizacji/standaryzacji cech, 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

Konfiguracja docelowa zasobów obliczeniowych

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

W tym samouczku użyto serii NCsv3 (z procesorami GPU V100), ponieważ ten typ obiektu docelowego obliczeniowego używa 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]

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 wejściowych obrazu w formacie JSONL (JSON Lines) można wizualizować pola granic prawdy podstawowej dla obrazu. Aby to zrobić, 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))

Korzystając z 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żywać danych do trenowania, przekaż dane do domyślnego magazynu obiektów blob 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

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. MLtable spakuj 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 na potrzeby zadań związanych z obrazem, utwórz zadanie specyficzne dla rozwiązania AutoML.

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

Aby użyć bezserwerowego środowiska obliczeniowego (wersja zapoznawcza), zastąp wiersz compute: azureml:gpu-cluster tym kodem:

resources:
 instance_type: Standard_NC24s_v3
 instance_count: 4
task: image_object_detection
primary_metric: mean_average_precision
compute: azureml:gpu-cluster

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

Ważne

Ta funkcja jest obecnie w publicznej wersji zapoznawczej. Ta wersja zapoznawcza jest dostarczana 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żesz wykonać automatyczne zamiatanie hiperparametrów w celu znalezienia optymalnego modelu (nazywamy to funkcją AutoMode). Określasz tylko liczbę prób; nie jest wymagana przestrzeń wyszukiwania hiperparametrów, metoda próbkowania i zasady wczesnego zakoń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 wielu zestawach 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, aby wytrenować model 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 pod kątem zadań obrazów

W zadaniu rozwiązania AutoML można określić architektury modelu przy użyciu model_name parametru i skonfigurować ustawienia w celu przeprowadzenia zamiatania hiperparametrów na zdefiniowanej przestrzeni wyszukiwania w celu znalezienia optymalnego modelu.

W tym przykładzie wytrenujemy model wykrywania obiektów z elementami yolov5 i fasterrcnn_resnet50_fpn, z których oba są wstępnie wytrenowane w środowisku COCO, wykrywania obiektów na dużą skalę, segmentacji i zestawu danych podpisów zawierającego ponad tysiące oznaczonych obrazów z ponad 80 kategoriami etykiet.

Aby znaleźć optymalny model, możesz wykonać zamiatanie hiperparametrów na zdefiniowanej przestrzeni wyszukiwania.

Limity zadań

Zasoby wydane w zadaniu trenowania obrazów automatycznego uczenia maszynowego można kontrolować, określając timeout_minutesparametr i max_trialsmax_concurrent_trials dla 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 przygotowania do zamiatania hiperparametrów dla każdej zdefiniowanej architektury yolov5 i fasterrcnn_resnet50_fpn. W obszarze wyszukiwania określ zakres wartości , learning_rateoptimizer, lr_scheduleritp., aby rozwiązanie AutoML było wybierane w miarę próby wygenerowania modelu z optymalną metryką podstawową. Jeśli wartości hiperparametryczne nie są określone, 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 random przy użyciu sampling_algorithm. Powyższe limity zadań informują zautomatyzowane uczenie maszynowe o wypróbowaniu w sumie 10 prób z tymi różnymi przykładami, uruchamiając jednocześnie dwie próby w ramach celu obliczeniowego, 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.

Stosowane są również zasady wczesnego zakończenia bandyty. Ta zasada kończy testy o niskiej wydajności; oznacza to, że te wersje próbne, które nie należą do 20% czasu pracy w ramach najlepszej wersji próbnej, 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 zamiatania możesz 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 próbnych przy użyciu 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.

Alternatywnie poniżej możesz wyświetlić bezpośrednio zadanie nadrzędne funkcji HyperDrive i przejść do karty "Zadania podrzędne":

Rejestrowanie i wdrażanie modelu

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

Uzyskiwanie najlepszej wersji próbnej

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 azureml ścieżki 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 uruchamia tworzenie punktu końcowego i zwraca odpowiedź potwierdzenia podczas tworzenia punktu końcowego.

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. Tworzymy 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 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 w obszarze roboczym. To polecenie uruchamia tworzenie wdrożenia i zwraca odpowiedź 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]

Aktualizowanie ruchu:

Domyślnie bieżące wdrożenie jest ustawione na odbieranie ruchu 0%. Można ustawić wartość procentową bieżącego wdrożenia ruchu. Suma wartości procentowych ruchu wszystkich wdrożeń 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 zdobyciu wyniku obrazu testowego możesz zwizualizować pola ograniczenia dla tego obrazu. W tym celu upewnij się, że zainstalowano 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 zautomatyzowanego modelu wykrywania obiektów
  • Określone wartości hiperparametrów dla modelu
  • Wykonano zamiatanie hiperparametrów
  • Wdrożono model
  • Wizualizowane wykrycia

Uwaga

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