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 illustra come eseguire il training di un modello di rilevamento oggetti usando Machine Learning automatizzato di 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 scatola, un cartone, una bottiglia di latte o una bottiglia d'acqua.
Machine Learning automatizzato accetta i dati di training e le impostazioni di configurazione e scorre automaticamente le combinazioni di diversi metodi di normalizzazione/standardizzazione delle funzionalità, modelli e impostazioni degli iperparametri per arrivare al modello migliore.
Scrivere codice usando Python SDK in questa esercitazione e apprendere 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 sweep di iperparametri
- Distribuire il modello
- Visualizzare i rilevamenti
Prerequisiti
-
Per usare Azure Machine Learning, è necessario prima di tutto un'area di lavoro. Se non è disponibile, completare Crea risorse necessarie per iniziare a creare un'area di lavoro e ottenere altre informazioni sull'uso.
Python 3.6 o 3.7 sono supportati per questa funzionalità
Scaricare e decomprimere il * file di datiodFridgeObjects.zip. Il set di dati viene annotato in formato PASCAL, in cui ogni immagine corrisponde a un file XML. Ogni file XML contiene informazioni sulla posizione in cui si trova il file di immagine corrispondente e contiene anche 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 calcolo per seguire questa esercitazione senza ulteriori installazioni. Vedere come creare un'istanza di calcolo. In alternativa, installare l'interfaccia della riga di comando/SDK per usare il proprio 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 calcolo serverless (anteprima), ignorare questo passaggio e passare alla configurazione dell'esperimento.
È prima di tutto necessario configurare una destinazione di calcolo da usare per il training automatizzato del modello di Machine Learning. I modelli di Machine Learning automatizzati per le attività di immagine richiedono SKU GPU.
Questa esercitazione usa la serie NCsv3 (con GPU V100) perché questo tipo di destinazione di calcolo usa più GPU per velocizzare il training. È anche 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 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 il calcolo, eseguire il comando dell'interfaccia della riga di comando v2 seguente con il percorso del file con estensione yml, del nome dell'area di lavoro, del gruppo di risorse e dell'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)
È possibile specificare il nome dell'esperimento usando experiment_name
la chiave come indicato di seguito:
experiment_name: dpv2-cli-automl-image-object-detection-experiment
Visualizzare i dati di input
Dopo aver preparato i dati dell'immagine di input in formato JSONL (JSON Lines), è possibile visualizzare i rettangoli di selezione dei dati reali per un'immagine. A tale scopo, assicurarsi di aver matplotlib
installato.
%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, caricare i dati nell'archivio BLOB predefinito dell'area di lavoro di Azure Machine Learning e registrarlo come asset. I vantaggi della registrazione dei dati sono i seguenti:
- Facile da condividere con altri membri del team
- Controllo delle versioni dei metadati (posizione, descrizione e così via)
- Rilevamento 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, del nome dell'area di lavoro, del gruppo di risorse e dell'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 di consumo 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 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 degli oggetti
Per configurare processi di Machine Learning automatizzati per le attività correlate alle immagini, creare un processo AutoML specifico per un'attività.
SI APPLICA A:Estensione ml dell'interfaccia della riga di comando di Azure v2 (corrente)
Per usare il calcolo serverless (anteprima), sostituire la riga
compute: azureml:gpu-cluster
con questo codice:resources: instance_type: Standard_NC24s_v3 instance_count: 4
```yaml
task: image_object_detection
primary_metric: mean_average_precision
compute: azureml:gpu-cluster
Sweep automatico degli iperparametri per le attività di immagine (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 Condizioni supplementari per l'utilizzo delle anteprime di Microsoft Azure.
Nel processo AutoML è possibile eseguire uno sweep di iperparametri automatico per trovare il modello ottimale (questa funzionalità viene chiamata AutoMode). 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 da eseguire in base al numero di prove. È probabile che un valore compreso tra 10 e 20 funzioni correttamente in 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 AutoML, eseguire il comando dell'interfaccia della riga di comando v2 seguente con il percorso del file con estensione yml, del nome dell'area di lavoro, del gruppo di risorse e dell'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]
Sweep manuale degli iperparametri per le attività di immagine
Nel processo AutoML è possibile specificare le architetture del modello usando model_name
il parametro e configurare le impostazioni per eseguire uno sweep di iperparametri su uno spazio di ricerca definito per trovare il modello ottimale.
In questo esempio verrà eseguito 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 oltre 80 categorie di etichette.
È possibile eseguire uno sweep di iperparametri su uno spazio di ricerca definito per trovare il modello ottimale.
Limiti dei processi
È possibile controllare le risorse spese per il processo di training dell'immagine AutoML specificando timeout_minutes
max_trials
e per max_concurrent_trials
il processo nelle impostazioni di limite. Fare riferimento a una descrizione dettagliata sui parametri dei limiti dei processi.
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 per lo sweep degli iperparametri per ogni architettura yolov5
definita e fasterrcnn_resnet50_fpn
. Nello spazio di ricerca specificare l'intervallo di valori per learning_rate
, optimizer
, lr_scheduler
e così via per AutoML tra cui 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 di parametri usando il random
sampling_algorithm. I limiti dei processi configurati in precedenza indicano al Machine Learning automatizzato di provare un totale di 10 prove con questi diversi esempi, eseguendo due versioni di valutazione alla volta nella destinazione di calcolo, configurata usando quattro nodi. Maggiore è il numero di parametri disponibili nello spazio di ricerca, maggiore è il numero di versioni di valutazione necessarie per trovare modelli ottimali.
Viene usato anche il criterio di terminazione anticipata bandito. Questo criterio termina le prove con prestazioni scarse; ovvero quelle versioni di valutazione che non rientrano nel 20% del margine di valutazione con prestazioni migliori, che consente di risparmiare in modo significativo le 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 lo spazio di ricerca e le impostazioni di sweep, è possibile inviare il processo per eseguire il training di un modello di immagine usando 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 AutoML, eseguire il comando dell'interfaccia della riga di comando v2 seguente con il percorso del file con estensione yml, del nome dell'area di lavoro, del gruppo di risorse e dell'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 sweep di iperparametri, può essere utile visualizzare le diverse versioni di prova provate usando l'interfaccia utente di HyperDrive. È possibile passare a questa interfaccia utente passando alla scheda "Processi figlio" nell'interfaccia utente del automl_image_job principale dall'alto, ovvero il processo padre di HyperDrive. È quindi possibile passare alla scheda "Processi figlio" di questa.
In alternativa, di seguito è possibile visualizzare direttamente il processo padre di HyperDrive e passare alla relativa scheda "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 versione di valutazione migliore (configurazione che ha generato la metrica primaria migliore). È possibile registrare il modello dopo il download o specificando il percorso con l'oggetto azureml
corrispondente jobid
.
Ottenere la versione di valutazione 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 azureml
percorso o il percorso scaricato localmente.
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'elemento MLClient
creato in precedenza, verrà 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 continua.
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 in volumi elevati di dati in un 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
Una distribuzione è un set di risorse necessarie per ospitare il modello che esegue l'inferenza effettiva. Viene creata una distribuzione per l'endpoint usando la ManagedOnlineDeployment
classe . È possibile usare SKU gpu o CPU per il cluster di distribuzione.
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 il 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 durante la creazione della distribuzione.
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 il traffico 0%. è possibile impostare la percentuale di traffico che dovrebbe 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 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]
Test della distribuzione
SI APPLICA A:Estensione dell'interfaccia della riga di comando di Azure v2 (corrente)
CLI example not available, please use Python SDK.
Visualizzare i rilevamenti
Dopo aver ottenuto il punteggio di un'immagine di test, è possibile visualizzare le caselle di selezione per questa immagine. A tale scopo, assicurarsi di avere installato matplotlib.
SI APPLICA A:Estensione dell'interfaccia della riga di comando di Azure v2 (corrente)
CLI example not available, please use Python SDK.
Pulire le risorse
Non completare questa sezione se si prevede di eseguire altre esercitazioni di Azure Machine Learning.
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. Selezionare 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
- Valori di iperparametri specificati per il modello
- Esecuzione di uno spazzamento di iperparametri
- Distribuzione del modello
- Rilevamenti visualizzati
Altre informazioni sulla visione artificiale in Machine Learning 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 dell'interfaccia della riga di comando di Azure v2 (corrente)
- Esaminare esempi di codice dettagliati e casi d'uso nel repository azureml-example per esempi di Machine Learning automatizzati. Controllare le cartelle con prefisso "cli-automl-image-" per esempi specifici per la creazione di modelli di visione artificiale.
Nota
L'uso del set di dati degli oggetti frigorifero è disponibile tramite la licenza con la licenza MIT.