Oktatóanyag: Objektumészlelési modell betanítása az AutoML és a Python használatával

A KÖVETKEZŐKRE VONATKOZIK:Azure CLI ml extension v2 (aktuális)Python SDK azure-ai-ml v2 (aktuális)

Ebből az oktatóanyagból megtudhatja, hogyan taníthat be objektumészlelési modellt az Azure Machine Learning automatizált gépi tanulással a v2-es Azure Machine Learning CLI-bővítménnyel vagy az Azure Machine Learning Python SDK v2-vel. Ez az objektumészlelési modell azonosítja, hogy a kép tartalmaz-e objektumokat, például dobozt, dobozt, tejes palackot vagy vízpalackot.

Az automatizált gépi tanulás elfogadja a betanítási adatokat és a konfigurációs beállításokat, és automatikusan iterálja a különböző funkció normalizálási/szabványosítási módszerek, modellek és hiperparaméter-beállítások kombinációit a legjobb modell eléréséhez.

Ebben az oktatóanyagban a Python SDK használatával írhat kódot, és a következő feladatokat sajátíthatja el:

  • Adatok letöltése és átalakítása
  • Automatizált gépi tanulási objektumészlelési modell betanítása
  • Hiperparaméter-értékek megadása a modellhez
  • Hiperparaméter-takarítás végrehajtása
  • A modell üzembe helyezése
  • Észlelések vizualizációja

Előfeltételek

  • Az Azure Machine Learning használatához először egy munkaterületre lesz szüksége. Ha nincs ilyenje, végezze el az Erőforrások létrehozása című témakört, amely a munkaterület létrehozásának megkezdéséhez szükséges , és többet is megtudhat a használatáról.

  • A Python 3.6 vagy 3.7 támogatott ehhez a funkcióhoz

  • Töltse le és csomagolja ki a *odFridgeObjects.zip adatfájlt. Az adatkészlet Pascal VOC formátumban van jegyzetelve, ahol minden kép egy XML-fájlnak felel meg. Minden xml-fájl információkat tartalmaz arról, hogy a megfelelő képfájl hol található, valamint információkat tartalmaz a határolókeretekről és az objektumcímkékről. Az adatok használatához először a szükséges JSONL-formátumra kell konvertálnia azokat a jegyzetfüzet Letöltött adatok konvertálása JSONL-be című szakaszában leírtak szerint.

  • Számítási példány használatával további telepítés nélkül követheti ezt az oktatóanyagot. (Tekintse meg, hogyan hozhat létre számítási példányt.) Vagy telepítse a CLI/SDK-t a saját helyi környezetének használatához.

    A KÖVETKEZŐKRE VONATKOZIK:Azure CLI ml extension v2 (aktuális)

    Ez az oktatóanyag a GitHub azureml-examples adattárában is elérhető. Ha saját helyi környezetben szeretné futtatni:

Számítási cél beállítása

Megjegyzés

A kiszolgáló nélküli számítás (előzetes verzió) kipróbálásához hagyja ki ezt a lépést, és folytassa a Kísérlet beállítással.

Először be kell állítania egy számítási célt az automatizált gépi tanulási modell betanításához. A rendszerkép-feladatok automatizált gépi tanulási modelljei GPU-termékváltozatokat igényelnek.

Ez az oktatóanyag az NCsv3 sorozatot használja (V100 GPU-kkal), mivel ez a számítási céltípus több GPU-t használ a betanítás felgyorsításához. Emellett több csomópontot is beállíthat, hogy kihasználhassa a párhuzamosságot a hiperparaméterek modellhez való hangolása során.

Az alábbi kód egy gpu-számítást Standard_NC24s_v3 hoz létre négy csomóponttal.

A KÖVETKEZŐKRE VONATKOZIK:Azure CLI ml extension v2 (aktuális)

Hozzon létre egy .yml-fájlt az alábbi konfigurációval.

$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

A számítás létrehozásához futtassa a következő CLI v2 parancsot a .yml fájl elérési útjával, a munkaterület nevével, az erőforráscsoporttal és az előfizetés azonosítójával.

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

Kísérlet beállítása

A kísérlet segítségével nyomon követheti a modell betanítási feladatait.

A KÖVETKEZŐKRE VONATKOZIK:Azure CLI ml extension v2 (aktuális)

A kísérlet neve a következő kulcs használatával experiment_name adható meg:

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

