Zelfstudie: Een objectdetectiemodel trainen met AutoML en Python
VAN TOEPASSING OP:Azure CLI ml-extensie v2 (huidig)Python SDK azure-ai-ml v2 (huidig)
In deze zelfstudie leert u hoe u een objectdetectiemodel traint met behulp van geautomatiseerde ML van Azure Machine Learning met de Azure Machine Learning CLI-extensie v2 of de Azure Machine Learning Python SDK v2. Dit objectdetectiemodel geeft aan of de afbeelding objecten bevat, zoals een blik, karton, melkfles of waterfles.
Geautomatiseerde ML accepteert trainingsgegevens en configuratie-instellingen en itereert automatisch combinaties van verschillende methoden voor normalisatie/standaardisatie van functies, modellen en hyperparameters om tot het beste model te komen.
In deze zelfstudie schrijft u code met behulp van de Python SDK en leert u de volgende taken:
- Gegevens downloaden en transformeren
- Een geautomatiseerd machine learning-objectdetectiemodel trainen
- Hyperparameterwaarden opgeven voor uw model
- Een hyperparameter-sweep uitvoeren
- Uw model implementeren
- Detecties visualiseren
Vereisten
-
Als u Azure Machine Learning wilt gebruiken, hebt u eerst een werkruimte nodig. Als u er nog geen hebt, voltooit u Resources maken die u nodig hebt om aan de slag te gaan met het maken van een werkruimte en meer informatie over het gebruik ervan.
Python 3.6 of 3.7 worden ondersteund voor deze functie
Download hetodFridgeObjects.zipgegevensbestand en pak het * uit. De gegevensset is voorzien van aantekeningen in Pascal VOC-indeling, waarbij elke afbeelding overeenkomt met een XML-bestand. Elk XML-bestand bevat informatie over waar het bijbehorende afbeeldingsbestand zich bevindt en bevat ook informatie over de begrenzingsvakken en de objectlabels. Als u deze gegevens wilt gebruiken, moet u deze eerst converteren naar de vereiste JSONL-indeling, zoals wordt weergegeven in de sectie De gedownloade gegevens converteren naar JSONL van het notebook.
Gebruik een rekenproces om deze zelfstudie te volgen zonder verdere installatie. (Bekijk hoe u een rekenproces maakt.) Of installeer de CLI/SDK om uw eigen lokale omgeving te gebruiken.
VAN TOEPASSING OP:Azure CLI ml-extensie v2 (huidig)
Deze zelfstudie is ook beschikbaar in de opslagplaats azureml-examples op GitHub. Als u deze wilt uitvoeren in uw eigen lokale omgeving:
- Installeer en stel CLI (v2) in en zorg ervoor dat u de
ml
extensie installeert.
- Installeer en stel CLI (v2) in en zorg ervoor dat u de
Instellen van rekendoel
Notitie
Als u serverloze berekeningen (preview) wilt proberen, slaat u deze stap over en gaat u verder met het instellen van het experiment.
U moet eerst een rekendoel instellen voor gebruik voor uw geautomatiseerde ML-modeltraining. Geautomatiseerde ML-modellen voor afbeeldingstaken vereisen GPU-SKU's.
In deze zelfstudie wordt gebruikgemaakt van de NCsv3-serie (met V100-GPU's) omdat dit type rekendoel meerdere GPU's gebruikt om de training te versnellen. Daarnaast kunt u meerdere knooppunten instellen om te profiteren van parallelle uitvoering bij het afstemmen van hyperparameters voor uw model.
Met de volgende code maakt u een GPU-berekening van grootte Standard_NC24s_v3
met vier knooppunten.
VAN TOEPASSING OP:Azure CLI ml-extensie v2 (huidig)
Maak een .yml-bestand met de volgende configuratie.
$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
Als u de berekening wilt maken, voert u de volgende CLI v2-opdracht uit met het pad naar uw .yml-bestand, werkruimtenaam, resourcegroep en abonnements-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]
Experiment instellen
U kunt een experiment gebruiken om uw modeltrainingstaken bij te houden.
VAN TOEPASSING OP:Azure CLI ml-extensie v2 (huidig)
De naam van het experiment kan als volgt worden opgegeven met behulp van experiment_name
de sleutel:
experiment_name: dpv2-cli-automl-image-object-detection-experiment
Invoergegevens visualiseren
Zodra u de invoerafbeeldingsgegevens hebt voorbereid in JSONL-indeling (JSONL-lijnen ), kunt u de begrenzingsvakken voor de grondwaarheid voor een afbeelding visualiseren. Zorg ervoor dat u dit hebt matplotlib
geïnstalleerd.
%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))
Met behulp van de bovenstaande helperfuncties kunt u voor elke afbeelding de volgende code uitvoeren om de begrenzingsvakken weer te geven.
image_file = "./odFridgeObjects/images/31.jpg"
jsonl_file = "./odFridgeObjects/train_annotations.jsonl"
plot_ground_truth_boxes_jsonl(image_file, jsonl_file)
Gegevens uploaden en MLTable maken
Als u de gegevens voor training wilt gebruiken, uploadt u gegevens naar de standaard blobopslag van uw Azure Machine Learning-werkruimte en registreert u deze als een asset. De voordelen van het registreren van gegevens zijn:
- Eenvoudig te delen met andere leden van het team
- Versiebeheer van de metagegevens (locatie, beschrijving, enzovoort)
- Herkomst bijhouden
VAN TOEPASSING OP:Azure CLI ml-extensie v2 (huidig)
Maak een .yml-bestand met de volgende configuratie.
$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
Als u de afbeeldingen wilt uploaden als een gegevensasset, voert u de volgende CLI v2-opdracht uit met het pad naar uw .yml-bestand, werkruimtenaam, resourcegroep en abonnements-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]
De volgende stap is het maken MLTable
van uw gegevens in jsonl-indeling, zoals hieronder wordt weergegeven. MLtable verpakt uw gegevens in een verbruiksobject voor 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
VAN TOEPASSING OP:Azure CLI ml-extensie v2 (huidig)
Met de volgende configuratie worden training- en validatiegegevens gemaakt uit de MLTable.
target_column_name: label
training_data:
path: data/training-mltable-folder
type: mltable
validation_data:
path: data/validation-mltable-folder
type: mltable
Uw objectdetectieexperiment configureren
Als u geautomatiseerde ML-taken wilt configureren voor afbeeldingsgerelateerde taken, maakt u een taakspecifieke AutoML-taak.
VAN TOEPASSING OP:Azure CLI ml-extensie v2 (huidig)
Als u serverloze rekenkracht (preview) wilt gebruiken, vervangt u de regel
compute: azureml:gpu-cluster
door deze code:resources: instance_type: Standard_NC24s_v3 instance_count: 4
task: image_object_detection
primary_metric: mean_average_precision
compute: azureml:gpu-cluster
Automatisch opruimen van hyperparameters voor afbeeldingstaken (AutoMode)
Belangrijk
Deze functie is momenteel beschikbaar als openbare preview-versie. Deze preview-versie wordt geleverd zonder serviceovereenkomst. Misschien worden bepaalde functies niet ondersteund of zijn de mogelijkheden ervan beperkt. Zie Supplemental Terms of Use for Microsoft Azure Previews (Aanvullende gebruiksvoorwaarden voor Microsoft Azure-previews) voor meer informatie.
In uw AutoML-taak kunt u een automatische hyperparameter-sweep uitvoeren om het optimale model te vinden (we noemen deze functionaliteit AutoMode). U geeft alleen het aantal proefversies op; de zoekruimte voor hyperparameters, de steekproefmethode en het beleid voor vroegtijdige beëindiging zijn niet nodig. Het systeem bepaalt automatisch de regio van de hyperparameterruimte die moet worden geveegd op basis van het aantal experimenten. Een waarde tussen 10 en 20 werkt waarschijnlijk goed voor veel gegevenssets.
VAN TOEPASSING OP:Azure CLI ml-extensie v2 (huidig)
limits:
max_trials: 10
max_concurrent_trials: 2
Vervolgens kunt u de taak verzenden om een afbeeldingsmodel te trainen.
VAN TOEPASSING OP:Azure CLI ml-extensie v2 (huidig)
Als u uw AutoML-taak wilt verzenden, voert u de volgende CLI v2-opdracht uit met het pad naar uw .yml-bestand, werkruimtenaam, resourcegroep en abonnements-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]
Handmatige hyperparameter opruimen voor afbeeldingstaken
In uw AutoML-taak kunt u de modelarchitecturen opgeven met behulp van model_name
parameter en de instellingen configureren om een hyperparameter-sweep uit te voeren over een gedefinieerde zoekruimte om het optimale model te vinden.
In dit voorbeeld trainen we een objectdetectiemodel met yolov5
en fasterrcnn_resnet50_fpn
, die beide vooraf zijn getraind op COCO, een grootschalige gegevensset voor objectdetectie, segmentatie en bijschriften die meer dan duizenden gelabelde afbeeldingen met meer dan 80 labelcategorieën bevat.
U kunt een hyperparameter-sweep uitvoeren over een gedefinieerde zoekruimte om het optimale model te vinden.
Taaklimieten
U kunt de resources beheren die zijn besteed aan de trainingstaak voor autoML-installatiekopieën door de timeout_minutes
, max_trials
en de max_concurrent_trials
voor de taak op te geven in de limietinstellingen. Raadpleeg de gedetailleerde beschrijving voor parameters voor taaklimieten.
VAN TOEPASSING OP:Azure CLI ml-extensie v2 (huidig)
limits:
timeout_minutes: 60
max_trials: 10
max_concurrent_trials: 2
De volgende code definieert de zoekruimte ter voorbereiding op de hyperparameter-sweep voor elke gedefinieerde architectuur, yolov5
en fasterrcnn_resnet50_fpn
. Geef in de zoekruimte het waardenbereik voor learning_rate
, optimizer
, , lr_scheduler
enzovoort op waaruit AutoML moet kiezen wanneer wordt geprobeerd een model te genereren met de optimale primaire metrische gegevens. Als er geen hyperparameterwaarden worden opgegeven, worden standaardwaarden gebruikt voor elke architectuur.
Gebruik voor de afstemmingsinstellingen willekeurige steekproeven om voorbeelden uit deze parameterruimte te kiezen met behulp van de random
sampling_algorithm. De taaklimieten die hierboven zijn geconfigureerd, vertellen geautomatiseerde ML om in totaal 10 proefversies uit te proberen met deze verschillende voorbeelden, waarbij twee proefversies tegelijk worden uitgevoerd op ons rekendoel, dat is ingesteld met behulp van vier knooppunten. Hoe meer parameters de zoekruimte heeft, hoe meer proefversies u nodig hebt om optimale modellen te vinden.
Het bandit-beleid voor vroegtijdige beëindiging wordt ook gebruikt. Dit beleid beëindigt slecht presterende experimenten; dat wil gezegd, de proefversies die niet binnen de 20% marge van de best presterende proefversie vallen, waardoor rekenresources aanzienlijk worden bespaard.
VAN TOEPASSING OP:Azure CLI ml-extensie v2 (huidig)
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]
Zodra de instellingen voor zoekruimte en opruimen zijn gedefinieerd, kunt u de taak verzenden om een afbeeldingsmodel te trainen met behulp van uw trainingsgegevensset.
VAN TOEPASSING OP:Azure CLI ml-extensie v2 (huidig)
Als u uw AutoML-taak wilt verzenden, voert u de volgende CLI v2-opdracht uit met het pad naar uw .yml-bestand, werkruimtenaam, resourcegroep en abonnements-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]
Wanneer u een hyperparameter-sweep uitvoert, kan het handig zijn om de verschillende proefversies te visualiseren die zijn geprobeerd met behulp van de HyperDrive-gebruikersinterface. U kunt naar deze gebruikersinterface navigeren door naar het tabblad Onderliggende taken te gaan in de gebruikersinterface van de hoofd-automl_image_job hierboven. Dit is de bovenliggende HyperDrive-taak. Vervolgens kunt u naar het tabblad 'Onderliggende taken' van dit tabblad gaan.
Hieronder kunt u ook rechtstreeks de bovenliggende HyperDrive-taak zien en naar het tabblad Onderliggende taken navigeren:
VAN TOEPASSING OP:Azure CLI ml-extensie v2 (huidig)
CLI example not available, please use Python SDK.
Model registreren en implementeren
Zodra de taak is voltooid, kunt u het model registreren dat is gemaakt op basis van de beste proefversie (configuratie die heeft geresulteerd in de beste primaire metrische waarde). U kunt het model registreren na het downloaden of door het pad op te geven met het azureml
bijbehorende jobid
.
De beste proefversie downloaden
VAN TOEPASSING OP:Azure CLI ml-extensie v2 (huidig)
CLI example not available, please use Python SDK.
Het model registreren
Registreer het model met behulp van het azureml
pad of het lokaal gedownloade pad.
VAN TOEPASSING OP:Azure CLI ml-extensie v2 (huidig)
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]
Nadat u het model hebt geregistreerd dat u wilt gebruiken, kunt u het implementeren met behulp van het beheerde online-eindpunt deploy-managed-online-eindpunt
Online-eindpunt configureren
VAN TOEPASSING OP:Azure CLI ml-extensie v2 (huidig)
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
name: od-fridge-items-endpoint
auth_mode: key
Het eindpunt maken
Met behulp van de MLClient
die u eerder hebt gemaakt, maken we nu het eindpunt in de werkruimte. Met deze opdracht start u het maken van het eindpunt en retourneert u een bevestigingsantwoord terwijl het eindpunt wordt gemaakt.
VAN TOEPASSING OP:Azure CLI ml-extensie v2 (huidig)
az ml online-endpoint create --file .\create_endpoint.yml --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]
We kunnen ook een batch-eindpunt maken voor batchdeductie van grote hoeveelheden gegevens gedurende een bepaalde periode. Bekijk het notebook voor batchscore voor objectdetectie voor batchdeductie met behulp van het batch-eindpunt.
Online-implementatie configureren
Een implementatie is een set resources die vereist zijn voor het hosten van het model dat de daadwerkelijke deductie uitvoert. We maken een implementatie voor ons eindpunt met behulp van de ManagedOnlineDeployment
klasse . U kunt GPU- of CPU-VM-SKU's gebruiken voor uw implementatiecluster.
VAN TOEPASSING OP:Azure CLI ml-extensie v2 (huidig)
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
De implementatie maken
Met behulp van de MLClient
die u eerder hebt gemaakt, maken we de implementatie in de werkruimte. Met deze opdracht start u het maken van de implementatie en retourneert u een bevestigingsantwoord terwijl het maken van de implementatie wordt voortgezet.
VAN TOEPASSING OP:Azure CLI ml-extensie v2 (huidig)
az ml online-deployment create --file .\create_deployment.yml --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]
Verkeer bijwerken:
De huidige implementatie is standaard ingesteld op het ontvangen van 0% verkeer. u kunt het verkeerspercentage instellen dat de huidige implementatie moet ontvangen. De som van de verkeerspercentages van alle implementaties met één eindpunt mag niet hoger zijn dan 100%.
VAN TOEPASSING OP:Azure CLI ml-extensie v2 (huidig)
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]
De implementatie testen
VAN TOEPASSING OP:Azure CLI ml-extensie v2 (huidig)
CLI example not available, please use Python SDK.
Detecties visualiseren
Nu u een testafbeelding hebt gescoord, kunt u de begrenzingsvakken voor deze afbeelding visualiseren. Zorg ervoor dat u matplotlib hebt geïnstalleerd om dit te doen.
VAN TOEPASSING OP:Azure CLI ml-extensie v2 (huidig)
CLI example not available, please use Python SDK.
Resources opschonen
Voltooi deze sectie niet als u van plan bent andere Zelfstudies voor Azure Machine Learning uit te voeren.
Als u niet van plan bent om gebruik te maken van de resources die u hebt gemaakt, kunt u ze verwijderen zodat er geen kosten voor in rekening worden gebracht.
- Selecteer Resourcegroepen links in Azure Portal.
- Selecteer de resourcegroep die u eerder hebt gemaakt uit de lijst.
- Selecteer Resourcegroep verwijderen.
- Voer de naam van de resourcegroup in. Selecteer vervolgens Verwijderen.
U kunt de resourcegroep ook bewaren en slechts één werkruimte verwijderen. Bekijk de eigenschappen van de werkruimte en selecteer Verwijderen.
Volgende stappen
In deze zelfstudie over geautomatiseerde machine learning hebt u het volgende gedaan:
- U hebt een werkruimte geconfigureerd en gegevens voorbereid voor een experiment.
- Een geautomatiseerd objectdetectiemodel getraind
- Opgegeven hyperparameterwaarden voor uw model
- Een hyperparameter-sweep uitgevoerd
- Uw model geïmplementeerd
- Gevisualiseerde detecties
Meer informatie over Computer Vision in geautomatiseerde ML.
Meer informatie over het instellen van AutoML om Computer Vision-modellen te trainen met Python.
Meer informatie over het configureren van incrementele training voor Computer Vision-modellen.
Bekijk welke hyperparameters beschikbaar zijn voor Computer Vision-taken.
Codevoorbeelden:
VAN TOEPASSING OP:Azure CLI ml-extensie v2 (huidig)
- Bekijk gedetailleerde codevoorbeelden en gebruiksvoorbeelden in de opslagplaats azureml-examples voor voorbeelden van geautomatiseerde machine learning. Controleer de mappen met het voorvoegsel cli-automl-image-voor voorbeelden die specifiek zijn voor het bouwen van Computer Vision-modellen.
Notitie
Het gebruik van de gegevensset koelkastobjecten is beschikbaar via de licentie onder de MIT-licentie.