Kurz: Trénování modelu rozpoznávání objektů pomocí AutoML a Pythonu

PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)Azure-ai-ml v2 sady Python SDK (aktuální)

V tomto kurzu se naučíte vytrénovat model rozpoznávání objektů pomocí automatizovaného strojového učení Azure Machine Learning s rozšířením Azure Machine Learning CLI v2 nebo sadou Azure Machine Learning Python SDK v2. Tento model rozpoznávání objektů určuje, jestli obrázek obsahuje objekty, jako je plechovka, krabice, láhev od mléka nebo láhev s vodou.

Automatizované strojové učení přijímá trénovací data a nastavení konfigurace a automaticky iteruje prostřednictvím kombinací různých metod normalizace a standardizace funkcí, modelů a nastavení hyperparametrů, aby se dostal k nejlepšímu modelu.

V tomto kurzu napíšete kód pomocí sady Python SDK a naučíte se následující úlohy:

  • Stažení a transformace dat
  • Trénování modelu detekce objektů automatizovaného strojového učení
  • Zadání hodnot hyperparametrů pro model
  • Provedení úklidu hyperparametrů
  • Nasazení modelu
  • Vizualizace detekcí

Požadavky

Nastavení cílového výpočetního objektu

Poznámka

Pokud chcete vyzkoušet bezserverové výpočetní prostředky (Preview), přeskočte tento krok a pokračujte nastavením experimentu.

Nejprve musíte nastavit cílový výpočetní objekt, který se použije pro trénování automatizovaného modelu ML. Modely automatizovaného strojového učení pro úlohy s obrázky vyžadují skladové položky GPU.

Tento kurz používá řadu NCsv3 (s grafickými procesory V100), protože tento typ cílového výpočetního objektu používá k urychlení trénování více GPU. Kromě toho můžete nastavit více uzlů tak, aby využívaly výhod paralelismu při ladění hyperparametrů pro váš model.

Následující kód vytvoří výpočetní výkon GPU o velikosti Standard_NC24s_v3 se čtyřmi uzly.

PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)

Vytvořte soubor .yml s následující konfigurací.

$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

Výpočetní prostředky vytvoříte spuštěním následujícího příkazu rozhraní příkazového řádku v2 s cestou k souboru .yml, názvem pracovního prostoru, skupinou prostředků a ID předplatného.

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

Nastavení experimentu

Experiment můžete použít ke sledování úloh trénování modelu.

PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)

Název experimentu lze zadat pomocí experiment_name klíče následujícím způsobem:

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

Vizualizace vstupních dat

Jakmile budete mít vstupní data obrázku připravená ve formátu JSONL (JSON Lines), můžete pro obrázek vizualizovat rámečky ohraničující základní pravdu. Pokud to chcete udělat, ujistěte se, že máte nainstalovanou matplotlib aplikaci.

%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))

Pomocí výše uvedených pomocných funkcí můžete pro libovolný obrázek spustit následující kód, který zobrazí ohraničující rámečky.

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

plot_ground_truth_boxes_jsonl(image_file, jsonl_file)

Nahrání dat a vytvoření tabulky MLTable

Pokud chcete data použít pro trénování, nahrajte data do výchozího úložiště objektů blob vašeho pracovního prostoru Azure Machine Learning a zaregistrujte je jako prostředek. Mezi výhody registrace dat patří:

  • Snadné sdílení s ostatními členy týmu
  • Správa verzí metadat (umístění, popis atd.)
  • Sledování rodokmenu

PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)

Vytvořte soubor .yml s následující konfigurací.

$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

Pokud chcete nahrát obrázky jako datový asset, spusťte následující příkaz cli verze 2 s cestou k souboru .yml, názvu pracovního prostoru, skupině prostředků a ID předplatného.

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

Dalším krokem je vytvoření MLTable z dat ve formátu JSONL, jak je znázorněno níže. MLtable zabalí vaše data do spotřebního objektu pro trénování.

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

PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)

Následující konfigurace vytvoří trénovací a ověřovací data z tabulky MLTable.

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

Konfigurace experimentu detekce objektů

Pokud chcete nakonfigurovat automatizované úlohy ML pro úlohy související s imagemi, vytvořte úlohu AutoML specifickou pro úlohu.

PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)

Pokud chcete používat bezserverové výpočetní prostředky (Preview), nahraďte řádek compute: azureml:gpu-cluster tímto kódem:

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

