Udostępnij za pośrednictwem


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

DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure w wersji 2 (current)Zestaw PYTHON SDK azure-ai-ml v2 (bieżąca)

Z tego samouczka dowiesz się, jak wytrenować model wykrywania obiektów przy użyciu zautomatyzowanego uczenia maszynowego usługi Azure Machine Learning z rozszerzeniem 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 can, karton, butelka mleka lub 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

Konfiguracja docelowego obiektu obliczeniowego

Uwaga

Aby wypróbować bezserwerowe obliczenia (wersja zapoznawcza), pomiń ten krok i przejdź do sekcji Konfiguracja eksperymentu.

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

W tym samouczku użyto serii NCsv3 (z procesorami GPU V100), ponieważ ten typ docelowy obliczeń używa wielu procesorów GPU do 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 interfejsu wiersza polecenia platformy Azure ml 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 interfejsu wiersza polecenia platformy Azure ml 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 podstawy prawdy 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))

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 interfejsu wiersza polecenia platformy Azure ml 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 interfejsu wiersza polecenia platformy Azure ml 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 zadania automatycznego uczenia maszynowego.

DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure ml w wersji 2 (bieżąca)

Aby użyć bezserwerowych obliczeń (wersja zapoznawcza),zastąp wiersz compute: azureml:gpu-cluster następującym 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ń 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 hiperparametrowe miejsce wyszukiwania, metoda próbkowania i zasady wczesnego zakończenia. System automatycznie określi region przestrzeni hiperparametrów w celu zamiatania 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 interfejsu wiersza polecenia platformy Azure ml 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 interfejsu wiersza polecenia platformy Azure ml 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 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 za pomocą yolov5 elementów i fasterrcnn_resnet50_fpn, z których oba są wstępnie wytrenowane na platformie COCO, wykrywanie obiektów na dużą skalę, segmentację i zestaw danych podpisów, który zawiera ponad tysiące oznaczonych obrazów z ponad 80 kategoriami etykiet.

Aby znaleźć optymalny model, można przeprowadzić 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_trials max_concurrent_trials dla zadania w ustawieniach limitu. Zapoznaj się ze szczegółowym opisem parametrów limitów zadań.

DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure ml 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 , learning_rateoptimizer, lr_scheduleritp. dla rozwiązania AutoML do wyboru podczas próby wygenerowania modelu przy użyciu optymalnej podstawowej metryki. 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 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.

Używane są również zasady wczesnego zakończenia działania bandytu. Ta zasada kończy próby o niskiej wydajności; oznacza to, że te wersje próbne, które nie należą do 20% slack najlepszej wydajności próbnej, co znacznie oszczędza zasoby obliczeniowe.

DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure ml 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 interfejsu wiersza polecenia platformy Azure ml 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.

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

Rejestrowanie i wdrażanie modelu

Po zakończeniu zadania można zarejestrować model, który został utworzony w najlepszej wersji próbnej (konfiguracja, która spowodowała najlepszą metryki podstawową). Możesz zarejestrować model po pobraniu lub określając ścieżkę za pomocą odpowiedniego azureml jobidelementu .

Uzyskiwanie najlepszej wersji próbnej

DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure ml 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 interfejsu wiersza polecenia platformy Azure ml 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 interfejsu wiersza polecenia platformy Azure ml 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, gdy tworzenie punktu końcowego będzie kontynuowane.

DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure ml 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 . Możesz użyć jednostek SKU maszyn wirtualnych procesora GPU lub procesora CPU dla klastra wdrażania.

DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure ml 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, gdy tworzenie wdrożenia będzie kontynuowane.

DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure ml 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ć wartość procentową bieżącego wdrożenia ruchu. Suma wartości procentowych ruchu we wszystkich wdrożeniach z jednym punktem końcowym nie powinna przekraczać 100%.

DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure ml 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 interfejsu wiersza polecenia platformy Azure ml w wersji 2 (bieżąca)

CLI example not available, please use Python SDK.

Wizualizowanie wykrywania

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

DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure ml w wersji 2 (bieżąca)

CLI example not available, please use Python SDK.

Czyszczenie zasobów

Nie ukończ 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 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
  • Wykonywanie zamiatania hiperparametrów
  • Wdrożono model
  • Zwizualizowane wykrycia

Uwaga

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