Sdílet prostřednictvím


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

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

V tomto kurzu se naučíte tré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ů identifikuje, zda obrázek obsahuje objekty, jako je plechovky, krabička, láhev mléka nebo láhev vody.

Automatizované strojové učení přijímá trénovací data a nastavení konfigurace a automaticky iteruje kombinací různých metod normalizace a standardizace funkcí, modelů a nastavení hyperparametrů, aby bylo dosaženo nejlepšího 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 automatizovaného rozpoznávání objektů strojového učení
  • Zadání hodnot hyperparametrů pro váš model
  • Proveď průchod hyperparametrů
  • Nasadit váš model
  • Vizualizace detekcí

Požadavky

  • Pokud chcete používat Azure Machine Learning, potřebujete pracovní prostor. Pokud ho nemáte, dokončete vytváření prostředků, které potřebujete, abyste mohli začít vytvářet pracovní prostor a získat další informace o jeho používání.

    Důležité

    Pokud je váš pracovní prostor Azure Machine Learning nakonfigurovaný se spravovanou virtuální sítí, možná budete muset přidat odchozí pravidla, která povolí přístup k veřejným úložištím balíčků Pythonu. Další informace najdete v tématu Scénář: Přístup k veřejným balíčkům strojového učení.

  • Použijte Python 3.10 nebo novější.

  • Datová odFridgeObjects sada je opatřena poznámkami ve formátu Pascal VOC, kde každý obrázek odpovídá souboru XML. Každý soubor XML obsahuje informace o tom, kde se nachází odpovídající soubor obrázku, a obsahuje také informace o ohraničujících polích a popiscích objektů. Pokud chcete tato data použít, musíte je nejprve převést do požadovaného formátu JSONL, jak je znázorněno v části Převést stažená data do formátu JSONL v souboru automl-image-object-detection-task-fridge-items.ipynb.

  • K dokončení tohoto kurzu bez další instalace použijte výpočetní instanci. (Viz Vytvoření výpočetní instance.) Nebo nainstalujte rozhraní příkazového řádku nebo sadu SDK, abyste mohli používat vlastní místní prostředí.

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

    Tento kurz je také k dispozici v úložišti azureml-examples na GitHubu. Pokud ho chcete spustit v místním prostředí, nainstalujte a nastavte rozhraní příkazového řádku (v2) a ujistěte se, že jste rozšíření nainstalovali ml .

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

Poznámka:

Pokud chcete vyzkoušet bezserverové výpočetní prostředky, přeskočte tento krok a přejděte do nastavení experimentu.

Nejdřív 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 obrazové úlohy vyžadují verze GPU.

V tomto kurzu se používá řada 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ů, abyste při ladění hyperparametrů pro váš model využili paralelismu.

Následující kód vytvoří GPU instanci typu Standard_NC64as_T4_v3 se čtyřmi uzly.

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

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_NC64as_T4_v3
min_instances: 0
max_instances: 4
idle_time_before_scale_down: 120

Pokud chcete vytvořit výpočetní prostředky, spusťte následující příkaz CLI v2 s cestou k souboru .yml, názvu pracovního prostoru, skupině 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í trénovacích úloh modelu.

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

Název experimentu experiment_name můžete zadat pomocí klíče:

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

Vizualizace vstupních dat

Poté, co budete mít vstupní data obrázků připravená ve formátu JSONL (řádky JSON), můžete vizualizovat referenční rámečky ohraničující objekty na obrázku. Pokud to chcete udělat, ujistěte se, že jste nainstalovali 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))

Pomocí předchozích pomocných funkcí můžete pro každý daný 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 k trénování, nahrajte je do výchozího úložiště objektů blob 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í (current)

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ý prostředek, spusťte následující příkaz CLI v2 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í tabulky MLTable z dat ve formátu JSONL, jak je znázorněno v následujícím příkladu. 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í (current)

Následující konfigurace vytváří data pro trénink a validaci z 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 konkrétní úkol.

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

Poznámka:

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

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

Automatické sweepování hyperparametrů pro obrazové úlohy (AutoMode)

V úloze AutoML můžete provést automatické úklidy hyperparametrů, abyste našli optimální model. (Tato funkce se nazývá AutoMode). Určí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ů pro prohledání na základě počtu experimentů. 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í (current)

limits:
  max_trials: 10
  max_concurrent_trials: 2

Poté můžete odeslat úlohu pro trénování obrázkového modelu.

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

Pokud chcete odeslat úlohu AutoML, spusťte následující příkaz CLI v2 s cestou k souboru .yml, názvu pracovního prostoru, skupině 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í ladění hyperparametrů pro úlohy s obrázky

V úloze AutoML můžete určit architektury modelu pomocí parametru model_name a nakonfigurovat nastavení pro provedení úklidu hyperparametrů přes definovaný vyhledávací prostor, abyste našli optimální model.

V tomto příkladu vytrénujete model detekce objektů pomocí FPN YOLOv5 a FasterRCNN ResNet50, z nichž oba jsou předem natrénované v COCO, rozsáhlé detekci objektů, segmentaci a datové sadě titulků, která obsahuje tisíce označených obrázků s více než 80 kategoriemi popisků.

Pokud chcete najít optimální model, můžete provést úklid hyperparametrů nad definovaným vyhledávacím prostorem.

Limity úloh

Prostředky vynaložené na trénovací úlohu image AutoML můžete řídit zadáním parametru timeout_minutes, max_trialsa max_concurrent_trials pro úlohu v nastavení limitu. Další informace najdete v popisu parametrů limitů úloh.

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