Automatické zametání hyperparametrů pro úlohy bitové kopie (automatický režim)

Důležité

Tato funkce je v současné době ve verzi Public Preview. Tato verze Preview se poskytuje bez smlouvy o úrovni služeb. Některé funkce se nemusí podporovat nebo mohou mít omezené možnosti. Další informace najdete v dodatečných podmínkách použití pro verze Preview v Microsoft Azure.

V úloze AutoML můžete provést automatické úklid hyperparametrů, abyste našli optimální model (tuto funkci nazýváme Automatický režim). Zadáte pouze počet pokusů; prostor pro vyhledávání hyperparametrů, metodu vzorkování a zásady předčasného ukončení nejsou potřeba. Systém automaticky určí oblast prostoru hyperparametrů, který se má uklidit, na základě počtu pokusů. Hodnota mezi 10 a 20 bude pravděpodobně dobře fungovat u mnoha datových sad.

PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)

limits:
  max_trials: 10
  max_concurrent_trials: 2

Pak můžete odeslat úlohu pro trénování image modelu.

PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)

Pokud chcete odeslat úlohu automatizovaného strojového učení, spusťte následující příkaz rozhraní příkazového řádku v2 s cestou k souboru .yml, názvem pracovního prostoru, skupinou prostředků a ID předplatného.

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]

Ruční úklid hyperparametrů pro úlohy obrázků

V úloze Automatizovaného strojového učení můžete určit architektury modelu pomocí model_name parametru a nakonfigurovat nastavení tak, aby provádělo úklid hyperparametrů v definovaném vyhledávacím prostoru, aby se našel optimální model.

V tomto příkladu vytrénujeme model rozpoznávání objektů pomocí yolov5 a fasterrcnn_resnet50_fpn. Oba jsou předem vytrénované na COCO, což je rozsáhlá datová sada detekce objektů, segmentace a titulkování, která obsahuje více než tisíce označených obrázků s více než 80 kategoriemi popisků.

Optimální model můžete najít provedením úklidu hyperparametrů v definovaném vyhledávacím prostoru.

Limity úloh

Prostředky vynaložené na trénovací timeout_minutesúlohu image Automatizovaného strojového učení můžete řídit tak, že pro úlohu v nastavení limitu max_concurrent_trials zadáte , max_trials a . Projděte si podrobný popis parametrů limitů úloh.

PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)

limits:
  timeout_minutes: 60
  max_trials: 10
  max_concurrent_trials: 2

Následující kód definuje prostor vyhledávání v rámci přípravy na úklid hyperparametrů pro každou definovanou architekturu yolov5 a fasterrcnn_resnet50_fpn. Ve vyhledávacím prostoru zadejte rozsah hodnot , learning_rateoptimizer, lr_scheduleratd., ze které má autoML vybírat při pokusu o vygenerování modelu s optimální primární metrikou. Pokud nejsou zadané hodnoty hyperparametrů, použijí se pro každou architekturu výchozí hodnoty.

Pro nastavení ladění použijte náhodné vzorkování a vyberte vzorky z tohoto prostoru parametrů pomocí random sampling_algorithm. Výše nakonfigurované limity úloh říkají automatizovanému strojovému učení, že má s těmito různými ukázkami vyzkoušet celkem 10 zkušebních verzí, přičemž se na našem cílovém výpočetním objektu, který byl nastavený pomocí čtyř uzlů, spouští najednou dvě zkušební verze. Čím více parametrů vyhledávací prostor má, tím více pokusů potřebujete k nalezení optimálních modelů.

Používají se také zásady předčasného ukončení bandit. Tato zásada ukončuje pokusy s nízkým výkonem. to znamená, že pokusy, které nejsou v rozmezí 20 % zkušební verze s nejlepším výkonem, což výrazně šetří výpočetní prostředky.

PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)

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 definování nastavení vyhledávacího prostoru a úklidu pak můžete odeslat úlohu pro trénování obrázkového modelu pomocí trénovací datové sady.

PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)

Pokud chcete odeslat úlohu automatizovaného strojového učení, spusťte následující příkaz rozhraní příkazového řádku v2 s cestou k souboru .yml, názvem pracovního prostoru, skupinou prostředků a ID předplatného.

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]