Bemeneti adatok vizualizációja

Miután elkészítette a bemeneti képadatokat JSONL (JSON Lines) formátumban, megjelenítheti a kép alapigazság-határoló mezőinek megjelenítését. Ehhez győződjön meg arról, hogy telepítve van 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))

A fenti segédfüggvények használatával bármely képhez futtathatja az alábbi kódot a határolókeretek megjelenítéséhez.

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

plot_ground_truth_boxes_jsonl(image_file, jsonl_file)

Adatok feltöltése és MLTable létrehozása

Az adatok betanításhoz való használatához töltse fel az adatokat az Azure Machine Learning-munkaterület alapértelmezett Blob Storage-ba, és regisztrálja azt eszközként. Az adatok regisztrálásának előnyei a következők:

  • Egyszerűen megosztható a csapat többi tagjával
  • A metaadatok verziószámozása (hely, leírás stb.)
  • Életút nyomon követése

A KÖVETKEZŐKRE VONATKOZIK:Azure CLI ml extension v2 (aktuális)

Hozzon létre egy .yml-fájlt az alábbi konfigurációval.

$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

A képek adategységként való feltöltéséhez futtassa a következő CLI v2 parancsot az .yml fájl elérési útjával, a munkaterület nevével, az erőforráscsoporttal és az előfizetés-azonosítóval.

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

A következő lépés az adatok jsonl formátumban történő létrehozása MLTable az alább látható módon. Az MLtable betanításhoz csomagolja az adatokat egy használható objektumba.

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

A KÖVETKEZŐKRE VONATKOZIK:Azure CLI ml extension v2 (aktuális)

Az alábbi konfiguráció betanítási és érvényesítési adatokat hoz létre az MLTable-ból.

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

Az objektumészlelési kísérlet konfigurálása

Ha automatikus gépi tanulási feladatokat szeretne konfigurálni a rendszerképhez kapcsolódó feladatokhoz, hozzon létre egy feladatspecifikus AutoML-feladatot.

A KÖVETKEZŐKRE VONATKOZIK:Azure CLI ml extension v2 (aktuális)

A kiszolgáló nélküli számítás (előzetes verzió) használatához cserélje le a sort compute: azureml:gpu-cluster a következő kódra:

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

Automatikus hiperparaméter-takarítás képfeladatokhoz (AutoMode)

Fontos

Ez a funkció jelenleg nyilvános előzetes verzióban érhető el. Ez az előzetes verzió szolgáltatásszint-szerződés nélkül érhető el. Előfordulhat, hogy néhány funkció nem támogatott, vagy korlátozott képességekkel rendelkezik. További információ: Kiegészítő használati feltételek a Microsoft Azure előzetes verziójú termékeihez.

Az AutoML-feladatban automatikus hiperparaméter-takarítást végezhet az optimális modell megtalálásához (ezt a funkciót AutoMode-nak nevezzük). Csak a próbaverziók számát adja meg; a hiperparaméteres keresési területre, a mintavételezési módszerre és a korai megszakítási szabályzatra nincs szükség. A rendszer automatikusan meghatározza a hiperparaméter-terület régióját a kísérletek száma alapján. A 10 és 20 közötti értékek valószínűleg sok adathalmazon jól működnek.

A KÖVETKEZŐKRE VONATKOZIK:Azure CLI ml extension v2 (aktuális)

limits:
  max_trials: 10
  max_concurrent_trials: 2

Ezután elküldheti a feladatot egy képmodell betanítása gombra.

A KÖVETKEZŐKRE VONATKOZIK:Azure CLI ml extension v2 (aktuális)

Az AutoML-feladat elküldéséhez futtassa a következő CLI v2 parancsot a .yml fájl elérési útjával, a munkaterület nevével, az erőforráscsoporttal és az előfizetés azonosítójával.

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]

Manuális hiperparaméter-takarítás képfeladatokhoz

Az AutoML-feladatban paraméterrel model_name adhatja meg a modellarchitektúrákat, és konfigurálhatja a beállításokat úgy, hogy egy hiperparaméter-átsöprést hajtanak végre egy meghatározott keresési területen az optimális modell megtalálásához.

