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 detekce objektů identifikuje, zda obrázek obsahuje objekty, jako je plechovka, krabička, mléko láhev nebo láhev vody.

Automatizované strojové učení přijímá trénovací data a nastavení konfigurace a automaticky iteruje kombinacemi 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

  • Pokud nemáte předplatné Azure, vytvořte si před zahájením bezplatný účet. Vyzkoušejte bezplatnou nebo placenou verzi služby Azure Machine Learning ještě dnes.

  • Pro tuto funkci se podporuje Python 3.6 nebo 3.7.

  • Dokončete rychlý start: Začněte se službou Azure Machine Learning , pokud ještě nemáte pracovní prostor Azure Machine Learning.

  • Stáhněte a rozbalte * datový souborodFridgeObjects.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žít, musíte je nejprve převést na požadovaný formát JSONL, jak je vidět v části Převod stažených dat do oddílu JSONL poznámkového bloku.

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í, nastavte ho podle následujících pokynů.

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

Nejprve musíte nastavit cílový výpočetní objekt, který se použije pro trénování modelu automatizovaného strojového učení. Automatizované modely ML pro úlohy obrázků 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 využívá k urychlení trénování více GPU. Kromě toho můžete nastavit více uzlů tak, aby při ladění hyperparametrů pro váš model využilo výhod 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]

Vytvořený výpočetní objekt je možné poskytnout pomocí compute klíče v automl yaml konfigurace úlohy:

compute: azureml:gpu-cluster

Nastavení experimentu

Pomocí experimentu můžete sledovat trénovací běhy 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 (řádky JSON), můžete vizualizovat rámečky ohraničující pravdu země pro obrázek. Abyste to mohli 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 pro trénování, nahrajte data do výchozího úložiště objektů blob pracovního prostoru Azure ML 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í data do spotřebního objektu pro trénování.

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é strojové učení pro úlohy související s imagemi, vytvořte úlohu specifickou pro AutoML.

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

task: image_object_detection
primary_metric: mean_average_precision

V úloze AutoML můžete zadat algoritmy modelu pomocí model_name parametru a nakonfigurovat nastavení tak, aby prováděla úklid hyperparametrů přes definovaný vyhledávací prostor, abyste našli optimální model.

V tomto příkladu natrénujeme model detekce objektů s yolov5 předem fasterrcnn_resnet50_fpnnatrénovanými objekty COCO, rozsáhlé detekce objektů, segmentace a popisky datové sady, která obsahuje více než tisíce označených obrázků s více než 80 kategoriemi popisků.

Limity úloh

Prostředky vynaložené na trénovací úlohu AutoML Image můžete řídit zadáním hodnoty timeout_minutesa max_trialsmax_concurrent_trials hodnoty pro úlohu v nastavení omezení. PLease odkazuje na 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

Uklidování hyperparametrů pro úlohy obrázků

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

Následující kód definuje hledaný prostor při přípravě pro úklid hyperparametrů pro každý definovaný algoritmus yolov5 a fasterrcnn_resnet50_fpn. Ve vyhledávacím prostoru zadejte rozsah hodnot pro learning_rate, , optimizerlr_scheduleratd., pro AutoML si můžete vybrat, 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ždý algoritmus.

Pro nastavení ladění použijte náhodné vzorkování k výběru vzorků 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ů prostor hledání obsahuje, 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čí konfigurace s nízkým výkonem; to znamená, že konfigurace, které nejsou v rámci 20% slack nejlepší konfigurace, 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 definovaný prostor hledání a nastavení úklidu, můžete odeslat úlohu pro trénování modelu obrázků 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é konfigurace, které se pokusily použít uživatelské rozhraní HyperDrive. K tomuto uživatelskému rozhraní můžete přejít tak, že přejdete na kartu Podřízená spuštění v uživatelském rozhraní hlavního automl_image_run shora, což je nadřazené spuštění HyperDrivu. Pak můžete přejít na kartu Podřízená spuštění této aplikace.

Alternativně níže vidíte přímo nadřazené spuštění HyperDrivu a přejděte na jeho kartu Podřízené spuštění:

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í spuštění můžete zaregistrovat model vytvořený z nejlepšího spuštění (konfigurace, která způsobila nejlepší primární metriku). Model můžete zaregistrovat po stažení nebo zadáním cesty azureml s odpovídajícím ID úlohy.

Získání nejlepšího spuštění

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

CLI example not available, please use Python SDK.

Registrace modelu

Zaregistrujte model buď pomocí cesty azureml, 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 MLClient prostředí teď vytvoříme 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í)

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 odvozování dávek 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 gpu nebo procesoru virtuálního počítače.

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í teď 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 aktuálního nasazení. 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. Abyste to mohli udělat, ujistěte se, že máte nainstalovaný 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ů

Pokud plánujete spustit další kurzy služby Azure Machine Learning, tento oddíl nedokonejte.

Pokud nemáte v plánu používat vytvořené prostředky, odstraňte je, takže vám nebudou účtovány žá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
  • Provedení hyperparametrového úklidu
  • Nasazení modelu
  • Vizualizované detekce

Poznámka

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