Megosztás a következőn keresztül:


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

ÉRVÉNYES:Azure CLI ml-bővítmény v2 (aktuális)Python SDK azure-ai-ml v2 (aktuális)

Ebben az oktatóanyagban megtudhatja, hogyan taníthat be objektumészlelési modellt az Azure Machine Learning automatizált ML használatával az Azure Machine Learning CLI v2-es bővítményével 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ók normalizálási/szabványosítási módszereinek, modelljeinek és hiperparaméter-beállításainak kombinációjával, hogy a legjobb modellt érje el.

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

  • 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 munkaterületre van szüksége. Ha nem rendelkezik ilyen erőforrással, végezze el a munkaterület létrehozásához szükséges erőforrások létrehozását, és tudjon meg többet a használatáról.

  • A Python 3.9 vagy 3.10 támogatott ehhez a funkcióhoz

  • Töltse le és bontsa ki a *odFridgeObjects.zip adatfájlt. Az adathalmaz Pascal VOC formátumban van jegyzetelve, ahol minden kép egy XML-fájlnak felel meg. Minden xml-fájl információt tartalmaz arról, hogy hol található a megfelelő képfájl, valamint információkat tartalmaz a határolókeretekről és az objektumfeliratokról. Az adatok használatához először a szükséges JSONL-formátumra kell konvertálnia azokat, ahogyan az a letöltött adatok konvertálása a jegyzetfüzet JSONL-szakaszában látható.

  • 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ŐRE VONATKOZIK: Azure CLI ml-bővítmény 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

Feljegyzé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, amelyet az automatizált ml-modell betanításához használ. 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 az ilyen típusú számítási cél 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ág előnyeit a modell hiperparamétereinek finomhangolá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ŐRE VONATKOZIK: Azure CLI ml-bővítmény 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

Kísérlet használatával nyomon követheti a modell betanítási feladatait.

A KÖVETKEZŐRE VONATKOZIK: Azure CLI ml-bővítmény v2 (aktuális)

A kísérlet neve a következő kulccsal adható meg experiment_name :

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

Bemeneti adatok megjelenítése

Miután JSONL (JSON Lines) formátumban előkészítette a bemeneti képadatokat, 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 a következő 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 objektumké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.)
  • Az életút nyomon követése

A KÖVETKEZŐRE VONATKOZIK: Azure CLI ml-bővítmény 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 rendszerképek adategységként való feltölté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 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 való létrehozása MLTable az alább látható módon. Az MLtable betanításhoz csomagolja az adatokat egy hasznosítható 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ŐRE VONATKOZIK: Azure CLI ml-bővítmény 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 ml-feladatokat szeretne konfigurálni a rendszerképhez kapcsolódó feladatokhoz, hozzon létre egy feladatspecifikus AutoML-feladatot.

A KÖVETKEZŐRE VONATKOZIK: Azure CLI ml-bővítmény 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 megszüntetési szabályzatra nincs szükség. A rendszer automatikusan meghatározza a hiperparaméter területének 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ŐRE VONATKOZIK: Azure CLI ml-bővítmény v2 (aktuális)

limits:
  max_trials: 10
  max_concurrent_trials: 2

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

A KÖVETKEZŐRE VONATKOZIK: Azure CLI ml-bővítmény 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étert az optimális modell megkeresése érdekében egy megadott keresési területen végezzen.

Ebben a példában betanítunk egy objektumészlelési modellt yolov5 fasterrcnn_resnet50_fpn, és mindkettőt előre betanítjuk a COCO-ra, egy nagyméretű objektumészlelést, szegmentálást és feliratozási adatkészletet, 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 hiperparaméter-keresést hajthat végre egy meghatározott keresési területen.

A feladat korlátja

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

A KÖVETKEZŐRE VONATKOZIK: Azure CLI ml-bővítmény v2 (aktuális)

limits:
  timeout_minutes: 60
  max_trials: 10
  max_concurrent_trials: 2

Az alábbi kód határozza meg a keresési területet az egyes definiált architektúrák hiperparaméteres takarításának előkészítése során, yolov5 és fasterrcnn_resnet50_fpn. A keresési területen adja meg az AutoML értéktartományátlearning_rateoptimizerlr_scheduler, amelyből választani szeretne, amikor az optimális elsődleges metrikával rendelkező modellt próbál létrehozni. Ha a hiperparaméter-értékek nincsenek megadva, akkor a rendszer az egyes architektúrákhoz alapértelmezett értékeket használ.

