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.
Si scriverà codice usando Python SDK in questa esercitazione e si apprenderà 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 sfrutta 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 spazzamento automatico dell'iperparametro per trovare il modello ottimale (chiamiamo questa funzionalità AutoMode). Si specifica solo il numero di versioni di valutazione; lo spazio di ricerca dell'iperparametro, il metodo di campionamento e i criteri di terminazione anticipata non sono necessari. Il sistema determina automaticamente l'area dello spazio iperparametro 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 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 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, nome dell'area di lavoro, gruppo di risorse e 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]
Scorrimento 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 spazio di ricerca definito 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 pre-sottoposti a training su 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 in impostazioni di limite. Fare riferimento alla descrizione dettagliata dei parametri Dei limiti del processo.
SI APPLICA A:Estensione 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 dell'iperparametro 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 da scegliere quando tenta di generare un modello con la metrica primaria ottimale. Se i valori di iperparametri non vengono specificati, i valori predefiniti vengono usati per ogni architettura.
Per le impostazioni di ottimizzazione, usare il campionamento casuale per selezionare esempi da questo spazio dei parametri usando la random
sampling_algorithm. I limiti del processo configurati in precedenza indicano a Machine Learning automatizzato di provare un totale di 10 prove con questi diversi esempi, eseguendo due prove alla volta sulla destinazione di calcolo, che è stata configurata usando quattro nodi. Più parametri lo spazio di ricerca ha, più prove è necessario trovare modelli ottimali.
Viene usato anche il criterio di terminazione anticipata di Bandit. Questo criterio termina le prove con prestazioni scarse; vale a dire, quelle prove che non si trovano all'interno del 20% della versione di valutazione con prestazioni ottimali, che salvano significativamente le risorse di calcolo.
SI APPLICA A:Estensione 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, è quindi possibile inviare il processo per eseguire il training di un modello di immagine usando il set di dati di training.
SI APPLICA A:Estensione 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, nome dell'area di lavoro, gruppo di risorse e 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 che sono state 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 da sopra, ovvero il processo padre Di HyperDrive. È quindi possibile passare alla scheda "Processi figlio" di questa.
In alternativa, qui di seguito è possibile visualizzare direttamente il processo padre di HyperDrive e passare alla scheda "Processi figlio":
SI APPLICA A:Estensione 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 azureml
percorso con il corrispondente jobid
.
Ottenere la versione di valutazione migliore
SI APPLICA A:Estensione 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 o il azureml
percorso scaricato in locale.
SI APPLICA A:Estensione 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 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 avvierà la creazione dell'endpoint e restituirà una risposta di conferma durante la creazione dell'endpoint.
SI APPLICA A:Estensione 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 periodo di tempo. Vedere il notebook di assegnazione dei punteggi batch di rilevamento degli 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. Verrà 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 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 la MLClient
versione precedente creata, verrà ora creata la distribuzione nell'area di lavoro. Questo comando avvierà la creazione della distribuzione e restituirà una risposta di conferma durante la creazione della distribuzione.
SI APPLICA A:Estensione 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 del 0%. è possibile impostare la percentuale di traffico che deve ricevere la distribuzione corrente. La somma delle percentuali di traffico di tutte le distribuzioni con un punto finale 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
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. 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.