Esercitazione: Eseguire il training di un modello di rilevamento oggetti con AutoML e Python
SI APPLICA A:Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)Python SDK azure-ai-ml v2 (corrente)
Questa esercitazione descrive come eseguire il training di un modello di rilevamento oggetti con ML automatizzato di Azure Machine Learning con l'estensione dell'interfaccia della riga di comando di Azure Machine Learning v2 o Azure Machine Learning Python SDK v2. Questo modello di rilevamento oggetti identifica se l'immagine contiene oggetti, ad esempio una lattina, una scatola, una bottiglia di latte o una bottiglia d'acqua.
ML automatizzato accetta le impostazioni di configurazione e dati di training e scorre automaticamente le combinazioni di diversi metodi di normalizzazione/standardizzazione di funzionalità, modelli e impostazioni di iperparametri allo scopo di ottenere il modello ottimale.
In questa esercitazione si scriverà codice usando Python SDK e verranno illustrate le attività seguenti:
- Scaricare e trasformare i dati
- Eseguire il training di un modello di rilevamento oggetti di Machine Learning automatizzato
- Specificare i valori degli iperparametri per il modello
- Eseguire uno sweeping di iperparametri
- Distribuire il modello
- Visualizzare i rilevamenti
Prerequisiti
-
Per usare Azure Machine Learning, è necessaria un'area di lavoro. Se non è disponibile, completare Creare le risorse necessarie per iniziare creare un'area di lavoro e ottenere maggiori informazioni su come usarla.
Per questa funzionalità sono supportati Python 3.9 o 3.10
Scaricare e decomprimere il file di dati *odFridgeObjects.zip. Il set di dati viene annotato in formato Pascal VOC, in cui ogni immagine corrisponde a un file XML. Ogni file XML contiene informazioni sul percorso in cui si trova il file di immagine corrispondente, oltre a informazioni sui rettangoli di selezione e sulle etichette degli oggetti. Per usare questi dati, è prima necessario convertirli nel formato JSONL richiesto, come illustrato nella sezione Convertire i dati scaricati in JSONL del notebook.
Usare un'istanza di ambiente di calcolo per seguire questa esercitazione senza ulteriori installazioni. Vedere come creare un'istanza di ambiente di calcolo. In alternativa, installare l'interfaccia della riga di comando o l'SDK per usare l'ambiente locale.
SI APPLICA A: Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)
Questa esercitazione è disponibile anche nel repository azureml-examples in GitHub. Se si vuole eseguirlo nel proprio ambiente locale:
- Installare e configurare l'interfaccia della riga di comando (v2) e assicurarsi di installare l'estensione
ml
.
- Installare e configurare l'interfaccia della riga di comando (v2) e assicurarsi di installare l'estensione
Configurazione della destinazione di calcolo
Nota
Per provare l'ambiente di elaborazione serverless (anteprima), ignorare questo passaggio e procedere con la configurazione dell'esperimento.
È prima necessario configurare una destinazione di calcolo da usare per il training del modello di ML automatizzato. I modelli di ML automatizzati per le attività correlate alle immagini richiedono SKU GPU.
Per questa esercitazione si usa la serie NCsv3 (con GPU V100) perché questo tipo di destinazione di calcolo usa più GPU per velocizzare il training. È inoltre possibile configurare più nodi per sfruttare il parallelismo durante l'ottimizzazione degli iperparametri per il modello.
Il codice seguente crea un calcolo GPU di dimensioni pari a Standard_NC24s_v3
con quattro nodi.
SI APPLICA A: Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)
Creare un file con estensione yml con la configurazione seguente.
$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
Per creare l'ambiente di calcolo, eseguire il comando dell'interfaccia della riga di comando v2 seguente con il percorso del file con estensione yml, il nome dell'area di lavoro, il gruppo di risorse e l'ID sottoscrizione.
az ml compute create -f [PATH_TO_YML_FILE] --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]
Configurazione dell'esperimento
È possibile usare un esperimento per tenere traccia dei processi di training del modello.
SI APPLICA A: Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)
Il nome dell'esperimento può essere specificato usando la chiave experiment_name
come indicato di seguito:
experiment_name: dpv2-cli-automl-image-object-detection-experiment
Visualizzare i dati di input
Dopo aver preparato i dati di immagine di input in formato JSONL (JSON Lines), è possibile visualizzare i rettangoli di selezione della verità di base per un'immagine. A tale scopo, assicurarsi che sia installato 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))
Usando le funzioni helper precedenti, per qualsiasi immagine specifica, è possibile eseguire il codice seguente per visualizzare i rettangoli di selezione.
image_file = "./odFridgeObjects/images/31.jpg"
jsonl_file = "./odFridgeObjects/train_annotations.jsonl"
plot_ground_truth_boxes_jsonl(image_file, jsonl_file)
Caricare dati e creare MLTable
Per usare i dati per il training, caricarli nell'archivio BLOB predefinito dell'area di lavoro di Azure Machine Learning e registrarli come asset. I vantaggi della registrazione dei dati sono i seguenti:
- Sono facilmente condivisibili con altri membri del team
- Supportano il controllo delle versioni dei metadati (posizione, descrizione e così via)
- Rilevamento della derivazione
SI APPLICA A: Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)
Creare un file con estensione yml con la configurazione seguente.
$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
Per caricare le immagini come asset di dati, eseguire il comando dell'interfaccia della riga di comando v2 seguente con il percorso del file con estensione yml, il nome dell'area di lavoro, il gruppo di risorse e l'ID sottoscrizione.
az ml data create -f [PATH_TO_YML_FILE] --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]
Il passaggio successivo consiste nel creare MLTable
dai dati in formato jsonl, come illustrato di seguito. MLtable inserisce i dati in un oggetto utilizzabile per il training.
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
SI APPLICA A: Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)
La configurazione seguente crea dati di training e di convalida da MLTable.
target_column_name: label
training_data:
path: data/training-mltable-folder
type: mltable
validation_data:
path: data/validation-mltable-folder
type: mltable
Configurare l'esperimento di rilevamento oggetti
Per configurare processi di ML automatizzati per attività correlate alle immagini, creare un processo AutoML specifico dell'attività.
SI APPLICA A: Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)
Per usare l'ambiente di elaborazione serverless (anteprima), sostituire la riga
compute: azureml:gpu-cluster
con il codice seguente:resources: instance_type: Standard_NC24s_v3 instance_count: 4
task: image_object_detection
primary_metric: mean_average_precision
compute: azureml:gpu-cluster
Sweeping automatico degli iperparametri per le attività correlate alle immagini (AutoMode)
Importante
Questa funzionalità è attualmente in anteprima pubblica. Questa versione di anteprima viene fornita senza un contratto di servizio. Alcune funzionalità potrebbero non essere supportate o potrebbero presentare funzionalità limitate. Per altre informazioni, vedere le Condizioni supplementari per l'uso delle anteprime di Microsoft Azure.
Nel processo AutoML è possibile eseguire uno sweeping automatico degli iperparametri per trovare il modello ottimale (questa funzionalità viene chiamata AutoMode). Occorre specificare solo il numero di prove. Lo spazio di ricerca degli iperparametri, il metodo di campionamento e i criteri di terminazione anticipata non sono necessari. Il sistema determinerà automaticamente l'area dello spazio degli iperparametri per eseguire lo sweeping in base al numero di prove. È probabile che un valore compreso tra 10 e 20 sia corretto con molti set di dati.
SI APPLICA A: Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)
limits:
max_trials: 10
max_concurrent_trials: 2
È quindi possibile inviare il processo per eseguire il training di un modello di immagine.
SI APPLICA A: Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)
Per inviare il processo di AutoML, è possibile eseguire il comando dell'interfaccia della riga di comando v2 seguente con il percorso del file con estensione yml, il nome dell'area di lavoro, il gruppo di risorse e l'ID sottoscrizione.
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]
Sweeping manuale degli iperparametri per le attività correlate alle immagini
Nel processo AutoML è possibile specificare le architetture del modello usando il parametro model_name
e configurare le impostazioni per eseguire uno sweeping di iperparametri su uno spazio di ricerca definito per trovare il modello ottimale.
In questo esempio si eseguirà il training di un modello di rilevamento oggetti con yolov5
e fasterrcnn_resnet50_fpn
, entrambi sottoposti a training preliminare in COCO, un rilevamento di oggetti su larga scala, segmentazione e set di dati di didascalia che contiene oltre migliaia di immagini etichettate con più di 80 categorie di etichette.
È possibile eseguire uno sweeping di iperparametri su uno spazio di ricerca definito per trovare il modello ottimale.
Limiti dei processi
È possibile controllare le risorse utilizzate per il processo di training dell'immagine AutoML specificando timeout_minutes
, max_trials
e max_concurrent_trials
per il processo nelle impostazioni di limite. Vedere la descrizione dettagliata nei parametri dei limiti del processo.
SI APPLICA A: Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)
limits:
timeout_minutes: 60
max_trials: 10
max_concurrent_trials: 2
Il codice seguente definisce lo spazio di ricerca in preparazione dello sweeping degli iperparametri per ogni architettura definita, yolov5
e fasterrcnn_resnet50_fpn
. Nello spazio di ricerca specificare l'intervallo di valori per learning_rate
, optimizer
, lr_scheduler
e così via da cui AutoML potrà scegliere durante il tentativo di generare un modello con la metrica primaria ottimale. Se i valori degli iperparametri non vengono specificati, vengono usati i valori predefiniti per ogni architettura.
Per le impostazioni di ottimizzazione, usare il campionamento casuale per selezionare campioni da questo spazio dei parametri con il parametro sampling_algorithm impostato su random
. I limiti del processo configurati in precedenza indicano a ML automatizzato di provare un totale di 10 prove con questi campioni diversi, eseguendo due prove alla volta nella destinazione di calcolo, configurata con quattro nodi. Più parametri sono presenti per lo spazio di ricerca, maggiore è il numero di prove da effettuare per trovare modelli ottimali.
Vengono usati anche i criteri di terminazione anticipata di Bandit. Questi criteri vengono usati per terminare le prove ritenute insufficienti, ovvero quelle che non rientrano nel 20% del margine di flessibilità delle prove migliori e questo consente di risparmiare in modo significativo sulle risorse di calcolo.
SI APPLICA A: Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)
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]
Dopo aver definito le impostazioni dello spazio di ricerca e dello sweeping, è possibile inviare il processo per eseguire il training di un modello di immagini con il set di dati di training.
SI APPLICA A: Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)
Per inviare il processo di AutoML, è possibile eseguire il comando dell'interfaccia della riga di comando v2 seguente con il percorso del file con estensione yml, il nome dell'area di lavoro, il gruppo di risorse e l'ID sottoscrizione.
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]
Quando si esegue uno sweeping di iperparametri, può essere utile visualizzare le diverse prove effettuate con l'interfaccia utente di HyperDrive. È possibile passare a questa interfaccia utente dalla scheda dei processi figlio dell'interfaccia utente di automl_image_job principale a partire dall'alto, ovvero il processo padre di HyperDrive. È quindi possibile passare alla scheda dei processi figlio di tale processo.
In alternativa, come illustrato di seguito è possibile visualizzare direttamente il processo padre di HyperDrive e passare alla relativa scheda dei processi figlio:
SI APPLICA A: Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)
CLI example not available, please use Python SDK.
Registrare e distribuire modelli
Al termine del processo, è possibile registrare il modello creato dalla prova migliore (configurazione che ha generato la metrica primaria migliore). È possibile registrare il modello dopo il download o specificando il percorso di azureml
con jobid
corrispondente.
Ottenere la prova migliore
SI APPLICA A: Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)
CLI example not available, please use Python SDK.
Registrare il modello
Registrare il modello usando il percorso di azureml
o il percorso scaricato in locale.
SI APPLICA A: Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)
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]
Dopo aver registrato il modello da usare, è possibile distribuirlo usando l'endpoint online gestito deploy-managed-online-endpoint.
Configurare l'endpoint online
SI APPLICA A: Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
name: od-fridge-items-endpoint
auth_mode: key
Creare l'endpoint
Usando l'oggetto MLClient
creato in precedenza, verrà ora creato l'endpoint nell'area di lavoro. Questo comando avvia la creazione dell'endpoint e restituisce una risposta di conferma mentre la creazione dell'endpoint è ancora in corso.
SI APPLICA A: Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)
az ml online-endpoint create --file .\create_endpoint.yml --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]
È anche possibile creare un endpoint batch per l'inferenza batch su grandi volumi di dati in un certo periodo di tempo. Vedere il notebook di assegnazione dei punteggi batch di rilevamento oggetti per l'inferenza batch usando l'endpoint batch.
Configurare la distribuzione online
Per distribuzione si intende un set di risorse necessarie per ospitare il modello che esegue l'inferenza effettiva. Per creare una distribuzione per l'endpoint, si usa la classe ManagedOnlineDeployment
. Per il cluster di distribuzione è possibile usare SKU di VM GPU o CPU.
SI APPLICA A: Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)
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
Creare la distribuzione
Usando l'oggetto MLClient
creato in precedenza, verrà creata la distribuzione nell'area di lavoro. Questo comando avvia la creazione della distribuzione e restituisce una risposta di conferma mentre la creazione della distribuzione è ancora in corso.
SI APPLICA A: Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)
az ml online-deployment create --file .\create_deployment.yml --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]
Aggiornare il traffico
Per impostazione predefinita, la distribuzione corrente è impostata per ricevere lo 0% del traffico. È possibile impostare la percentuale di traffico che dovrà ricevere la distribuzione corrente. La somma delle percentuali di traffico di tutte le distribuzioni con un endpoint non deve superare il 100%.
SI APPLICA A: Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)
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]
Testare la distribuzione
SI APPLICA A: Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)
CLI example not available, please use Python SDK.
Visualizzare i rilevamenti
Dopo aver ottenuto un punteggio per un'immagine di test, è possibile visualizzare i rettangoli di selezione per questa immagine. A tale scopo, assicurarsi di avere installato matplotlib.
SI APPLICA A: Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)
CLI example not available, please use Python SDK.
Pulire le risorse
Se si intende eseguire altre esercitazioni su Azure Machine Learning, non completare questa sezione.
Se non si prevede di usare le risorse create, eliminarle per evitare addebiti.
- Nel portale di Azure fare clic su Gruppi di risorse all'estrema sinistra.
- Nell'elenco selezionare il gruppo di risorse creato.
- Selezionare Elimina gruppo di risorse.
- Immettere il nome del gruppo di risorse. Quindi seleziona Elimina.
È anche possibile mantenere il gruppo di risorse ma eliminare una singola area di lavoro. Visualizzare le proprietà dell'area di lavoro e selezionare Elimina.
Passaggi successivi
In questa esercitazione sulla modalità automatizzata di apprendimento automatico sono state eseguite queste attività:
- Configurare un'area di lavoro e preparare i dati per un esperimento.
- Training di un modello di rilevamento oggetti automatizzato
- Specifica dei valori degli iperparametri per il modello
- Esecuzione di uno sweeping di iperparametri
- Distribuzione del modello
- Visualizzazione dei rilevamenti
Altre informazioni su Visione artificiale in ML automatizzato.
Informazioni su come configurare il training incrementale nei modelli di Visione artificiale.
Vedere quali iperparametri sono disponibili per le attività di Visione artificiale.
Esempi di codice:
SI APPLICA A: Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)
- Per esempi di codice e casi d'uso dettagliati, vedere il repository azureml-examples relativo a esempi di Machine Learning automatizzato. Per esempi specifici relativi alla creazione di modelli di Visione artificiale, controllare le cartelle con il prefisso 'cli-automl-image-'.
Nota
L'uso del set di dati degli oggetti fridge è concesso su licenza MIT.