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, jestli 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
  • Provedení úklidu hyperparametrů
  • Nasazení modelu
  • Vizualizace detekcí

Požadavky

  • Abyste mohli používat Azure Machine Learning, budete nejprve potřebovat 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í.

  • Pro tuto funkci se podporuje Python 3.6 nebo 3.7.

  • Stáhněte a rozbalte *datový soubor odFridgeObjects.zip. Datová 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ů. Abyste mohli tato data používat, musíte je nejprve převést na požadovaný formát JSONL, jak je vidět v části Převést stažená data do oddílu JSONL poznámkového bloku.

  • Pomocí výpočetní instance můžete postupovat podle tohoto kurzu bez další instalace. (Podívejte se, jak vytvořit výpočetní instanci.) 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í)

    Tento kurz je také k dispozici v úložišti azureml-examples na GitHubu. Pokud ho chcete spustit ve vlastním místním prostředí:

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.

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 úlohy imagí vyžadují skladové položky 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ří výpočetní výkon Standard_NC24s_v3 GPU 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

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

Název experimentu je možné zadat následujícím způsobem experiment_name :

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

Vizualizace vstupních dat

Jakmile máte vstupní data obrázků připravená ve formátu JSONL (řádky JSON), můžete vizualizovat rámečky ohraničující pravdu pro obrázek. 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í výše uvedených pomocných funkcí pro libovolný obrázek můžete 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 data do výchozího úložiště objektů blob pracovního prostoru Služby 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ý 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í 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 specifickou pro AutoML.

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é úklidy hyperparametrů pro úlohy obrázků (AutoMode)

Důležité

Tato funkce je v současné době ve verzi Public Preview. Tato verze Preview je poskytována 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é úklidy hyperparametrů, abyste našli optimální model (tuto funkci nazýváme AutoMode). Určíte pouze počet pokusů; Prostor pro vyhledávání hyperparametrů, metoda 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čtupokusůch 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í modelu image.

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

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í úklid hyperparametrů pro úlohy obrázků

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

V tomto příkladu vytrénujeme model detekce objektů s předem vytrénovaným modelem yolov5 fasterrcnn_resnet50_fpnCOCO, rozsáhlou detekcí objektů, segmentací a popiskem datové sady, která obsahuje více než tisíce obrázků s popisky 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 timeout_minutesmax_trials hodnoty a hodnoty úlohy v nastavení limitumax_concurrent_trials. 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 vyhledávací prostor při přípravě na úklid hyperparametrů pro každou definovanou architekturu yolov5 a fasterrcnn_resnet50_fpn. Do vyhledávacího prostoru zadejte rozsah hodnot pro learning_rate, optimizerlr_scheduler, atd., pro AutoML zvolit, když se pokusí vygenerovat model s optimální primární metrikou. Pokud nejsou zadány hodnoty hyperparametrů, použijí se výchozí hodnoty pro každou architekturu.

Pro nastavení ladění pomocí náhodného vzorkování vyberte vzorky z tohoto prostoru parametrů pomocí random sampling_algorithm. Limity úloh nakonfigurované výše říká automatizovanému strojovému učení, aby vyzkoušelo celkem 10 zkušebních verzí s těmito různými ukázkami a spustilo na našem cílovém výpočetním objektu dvě zkušební verze, které se nastavily 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é zásada předčasného ukončení banditu. Tato zásada ukončí neúspěšné pokusy o provedení; to znamená, že pokusy, které nejsou v rámci 20% časové rezervy nejlepší zkušební verze, 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]

Jakmile je definováno nastavení vyhledávacího prostoru a úklidu, můžete úlohu odeslat k trénování modelu obrázku pomocí trénovací datové sady.

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

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]

Při úklidu hyperparametrů může být užitečné vizualizovat různé zkušební verze, které se pokusily použít uživatelské rozhraní HyperDrivu. K tomuto uživatelskému 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 kartu Podřízené úlohy této úlohy.

Případně níže vidíte přímo nadřazenou úlohu HyperDrivu a přejděte 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á způsobila nejlepší primární metriku). Model můžete zaregistrovat po stažení nebo zadáním azureml cesty s odpovídajícím jobidkódem .

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 buď 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]

Jakmile zaregistrujete model, který chcete použít, můžete ho 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 MLClient koncového bodu teď vytvoříme v pracovním prostoru koncový bod. 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í)

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í u velkých objemů dat v určitém časovém období. Projděte si poznámkový blok dávkového vyhodnocování objektů pro dávkové odvozování pomocí koncového bodu dávky.

Konfigurace online nasazení

Nasazení je sada prostředků vyžadovaných 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čů s gpu nebo procesorem.

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 prostředí vytvoříme 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í)

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é by mělo 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 nainstalovanou 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 nechcete používat prostředky, které jste vytvořili, odstraňte je, takže se vám nebudou účtovat žá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ů. Poté 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í modelu
  • Vizualizované detekce

Poznámka:

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