A hangolási beállításokhoz szúrópróbaszerű mintavételezéssel válasszon mintákat ebből a paramétertérből a random sampling_algorithm használatával. A fent konfigurált feladatkorlátok azt jelzik, hogy az automatizált gépi tanulás összesen 10 próbaverziót próbál ki ezekkel a különböző mintákkal, és egyszerre két próbaverziót futtat a számítási célon, amelyet négy csomópont használatával á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óbaidőszak 20%-os tartalékideje alatt vannak, ami jelentősen megtakarítja a számítási erőforrásokat.

A KÖVETKEZŐRE VONATKOZIK: Azure CLI ml-bővítmény 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]

Miután definiálta a keresési területet és a takarítási beállításokat, elküldheti a feladatot egy képmodell betanításához a betanítási adatkészlet használatával.

A KÖVETKEZŐRE VONATKOZIK: Azure CLI ml-bővítmény 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]

Hiperparaméteres takarítás esetén hasznos lehet a HyperDrive felhasználói felületén kipróbált különböző kísérletek megjelenítése. Ehhez a felhasználói felülethez a fő automl_image_job felhasználói felületén található "Gyermekfeladatok" lapra lépve navigálhat felülről, amely a HyperDrive szülőfeladata. Ezután a gyermekfeladatok lapfülre léphet.

Az alábbiakban közvetlenül a HyperDrive szülőfeladatát láthatja, és a Gyermekfeladatok lapra navigálhat:

A KÖVETKEZŐRE VONATKOZIK: Azure CLI ml-bővítmény v2 (aktuális)

CLI example not available, please use Python SDK.

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

Miután a feladat befejeződött, regisztrálhatja a legjobb próbaverzióból létrehozott modellt (olyan konfigurációt, amely a legjobb elsődleges metrikát eredményezte). A modellt a letöltés után is regisztrálhatja, vagy megadhatja a azureml megfelelő jobidelérési utat.

A legjobb próbaverzió lekérése

A KÖVETKEZŐRE VONATKOZIK: Azure CLI ml-bővítmény v2 (aktuális)

CLI example not available, please use Python SDK.

Regisztrálja a modellt

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ŐRE VONATKOZIK: Azure CLI ml-bővítmény 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 , a deploy-managed-online-endpoint használatával.

Online végpont konfigurálása

A KÖVETKEZŐRE VONATKOZIK: Azure CLI ml-bővítmény v2 (aktuális)

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

A végpont létrehozása

A MLClient korábban létrehozottak használatával 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ő választ ad vissza, amíg a végpont létrehozása folytatódik.

A KÖVETKEZŐRE VONATKOZIK: Azure CLI ml-bővítmény 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övetkezéséhez egy adott időszakban. Tekintse meg az objektumészlelési kötegpontozási jegyzetfüzetet 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 tényleges következtetést okozó modell üzemeltetéséhez szükséges erőforrások készlete. Az osztály használatával létrehozunk egy üzembe helyezést a ManagedOnlineDeployment végponthoz. Az üzembehelyezési fürthöz GPU-t vagy CPU-beli virtuálisgép-termékváltozatokat is használhat.

A KÖVETKEZŐRE VONATKOZIK: Azure CLI ml-bővítmény 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

A MLClient korábban létrehozottak használatával 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, amíg a telepítés létrehozása folytatódik.

A KÖVETKEZŐRE VONATKOZIK: Azure CLI ml-bővítmény 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 forgalommal rendelkezzen. Az egy végponttal rendelkező üzemelő példányok forgalmi százalékának összege nem haladhatja meg a 100%-ot.

A KÖVETKEZŐRE VONATKOZIK: Azure CLI ml-bővítmény 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ŐRE VONATKOZIK: Azure CLI ml-bővítmény v2 (aktuális)

CLI example not available, please use Python SDK.

Észlelések vizualizációja

Most, hogy elért 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ŐRE VONATKOZIK: Azure CLI ml-bővítmény 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óanyagokat szeretne futtatni.

Ha nem tervezi használni a létrehozott erőforrásokat, törölje őket, így nem kell 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. Adja meg 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éteres takarítást hajtott végre
  • A modell üzembe helyezése
  • Vizualizációs észlelések

Feljegyzés

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