Ebben a példában betanítunk egy objektumészlelési modellt yolov5 a és fasterrcnn_resnet50_fpna használatával, amelyek mindegyike előre be van tanítva a COCO-ra, egy nagyméretű objektumészlelési, szegmentálási és feliratozási adatkészlettel, amely több mint ezer címkézett képet tartalmaz több mint 80 címkekategóriával.

Az optimális modell megkereséséhez hyperparaméter-átsöprést végezhet egy meghatározott keresési területen.

A feladat korlátja

Az AutoML-rendszerkép betanítási timeout_minutesfeladatára fordított erőforrásokat a korlátbeállításokban a , max_trials és a max_concurrent_trials feladat értékének megadásával szabályozhatja. Tekintse meg a feladatkorlátok paramétereinek részletes leírását.

A KÖVETKEZŐKRE VONATKOZIK:Azure CLI ml extension v2 (aktuális)

limits:
  timeout_minutes: 60
  max_trials: 10
  max_concurrent_trials: 2

Az alábbi kód határozza meg az egyes definiált architektúrák hiperparaméter-söpredékének előkészítéséhez szükséges keresési területet, yolov5 valamint fasterrcnn_resnet50_fpna következőt: . A keresési területen adja meg a , optimizer, lr_schedulerstb. értéktartományát learning_rateaz AutoML-hez, amely közül választhat, amikor az optimális elsődleges metrikával rendelkező modellt próbál létrehozni. Ha a hiperparaméter-értékek nincsenek megadva, akkor az egyes architektúrákhoz az alapértelmezett értékeket használja a rendszer.

A hangolási beállításokhoz véletlenszerű mintavételezéssel válasszon mintákat ebből a paraméterterületből a random sampling_algorithm használatával. A fent konfigurált feladatkorlátok arra utasítják az automatizált gépi tanulást, hogy összesen 10 próbaverziót próbáljanak ki ezekkel a különböző mintákkal, és egyszerre két próbaverziót futtasson a számítási célon, amelyet négy csomóponttal állítottunk be. Minél több paraméterrel rendelkezik a keresési terület, annál több próbaidőszakra van szükség az optimális modellek megtalálásához.

A Bandit korai felmondási szabályzata is használatos. Ez a szabályzat leállítja a gyenge teljesítményt nyújtó próbaverziókat; vagyis azok a próbaverziók, amelyek nem a legjobban teljesítő próbaverzió 20%-os tartalékidőn belül vannak, ami jelentősen megtakarítja a számítási erőforrásokat.

A KÖVETKEZŐKRE VONATKOZIK:Azure CLI ml extension v2 (aktuális)

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]

A keresési terület és a takarítási beállítások megadása után elküldheti a feladatot, hogy betanítson egy képmodellt a betanítási adathalmaz használatával.

A KÖVETKEZŐKRE VONATKOZIK:Azure CLI ml extension v2 (aktuális)

Az AutoML-feladat elküldéséhez futtassa a következő CLI v2 parancsot a .yml fájl elérési útjával, a munkaterület nevével, az erőforráscsoporttal és az előfizetés azonosítójával.

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]

A hiperparaméterek átvizsgálásakor hasznos lehet megjeleníteni a HyperDrive felhasználói felületén kipróbált különböző kísérleteket. Ehhez a felhasználói felülethez a fenti fő automl_image_job , a HyperDrive szülőfeladatának felhasználói felületén található "Gyermekfeladatok" lapra léphet. Ezután ennek a Gyermekfeladatok lapjára léphet.

Másik lehetőségként az alábbiakban közvetlenül láthatja a HyperDrive szülőfeladatot, és a Gyermekfeladatok lapra navigálhat:

A KÖVETKEZŐKRE VONATKOZIK:Azure CLI ml extension v2 (aktuális)

CLI example not available, please use Python SDK.

Modell regisztrálása és üzembe helyezése

A feladat befejezése után regisztrálhatja a legjobb próbaverzióból létrehozott modellt (a konfiguráció a legjobb elsődleges metrikát eredményezte). A modellt a letöltés után regisztrálhatja, vagy a megfelelő jobidelérési út megadásávalazureml.

A legjobb próbaverzió beszerzése

A KÖVETKEZŐKRE VONATKOZIK:Azure CLI ml extension v2 (aktuális)

CLI example not available, please use Python SDK.

A modell regisztrálása

Regisztrálja a modellt az elérési út vagy a azureml helyileg letöltött elérési út használatával.