limits:
  timeout_minutes: 60
  max_trials: 10
  max_concurrent_trials: 2

Následující kód definuje prostor pro vyhledávání při přípravě na sweep hyperparametrů pro každou definovanou architekturu, YOLOv5 a FasterRCNN ResNet50 FPN. Do vyhledávacího prostoru zadejte rozsah hodnot pro learning_rate, optimizerlr_schedulera tak dále, aby AutoML zvolil při pokusu o vygenerování modelu s optimální primární metrikou. Pokud nejsou zadané hodnoty hyperparametrů, použijí se výchozí hodnoty pro každou architekturu.

Pro nastavení ladění použijte náhodné vzorkování k výběru vzorků z tohoto prostoru parametrů pomocí random algoritmu vzorkování. Limity úloh zadané v předchozím kódu konfigurují automatizované strojové učení tak, aby vyzkoušely celkem 10 zkušebních verzí s těmito různými ukázkami, přičemž na cílovém výpočetním objektu byly spuštěny dvě zkušební verze najednou, což je nastavené pomocí čtyř uzlů. Čím více parametrů má vyhledávací prostor, tím více pokusů potřebujete k nalezení optimálních modelů.

Používá se také politika předčasného ukončení Bandit. Tato zásada ukončí špatně prováděné pokusy. To znamená, že pokusy, které nejsou v rámci 20% tolerance od nejlepšího výkonného pokusu. Toto ukončení výrazně šetří výpočetní prostředky.

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

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]

Jakmile definujete vyhledávací prostor a nastavení hledání, můžete úlohu odeslat pro natrénování modelu pro zpracování obrázků s využitím vaší trénovací datové sady.

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

Pokud chcete odeslat úlohu AutoML, spusťte následující příkaz CLI v2 s cestou k souboru .yml, názvu pracovního prostoru, skupině 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]

Když provedete sweepování hyperparametrů, může být užitečné vizualizovat různé pokusy, které byly zkoušeny, pomocí uživatelského rozhraní Hyperdrive UI. K tomuto uživatelskému rozhraní se dostanete tak, že přejdete na kartu Podřízené úlohy v uživatelském rozhraní hlavní úlohy AutoML image, která se zobrazí dříve, což je nadřazená úloha HyperDrivu. Poté můžete přejít na kartu Podřízené úlohy.

Případně můžete 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í (current)

CLI example not available. Use the the Python SDK.

Registrace a nasazení modelu

Po dokončení úlohy můžete zaregistrovat model vytvořený z nejlepší zkušební verze (konfigurace, která způsobila nejlepší primární metriku). Model můžete zaregistrovat buď po stažení, nebo zadáním azureml cesty s odpovídající jobid.

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

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

CLI example not available. Use the Python SDK.

Registrace modelu

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

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

 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]

Jakmile zaregistrujete model, který chcete použít, můžete ho nasadit pomocí spravovaného online koncového bodu.

Nakonfigurujte online koncový bod

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

$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 MLClient nyní vytvoříte koncový bod v pracovním prostoru. Tento příkaz spustí vytvoření koncového bodu a během vytváření koncového bodu vrátí potvrzovací odpověď.

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

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ůžete také vytvořit dávkový koncový bod pro dávkové odvozování u velkých objemů dat v určitém časovém období. V poznámkovém bloku dávkového skórování pro detekci objektů najdete příklad dávkového odvozování pomocí koncového bodu dávky.

Nakonfigurujte online nasazení

Nasazení je sada prostředků vyžadovaných pro nasazování modelu, který provádí samotný proces inference. Následující kód vytvoří nasazení pro koncový bod. Pro cluster nasazení můžete použít instance virtuálních počítačů typu GPU nebo CPU.

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

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řte nasazení

Pomocí dříve vytvořeného MLClient vytvoříte nasazení v pracovním prostoru. Tento příkaz spustí vytvoření nasazení a během vytváření nasazení vrátí potvrzovací odpověď.

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

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í nastavené na příjem 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í (current)

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í (current)

CLI example not available. Use the Python SDK.

Vizualizace detekcí

Teď, když jste ohodnoceli testovací obrázek, můžete vizualizovat ohraničující rámečky obrázku. K tomu musíte mít nainstalovaný Matplotlib.

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

CLI example not available. Use the Python SDK.

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

Pokud plánujete dokončit další kurzy služby Azure Machine Learning, nedokončíte tuto část.

Pokud nemáte v úmyslu používat vytvořené prostředky, odstraňte je, abyste za ně nemuseli účtovat žádné poplatky.

  1. Na webu Azure Portal vyberte v levém podokně skupiny prostředků .
  2. V seznamu skupin prostředků vyberte skupinu prostředků, kterou jste vytvořili.
  3. Vyberte Odstranit skupinu prostředků.
  4. Zadejte název skupiny prostředků. Poté vyberte Odstranit.

Můžete také zachovat skupinu zdrojů, ale odstranit jeden pracovní prostor. Přejděte na stránku pracovního prostoru a pak vyberte Odstranit.

Další kroky

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

  • Konfigurace pracovního prostoru a připravených dat pro experiment
  • Trénování modelu automatizovaného rozpoznávání objektů
  • Zadané hodnoty hyperparametrů pro váš model
  • Provedli jsme úklid hyperparametrů.
  • Nasadili jste model
  • Vizualizované detekce

Poznámka:

Použití datové sady objektů ledniček je dostupné prostřednictvím licence MIT License.