Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
VAN TOEPASSING OP:
Azure CLI ml extension v2 (current)
Python SDK azure-ai-ml v2 (current)
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 identificeert of een afbeelding objecten bevat, zoals een blik, karton, melkfles of waterfles.
Geautomatiseerde ML accepteert trainingsgegevens en configuratie-instellingen en doorloopt automatisch combinaties van verschillende functienormalisatie-/standaardisatiemethoden, modellen en hyperparameterinstellingen om het beste model te bereiken.
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 opruimen
- Uw model implementeren
- Detecties visualiseren
Vereisten
-
Als u Azure Machine Learning wilt gebruiken, hebt u 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.
Belangrijk
Als uw Azure Machine Learning-werkruimte is geconfigureerd met een beheerd virtueel netwerk, moet u mogelijk uitgaande regels toevoegen om toegang tot de openbare Python-pakketopslagplaatsen toe te staan. Zie Scenario: Toegang tot openbare machine learning-pakketten voor meer informatie.
Gebruik Python 3.10 of hoger.
Download en pak het odFridgeObjects.zip gegevensbestand uit. De gegevensset wordt geannoteerd 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 Gedownloade gegevens converteren naar JSONL van het notebook automl-image-object-detection-task-fridge-items.ipynb.
Gebruik een rekeninstance om deze handleiding te voltooien zonder verdere installatie. (Zie Een rekenproces maken.) Of installeer de CLI of SDK om uw eigen lokale omgeving te gebruiken.
VAN TOEPASSING OP:
Azure CLI ml-extensie v2 (huidige)Deze zelfstudie is ook beschikbaar in de opslagplaats azureml-examples op GitHub. Als u deze wilt uitvoeren in uw lokale omgeving, installeert en stelt u CLI (v2) in en zorgt u ervoor dat u de
mlextensie installeert.
Configuratie van rekendoel
Notitie
Als u serverloze berekeningen wilt proberen, slaat u deze stap over en gaat u naar Experiment instellen.
U moet eerst een rekendoel instellen dat moet worden gebruikt voor uw geautomatiseerde ML-modeltraining. Voor geautomatiseerde ML-modellen voor afbeeldingstaken zijn GPU-SKU's vereist.
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 (huidige)
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 (huidige)
U kunt de naam van het experiment opgeven met behulp van de experiment_name sleutel:
experiment_name: dpv2-cli-automl-image-object-detection-experiment
Invoergegevens visualiseren
Nadat u de invoerafbeeldingsgegevens hebt voorbereid in JSONL-indeling (JSON-regels), kunt u de grondwaarheid begrenzingsvakken voor een afbeelding visualiseren. Als u dit wilt doen, moet u ervoor zorgen dat u deze 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 voorgaande 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 een MLTable maken
Als u gegevens wilt gebruiken voor training, uploadt u deze naar de standaardblobopslag 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).
- Het volgen van stamboom.
VAN TOEPASSING OP:
Azure CLI ml-extensie v2 (huidige)
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, naam van de werkruimte, resourcegroep en abonnement-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 bestaat uit het maken van een MLTable op basis van uw gegevens in JSONL-indeling, zoals wordt weergegeven in het volgende voorbeeld. Een 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 (huidige)
Met de volgende configuratie worden trainings- 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-banen wilt configureren voor beeldtaken, maakt u een taakspecifieke AutoML-baan.
VAN TOEPASSING OP:
Azure CLI ml-extensie v2 (huidige)
Notitie
Als u serverloze berekeningen 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 opschonen van hyperparameters voor afbeeldingstaken (AutoMode)
In uw AutoML-taak kunt u een automatische hyperparameter-sweep uitvoeren om het optimale model te vinden. (Deze functionaliteit wordt AutoMode genoemd). U geeft alleen het aantal proefversies op. Het hyperparameterzoekruimte, de samplingmethode 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 (huidige)
limits:
max_trials: 10
max_concurrent_trials: 2
Vervolgens kunt u de taak indienen om een afbeeldingsmodel te trainen.
VAN TOEPASSING OP:
Azure CLI ml-extensie v2 (huidige)
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 de model_name parameter en de instellingen configureren om een hyperparameter-sweep uit te voeren op een gedefinieerde zoekruimte om het optimale model te vinden.
In dit voorbeeld traint u een objectdetectiemodel met YOLOv5 en FasterRCNN ResNet50 FPN, die beide vooraf zijn getraind op COCO, een grootschalige objectdetectie, segmentatie en bijschriftgegevensset met duizenden gelabelde afbeeldingen met meer dan 80 labelcategorieën.
U kunt een hyperparameter-sweep uitvoeren op een gedefinieerde zoekruimte om het optimale model te vinden.
Taaklimieten
U kunt de resources beheren die zijn besteed aan uw AutoML afbeeldingstrainingstaak door de timeout_minutes, max_trials, en max_concurrent_trials voor de taak in de limietinstellingen op te geven. Zie de beschrijving van parameters voor taaklimieten voor meer informatie.
VAN TOEPASSING OP:
Azure CLI ml-extensie v2 (huidige)
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 bereik van waarden op voorlearning_rate, optimizerlr_schedulerenzovoort, zodat AutoML kan kiezen wanneer wordt geprobeerd een model te genereren met de optimale primaire metriek. Als hyperparameterwaarden niet zijn opgegeven, worden standaardwaarden gebruikt voor elke architectuur.
Voor de afstemmingsinstellingen gebruikt u willekeurige steekproeven om steekproeven uit deze parameterruimte te kiezen met behulp van het random sampling-algoritme. De taaklimieten die in de voorgaande code zijn opgegeven, configureren geautomatiseerde ML om in totaal 10 experimenten uit te proberen met deze verschillende voorbeelden, waarbij twee proefversies tegelijk worden uitgevoerd op het rekendoel, dat is ingesteld met vier knooppunten. Hoe meer parameters de zoekruimte heeft, hoe meer experimenten u nodig hebt om optimale modellen te vinden.
Het beleid voor vroegtijdige beëindiging van Bandit wordt ook gebruikt. Dit beleid beëindigt slecht presterende proefversies. Dat wil zeggen, experimenten die niet binnen een marge van 20% van het best presterende experiment vallen. Met deze beëindiging worden rekenresources aanzienlijk bespaard.
VAN TOEPASSING OP:
Azure CLI ml-extensie v2 (huidige)
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]
Nadat u de zoekruimte en sweep-instellingen hebt gedefinieerd, kunt u de job invoeren om een afbeeldingsmodel te trainen met behulp van uw trainingsdataset.
VAN TOEPASSING OP:
Azure CLI ml-extensie v2 (huidige)
Als u uw AutoML-taak wilt verzenden, voert u de volgende CLI v2-opdracht uit met het pad naar uw .yml-bestand, de naam van de werkruimte, de resourcegroep en de 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 hyperparametersweep uitvoert, kan het handig zijn om de verschillende proeven te visualiseren die zijn uitgevoerd met behulp van de Hyperdrive-gebruikersinterface. U kunt deze gebruikersinterface openen door naar het tabblad Onderliggende taken te gaan in de gebruikersinterface van de hoofd-AutoML-afbeeldingstaak die eerder in het proces verschijnt, wat de Hyperdrive-hoofdtaak is. U kunt vervolgens naar het tabblad Onderliggende taken van deze taak gaan.
U kunt hier ook rechtstreeks de bovenliggende Hyperdrive-taak zien en naar het tabblad Onderliggende taken navigeren:
VAN TOEPASSING OP:
Azure CLI ml-extensie v2 (huidige)
CLI example not available. Use the the Python SDK.
Het model registreren en implementeren
Nadat de taak is voltooid, kunt u het model registreren dat is gemaakt op basis van de beste proefversie (de configuratie die heeft geresulteerd in de beste primaire metriek). U kunt het model registreren nadat u het hebt gedownload of door het azureml-pad op te geven samen met een corresponderend jobid-pad.
Krijg de beste proefversie
VAN TOEPASSING OP:
Azure CLI ml-extensie v2 (huidige)
CLI example not available. Use the Python SDK.
Het model registreren
Registreer het model door gebruik te maken van het azureml pad of het lokaal gedownloade pad.
VAN TOEPASSING OP:
Azure CLI ml-extensie v2 (huidige)
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.
Online-eindpunt configureren
VAN TOEPASSING OP:
Azure CLI ml-extensie v2 (huidige)
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
name: od-fridge-items-endpoint
auth_mode: key
Het eindpunt maken
Met behulp van het eerder aangemaakte MLClient zult u nu het eindpunt in de werkruimte maken. Met deze opdracht wordt het maken van het eindpunt gestart en wordt een bevestigingsantwoord geretourneerd terwijl het maken van het eindpunt wordt voortgezet.
VAN TOEPASSING OP:
Azure CLI ml-extensie v2 (huidige)
az ml online-endpoint create --file .\create_endpoint.yml --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]
U kunt ook een batch-eindpunt maken voor batchdeductie op grote hoeveelheden gegevens gedurende een bepaalde periode. Zie het notebook voor batchgewijs scoren voor objectdetectie voor een voorbeeld van batchdeductie met behulp van het batch-eindpunt.
Online-implementatie configureren
Een implementatie is een set resources die vereist is voor het hosten van het model dat de werkelijke deductie uitvoert. Met de volgende code wordt een implementatie voor het eindpunt gemaakt. U kunt GPU- of CPU-VM-SKU's gebruiken voor uw implementatiecluster.
VAN TOEPASSING OP:
Azure CLI ml-extensie v2 (huidige)
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 eerder gemaakte MLClient maakt u de implementatie in de werkruimte. Met deze opdracht wordt het maken van de implementatie gestart en wordt een bevestigingsantwoord geretourneerd terwijl het maken van de implementatie wordt voortgezet.
VAN TOEPASSING OP:
Azure CLI ml-extensie v2 (huidige)
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 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 groter zijn dan 100%.
VAN TOEPASSING OP:
Azure CLI ml-extensie v2 (huidige)
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 (huidige)
CLI example not available. Use the Python SDK.
Detecties visualiseren
Nu u een testafbeelding hebt geëvalueerd, kunt u de begrenzingskaders voor de afbeelding visualiseren. Hiervoor moet Matplotlib zijn geïnstalleerd.
VAN TOEPASSING OP:
Azure CLI ml-extensie v2 (huidige)
CLI example not available. Use the Python SDK.
Resources opschonen
Voltooi deze sectie niet als u van plan bent om andere Azure Machine Learning-zelfstudies te voltooien.
Als u niet van plan bent om de resources te gebruiken die u hebt gemaakt, verwijdert u deze zodat er geen kosten in rekening worden gebracht.
- Selecteer resourcegroepen in het linkerdeelvenster in Azure Portal.
- Selecteer in de lijst met resourcegroepen de resourcegroep die u hebt gemaakt.
- Selecteer Resourcegroep verwijderen.
- Voer de naam van de resourcegroup in. Selecteer daarna Verwijderen.
U kunt de resourcegroep ook bewaren en slechts één werkruimte verwijderen. Ga naar de werkruimtepagina en selecteer Vervolgens Verwijderen.
Volgende stappen
In deze zelfstudie over geautomatiseerde machine learning hebt u de volgende taken voltooid:
- De werkruimte geconfigureerd en gegevens voorbereid voor een experiment.
- Een geautomatiseerd objectdetectiemodel getraind
- Opgegeven hyperparameterwaarden voor uw model
- Een hyperparameter opruimen uitgevoerd
- Uw model geïmplementeerd
- Gevisualiseerde detecties
Meer informatie over computer vision in geautomatiseerde ML.
Meer informatie over het configureren van incrementele training op Computer Vision-modellen.
Bekijk welke hyperparameters beschikbaar zijn voor Computer Vision-taken.
Codevoorbeelden weergeven:
VAN TOEPASSING OP:
Azure CLI ml-extensie v2 (huidige)- Bekijk gedetailleerde codevoorbeelden en gebruiksvoorbeelden in de opslagplaats met azureml-voorbeelden voor geautomatiseerde machine learning-voorbeelden. Bekijk de mappen met het cli-automl-image-voorvoegsel voor voorbeelden die specifiek zijn voor het maken van Computer Vision-modellen.
Notitie
Het gebruik van de gegevensset met koelkastobjecten is beschikbaar via de licentie onder de MIT-licentie.