A KÖVETKEZŐKRE VONATKOZIK:Azure CLI ml extension v2 (aktuális)

 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]

A használni kívánt modell regisztrálása után üzembe helyezheti azt a felügyelt online végponttal deploy-managed-online-endpoint

Online végpont konfigurálása

A KÖVETKEZŐKRE VONATKOZIK:Azure CLI ml extension v2 (aktuális)

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

Végpont létrehozása

MLClient A korábban létrehozott paranccsal most létrehozzuk a végpontot a munkaterületen. Ez a parancs elindítja a végpont létrehozását, és megerősítési választ ad vissza, amíg a végpont létrehozása folytatódik.

A KÖVETKEZŐKRE VONATKOZIK:Azure CLI ml extension v2 (aktuális)

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

Kötegvégpontot is létrehozhatunk nagy mennyiségű adat kötegkövetkeztetéshez egy adott időszakban. Tekintse meg az objektumészlelési köteg pontozási jegyzetfüzetét a kötegvégpont használatával történő kötegelt következtetéshez.

Online üzemelő példány konfigurálása

Az üzembe helyezés a modell üzemeltetéséhez szükséges erőforrások készlete, amely elvégzi a tényleges következtetést. A osztály használatával létrehozunk egy üzembe helyezést a ManagedOnlineDeployment végponthoz. Az üzembehelyezési fürthöz GPU- vagy CPU-alapú virtuálisgép-termékváltozatokat is használhat.

A KÖVETKEZŐKRE VONATKOZIK:Azure CLI ml extension v2 (aktuális)

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 

Az üzembe helyezés létrehozása

MLClient A korábban létrehozott paranccsal létrehozzuk az üzembe helyezést a munkaterületen. Ez a parancs elindítja az üzembe helyezés létrehozását, és megerősítést kérő választ ad vissza, miközben az üzembe helyezés létrehozása folytatódik.

A KÖVETKEZŐKRE VONATKOZIK:Azure CLI ml extension v2 (aktuális)

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

Forgalom frissítése:

Alapértelmezés szerint az aktuális üzemelő példány 0%-os forgalmat fogad. Beállíthatja, hogy az aktuális üzemelő példány hány százalékos forgalmat kapjon. Az egy végponttal rendelkező üzemelő példányok forgalmi százalékos aránya nem haladhatja meg a 100%-ot.

A KÖVETKEZŐKRE VONATKOZIK:Azure CLI ml extension v2 (aktuális)

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]

Az üzemelő példány tesztelése

A KÖVETKEZŐKRE VONATKOZIK:Azure CLI ml extension v2 (aktuális)

CLI example not available, please use Python SDK.

Észlelések vizualizációja

Most, hogy pontozott egy tesztképet, megjelenítheti a kép határolókeretét. Ehhez győződjön meg arról, hogy telepítve van a matplotlib.

A KÖVETKEZŐKRE VONATKOZIK:Azure CLI ml extension v2 (aktuális)

CLI example not available, please use Python SDK.

Az erőforrások eltávolítása

Ne fejezze be ezt a szakaszt, ha más Azure Machine Learning-oktatóanyagok futtatását tervezi.

Ha nem tervezi használni a létrehozott erőforrásokat, törölje őket, így nem kell díjat fizetnie.

  1. Az Azure Portalon válassza az Erőforráscsoportok lehetőséget a bal szélen.
  2. Válassza ki a listában az Ön által létrehozott erőforráscsoportot.
  3. Válassza az Erőforráscsoport törlése elemet.
  4. Írja be az erőforráscsoport nevét. Ezután válassza a Törlés elemet.

Megtarthatja az erőforráscsoportot is, de egyetlen munkaterületet törölhet. Jelenítse meg a munkaterület tulajdonságait, és válassza a Törlés lehetőséget.

Következő lépések

Ebben az automatizált gépi tanulási oktatóanyagban a következő feladatokat végezte el:

  • Konfigurált egy munkaterületet, és előkészítette az adatokat egy kísérlethez.
  • Automatizált objektumészlelési modell betanítása
  • Megadott hiperparaméter-értékek a modellhez
  • Hiperparaméter-takarítást hajtott végre
  • A modell üzembe helyezése
  • Vizualizációs észlelések

Megjegyzés

A hűtőobjektum-adatkészlet használata az MIT-licenc alatt található licencen keresztül érhető el.