Självstudie: Träna en objektidentifieringsmodell med AutoML och Python
GÄLLER FÖR:Azure CLI ml extension v2 (current)Python SDK azure-ai-ml v2 (aktuell)
I den här självstudien får du lära dig hur du tränar en objektidentifieringsmodell med azure machine learning automatiserad ML med Azure Machine Learning CLI-tillägget v2 eller Azure Machine Learning Python SDK v2. Den här objektidentifieringsmodellen identifierar om bilden innehåller objekt, till exempel en burk, kartong, mjölkflaska eller vattenflaska.
Automatiserad ML accepterar träningsdata och konfigurationsinställningar och itererar automatiskt genom kombinationer av olika funktionsnormaliserings-/standardiseringsmetoder, modeller och hyperparameterinställningar för att komma fram till den bästa modellen.
Du skriver kod med Python SDK i den här självstudien och lär dig följande uppgifter:
- Ladda ned och transformera data
- Träna en modell för identifiering av automatiserade maskininlärningsobjekt
- Ange hyperparametervärden för din modell
- Utföra en hyperparametersvepning
- Distribuera din modell
- Visualisera identifieringar
Förutsättningar
-
Om du vill använda Azure Machine Learning behöver du en arbetsyta. Om du inte har någon slutför du Skapa resurser som du behöver för att komma igång med att skapa en arbetsyta och lära dig mer om hur du använder den.
Python 3.9 eller 3.10 stöds för den här funktionen
Ladda ned och packa upp odFridgeObjects.zip-datafilen*. Datamängden kommenteras i Pascal VOC-format, där varje bild motsvarar en XML-fil. Varje XML-fil innehåller information om var dess motsvarande bildfil finns och innehåller även information om avgränsningsrutorna och objektetiketterna. För att kunna använda dessa data måste du först konvertera dem till det JSONL-format som krävs enligt avsnittet Konvertera nedladdade data till JSONL i notebook-filen.
Använd en beräkningsinstans för att följa den här självstudien utan ytterligare installation. (Se hur du skapar en beräkningsinstans.) Eller installera CLI/SDK för att använda din egen lokala miljö.
GÄLLER FÖR: Azure CLI ml-tillägget v2 (aktuellt)
Den här självstudien är också tillgänglig på lagringsplatsen azureml-examples på GitHub. Om du vill köra den i din egen lokala miljö:
- Installera och konfigurera CLI (v2) och se till att du installerar
ml
tillägget.
- Installera och konfigurera CLI (v2) och se till att du installerar
Konfiguration av beräkningsmål
Kommentar
Om du vill prova serverlös beräkning (förhandsversion) hoppar du över det här steget och fortsätter till Experiment-konfigurationen.
Du måste först konfigurera ett beräkningsmål som ska användas för din automatiserade ML-modellträning. Automatiserade ML-modeller för avbildningsuppgifter kräver GPU-SKU:er.
I den här självstudien används NCsv3-serien (med V100 GPU:er) eftersom den här typen av beräkningsmål använder flera GPU:er för att påskynda träningen. Dessutom kan du konfigurera flera noder för att dra nytta av parallellitet när du justerar hyperparametrar för din modell.
Följande kod skapar en GPU-beräkning av storlek Standard_NC24s_v3
med fyra noder.
GÄLLER FÖR: Azure CLI ml-tillägget v2 (aktuellt)
Skapa en .yml fil med följande konfiguration.
$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
För att skapa beräkningen kör du följande CLI v2-kommando med sökvägen till din .yml fil, arbetsytans namn, resursgrupp och prenumerations-ID.
az ml compute create -f [PATH_TO_YML_FILE] --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]
Experimentkonfiguration
Du kan använda ett experiment för att spåra dina modellträningsjobb.
GÄLLER FÖR: Azure CLI ml-tillägget v2 (aktuellt)
Experimentnamnet kan anges med hjälp av experiment_name
nyckeln på följande sätt:
experiment_name: dpv2-cli-automl-image-object-detection-experiment
Visualisera indata
När du har förberett indata för bilddata i JSONL-format (JSON Lines) kan du visualisera mark sanningsgränsrutorna för en bild. Kontrollera att du har matplotlib
installerat för att göra det.
%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))
Med hjälpfunktionerna ovan kan du för en viss bild köra följande kod för att visa avgränsningsrutorna.
image_file = "./odFridgeObjects/images/31.jpg"
jsonl_file = "./odFridgeObjects/train_annotations.jsonl"
plot_ground_truth_boxes_jsonl(image_file, jsonl_file)
Ladda upp data och skapa MLTable
För att kunna använda data för träning laddar du upp data till standardbloblagringen för din Azure Machine Learning-arbetsyta och registrerar dem som en tillgång. Fördelarna med att registrera data är:
- Lätt att dela med andra medlemmar i teamet
- Versionshantering av metadata (plats, beskrivning osv.)
- Spårning av ursprung
GÄLLER FÖR: Azure CLI ml-tillägget v2 (aktuellt)
Skapa en .yml fil med följande konfiguration.
$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
Om du vill ladda upp avbildningarna som en datatillgång kör du följande CLI v2-kommando med sökvägen till din .yml-fil, arbetsytans namn, resursgrupp och prenumerations-ID.
az ml data create -f [PATH_TO_YML_FILE] --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]
Nästa steg är att skapa MLTable
från dina data i jsonl-format enligt nedan. MLtable paketera dina data i ett förbrukningsbart objekt för träning.
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
GÄLLER FÖR: Azure CLI ml-tillägget v2 (aktuellt)
Följande konfiguration skapar tränings- och valideringsdata från MLTable.
target_column_name: label
training_data:
path: data/training-mltable-folder
type: mltable
validation_data:
path: data/validation-mltable-folder
type: mltable
Konfigurera objektidentifieringsexperimentet
Om du vill konfigurera automatiserade ML-jobb för avbildningsrelaterade uppgifter skapar du ett uppgiftsspecifikt AutoML-jobb.
GÄLLER FÖR: Azure CLI ml-tillägget v2 (aktuellt)
Om du vill använda serverlös beräkning (förhandsversion) ersätter du raden
compute: azureml:gpu-cluster
med den här koden:resources: instance_type: Standard_NC24s_v3 instance_count: 4
task: image_object_detection
primary_metric: mean_average_precision
compute: azureml:gpu-cluster
Automatisk hyperparameter som sveper för bilduppgifter (AutoMode)
Viktigt!
Den här funktionen är för närvarande i allmänt tillgänglig förhandsversion. Den här förhandsversionen tillhandahålls utan ett serviceavtal. Vissa funktioner kanske inte stöds eller kan vara begränsade. Mer information finns i Kompletterande villkor för användning av Microsoft Azure-förhandsversioner.
I ditt AutoML-jobb kan du utföra en automatisk hyperparameterrensning för att hitta den optimala modellen (vi kallar den här funktionen AutoMode). Du anger bara antalet utvärderingsversioner. Hyperparameterns sökutrymme, samplingsmetod och princip för tidig avslutning behövs inte. Systemet avgör automatiskt vilken region i hyperparameterutrymmet som ska sopa baserat på antalet försök. Ett värde mellan 10 och 20 kommer sannolikt att fungera bra på många datauppsättningar.
GÄLLER FÖR: Azure CLI ml-tillägget v2 (aktuellt)
limits:
max_trials: 10
max_concurrent_trials: 2
Du kan sedan skicka jobbet för att träna en avbildningsmodell.
GÄLLER FÖR: Azure CLI ml-tillägget v2 (aktuellt)
Om du vill skicka ditt AutoML-jobb kör du följande CLI v2-kommando med sökvägen till din .yml-fil, arbetsytans namn, resursgrupp och prenumerations-ID.
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]
Manuell hyperparameter som sveper för bilduppgifter
I ditt AutoML-jobb kan du ange modellarkitekturerna med hjälp model_name
av parametern och konfigurera inställningarna för att utföra en hyperparameters svepning över ett definierat sökutrymme för att hitta den optimala modellen.
I det här exemplet tränar vi en objektidentifieringsmodell med yolov5
och fasterrcnn_resnet50_fpn
, som båda tränas på COCO, en storskalig objektidentifiering, segmentering och textningsdatauppsättning som innehåller över tusentals etiketterade bilder med över 80 etikettkategorier.
Du kan utföra en hyperparameters svepning över ett definierat sökutrymme för att hitta den optimala modellen.
Jobbgränser
Du kan styra de resurser som spenderas på autoML-avbildningsträningsjobbet timeout_minutes
genom att ange , max_trials
och max_concurrent_trials
för jobbet i gränsinställningarna. Se detaljerad beskrivning av parametrar för jobbbegränsningar.
GÄLLER FÖR: Azure CLI ml-tillägget v2 (aktuellt)
limits:
timeout_minutes: 60
max_trials: 10
max_concurrent_trials: 2
Följande kod definierar sökutrymmet som förberedelse för hyperparameter-svepet för varje definierad arkitektur och yolov5
fasterrcnn_resnet50_fpn
. I sökutrymmet anger du intervallet med värden för learning_rate
, optimizer
, lr_scheduler
, osv., för AutoML att välja mellan när den försöker generera en modell med det optimala primära måttet. Om hyperparametervärden inte anges används standardvärdena för varje arkitektur.
För justeringsinställningarna använder du slumpmässig sampling för att välja exempel från det här parameterutrymmet med hjälp random
av sampling_algorithm. Jobbgränserna som konfigurerats ovan säger till automatiserad ML att prova totalt 10 utvärderingsversioner med dessa olika exempel och köra två utvärderingsversioner i taget på vårt beräkningsmål, som konfigurerades med fyra noder. Ju fler parametrar sökutrymmet har, desto fler utvärderingsversioner behöver du hitta optimala modeller.
Principen för tidig uppsägning av Bandit används också. Den här principen avslutar utvärderingsversioner med dåliga resultat. det vill: de utvärderingsversioner som inte ligger inom 20 % slack från den utvärderingsversion som fungerar bäst, vilket avsevärt sparar beräkningsresurser.
GÄLLER FÖR: Azure CLI ml-tillägget v2 (aktuellt)
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]
När sökutrymmet och svepinställningarna har definierats kan du sedan skicka jobbet för att träna en bildmodell med hjälp av din träningsdatauppsättning.
GÄLLER FÖR: Azure CLI ml-tillägget v2 (aktuellt)
Om du vill skicka ditt AutoML-jobb kör du följande CLI v2-kommando med sökvägen till din .yml-fil, arbetsytans namn, resursgrupp och prenumerations-ID.
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]
När du gör en hyperparametersrensning kan det vara användbart att visualisera de olika utvärderingsversioner som provades med hjälp av HyperDrive-användargränssnittet. Du kan navigera till det här användargränssnittet genom att gå till fliken Underordnade jobb i användargränssnittet för huvud-automl_image_job ovan, som är det överordnade HyperDrive-jobbet. Sedan kan du gå till fliken Underordnade jobb i den här.
Här nedan kan du också se det överordnade HyperDrive-jobbet direkt och gå till fliken Underordnade jobb:
GÄLLER FÖR: Azure CLI ml-tillägget v2 (aktuellt)
CLI example not available, please use Python SDK.
Registrera och distribuera modell
När jobbet är klart kan du registrera den modell som skapades från den bästa utvärderingsversionen (konfiguration som resulterade i det bästa primära måttet). Du kan antingen registrera modellen efter nedladdningen eller genom att azureml
ange sökvägen med motsvarande jobid
.
Få den bästa utvärderingsversionen
GÄLLER FÖR: Azure CLI ml-tillägget v2 (aktuellt)
CLI example not available, please use Python SDK.
Registrera modellen
Registrera modellen antingen med hjälp av azureml
sökvägen eller din lokalt nedladdade sökväg.
GÄLLER FÖR: Azure CLI ml-tillägget v2 (aktuellt)
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]
När du har registrerat den modell som du vill använda kan du distribuera den med hjälp av den hanterade onlineslutpunkten deploy-managed-online-endpoint
Konfigurera onlineslutpunkt
GÄLLER FÖR: Azure CLI ml-tillägget v2 (aktuellt)
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
name: od-fridge-items-endpoint
auth_mode: key
Skapa slutpunkten
Med hjälp av den MLClient
som skapades tidigare skapar vi nu slutpunkten på arbetsytan. Det här kommandot startar skapandet av slutpunkten och returnerar ett bekräftelsesvar medan skapandet av slutpunkten fortsätter.
GÄLLER FÖR: Azure CLI ml-tillägget v2 (aktuellt)
az ml online-endpoint create --file .\create_endpoint.yml --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]
Vi kan också skapa en batchslutpunkt för batch-slutsatsdragning på stora mängder data under en viss tidsperiod. Kolla in batchbedömningsanteckningsboken för objektidentifiering för batch-slutsatsdragning med hjälp av batchslutpunkten.
Konfigurera onlinedistribution
En distribution är en uppsättning resurser som krävs för att vara värd för den modell som utför den faktiska inferensen. Vi skapar en distribution för vår slutpunkt med hjälp av ManagedOnlineDeployment
klassen . Du kan använda GPU- eller CPU VM-SKU:er för distributionsklustret.
GÄLLER FÖR: Azure CLI ml-tillägget v2 (aktuellt)
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
Skapa distributionen
Med hjälp av den MLClient
som skapades tidigare skapar vi distributionen på arbetsytan. Det här kommandot startar distributionen och returnerar ett bekräftelsesvar medan distributionen fortsätter.
GÄLLER FÖR: Azure CLI ml-tillägget v2 (aktuellt)
az ml online-deployment create --file .\create_deployment.yml --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]
Uppdatera trafik:
Som standard är den aktuella distributionen inställd på att ta emot 0 % trafik. du kan ange vilken trafikprocentuell distribution som ska tas emot. Summan av trafikprocenterna för alla distributioner med en slutpunkt får inte överstiga 100 %.
GÄLLER FÖR: Azure CLI ml-tillägget v2 (aktuellt)
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]
Testa distributionen
GÄLLER FÖR: Azure CLI ml-tillägget v2 (aktuellt)
CLI example not available, please use Python SDK.
Visualisera identifieringar
Nu när du har fått en testbild kan du visualisera avgränsningsrutorna för den här bilden. För att göra det måste du ha matplotlib installerat.
GÄLLER FÖR: Azure CLI ml-tillägget v2 (aktuellt)
CLI example not available, please use Python SDK.
Rensa resurser
Slutför inte det här avsnittet om du planerar att köra andra Azure Machine Learning-självstudier.
Om du inte planerar att använda de resurser som du har skapat tar du bort dem så att du inte debiteras några avgifter.
- I Azure-portalen väljer du Resursgrupper längst till vänster.
- Välj den resursgrupp i listan som du har skapat.
- Välj Ta bort resursgrupp.
- Ange resursgruppsnamnet. Välj sedan ta bort.
Du kan också behålla resursgruppen men ta bort en enstaka arbetsyta. Visa arbetsytans egenskaper och välj Ta bort.
Nästa steg
I den här automatiserade självstudiekursen om maskininlärning har du gjort följande uppgifter:
- Konfigurerat en arbetsyta och förberett data för ett experiment.
- Tränat en modell för automatisk objektidentifiering
- Angivna hyperparametervärden för din modell
- Utförde en hyperparametersrensning
- Distribuerade din modell
- Visualiserade identifieringar
Lär dig hur du konfigurerar AutoML för att träna modeller för visuellt innehåll med Python.
Lär dig hur du konfigurerar inkrementell träning på modeller för visuellt innehåll.
Se vilka hyperparametrar som är tillgängliga för uppgifter med visuellt innehåll.
Kodexempel:
GÄLLER FÖR: Azure CLI ml-tillägget v2 (aktuellt)
- Granska detaljerade kodexempel och användningsfall på lagringsplatsen azureml-examples för automatiserade maskininlärningsexempel. Kontrollera mapparna med prefixet "cli-automl-image-" för exempel som är specifika för att skapa modeller för visuellt innehåll.