Při úklidu hyperparametrů může být užitečné vizualizovat různé pokusy, které jste vyzkoušeli pomocí uživatelského rozhraní HyperDrive. Do tohoto uživatelského rozhraní můžete přejít tak, že přejdete na kartu Podřízené úlohy v uživatelském rozhraní hlavního automl_image_job výše, což je nadřazená úloha HyperDrivu. Pak můžete přejít na tuto kartu Podřízené úlohy.

Případně můžete níže přímo zobrazit nadřazenou úlohu HyperDrivu a přejít na její kartu Podřízené úlohy:

PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)

CLI example not available, please use Python SDK.

Registrace a nasazení modelu

Po dokončení úlohy můžete zaregistrovat model vytvořený z nejlepší zkušební verze (konfigurace, která vedla k nejlepší primární metrikě). Model můžete zaregistrovat buď po stažení, nebo zadáním azureml cesty pomocí odpovídajícího jobidsouboru .

Získání nejlepší zkušební verze

PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)

CLI example not available, please use Python SDK.

Registrace modelu

Zaregistrujte model pomocí azureml cesty nebo místně stažené cesty.

PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)

 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 registraci modelu, který chcete použít, ho můžete nasadit pomocí spravovaného online koncového bodu deploy-managed-online-endpoint.

Konfigurace online koncového bodu

PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)

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

Vytvoření koncového bodu

Pomocí dříve vytvořeného koncového MLClient bodu teď vytvoříme koncový bod v pracovním prostoru. Tento příkaz spustí vytváření koncového bodu a vrátí potvrzovací odpověď, zatímco vytváření koncového bodu pokračuje.

PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)

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

Můžeme také vytvořit dávkový koncový bod pro dávkové odvozování velkých objemů dat v průběhu časového období. Podívejte se na poznámkový blok dávkového vyhodnocování detekce objektů pro dávkové odvozování pomocí dávkového koncového bodu.

Konfigurace online nasazení

Nasazení je sada prostředků vyžadovaná pro hostování modelu, který provádí skutečné odvozování. Pomocí třídy vytvoříme nasazení pro náš koncový bod ManagedOnlineDeployment . Pro cluster nasazení můžete použít skladové položky virtuálních počítačů gpu nebo procesoru.

PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)

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 

Vytvoření nasazení

Pomocí dříve vytvořeného MLClient nasazení vytvoříme v pracovním prostoru. Tento příkaz spustí vytváření nasazení a vrátí potvrzovací odpověď, zatímco vytváření nasazení pokračuje.

PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)

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

Aktualizace provozu:

Ve výchozím nastavení je aktuální nasazení nastaveno tak, aby přijímalo 0 % provozu. můžete nastavit procento provozu, které má aktuální nasazení přijímat. Součet procent provozu všech nasazení s jedním koncovým bodem by neměl překročit 100 %.

PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)

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]

Otestování nasazení

PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)

CLI example not available, please use Python SDK.

Vizualizace detekcí

Teď, když jste získali skóre testovacího obrázku, můžete vizualizovat ohraničující rámečky pro tento obrázek. Pokud to chcete udělat, ujistěte se, že máte nainstalovaný knihovnu matplotlib.

PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)

CLI example not available, please use Python SDK.

Vyčištění prostředků

Tuto část nedokončíte, pokud plánujete spustit další kurzy služby Azure Machine Learning.

Pokud vytvořené prostředky neplánujete používat, odstraňte je, aby se vám neúčtovaly žádné poplatky.

  1. Úplně nalevo na webu Azure Portal vyberte Skupiny prostředků.
  2. V seznamu vyberte skupinu prostředků, kterou jste vytvořili.
  3. Vyberte Odstranit skupinu prostředků.
  4. Zadejte název skupiny prostředků. Vyberte Odstranit.

Můžete také zachovat skupinu prostředků, ale odstranit jeden pracovní prostor. Zobrazte vlastnosti pracovního prostoru a vyberte Odstranit.

Další kroky

V tomto kurzu automatizovaného strojového učení jste provedli následující úlohy:

  • Nakonfigurovali jste pracovní prostor a připravili data pro experiment.
  • Trénování modelu automatizovaného rozpoznávání objektů
  • Zadané hodnoty hyperparametrů pro váš model
  • Provedli jsme úklid hyperparametrů.
  • Nasazený model
  • Vizualizované detekce

Poznámka

Použití datové sady objektů chladničky je k dispozici prostřednictvím licence v rámci licence MIT License.