Kurz: Trénování modelu rozpoznávání objektů pomocí AutoML a Pythonu
PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)Python SDK azure-ai-ml v2 (aktuální)
V tomto kurzu se naučíte trénovat model rozpoznávání objektů pomocí automatizovaného strojového učení Azure Machine Learning s rozšířením Azure Machine Learning CLI v2 nebo sadou Azure Machine Learning Python SDK v2. Tento model rozpoznávání objektů identifikuje, jestli obrázek obsahuje objekty, jako je plechovky, krabička, láhev mléka nebo láhev vody.
Automatizované strojové učení přijímá trénovací data a nastavení konfigurace a automaticky iteruje kombinací různých metod normalizace a standardizace funkcí, modelů a nastavení hyperparametrů, aby bylo dosaženo nejlepšího modelu.
V tomto kurzu napíšete kód pomocí sady Python SDK a naučíte se následující úlohy:
- Stažení a transformace dat
- Trénování modelu automatizovaného rozpoznávání objektů strojového učení
- Zadání hodnot hyperparametrů pro váš model
- Provedení úklidu hyperparametrů
- Nasazení modelu
- Vizualizace detekcí
Požadavky
-
Pokud chcete používat Azure Machine Learning, potřebujete pracovní prostor. Pokud ho nemáte, dokončete vytváření prostředků, které potřebujete, abyste mohli začít vytvářet pracovní prostor a získat další informace o jeho používání.
Důležité
Pokud je váš pracovní prostor Azure Machine Learning nakonfigurovaný se spravovanou virtuální sítí, možná budete muset přidat odchozí pravidla, která umožní přístup k veřejným úložištím balíčků Pythonu. Další informace najdete v tématu Scénář: Přístup k veřejným balíčkům strojového učení.
Pro tuto funkci se podporuje Python 3.9 nebo 3.10.
Stáhněte a rozbalte *datový soubor odFridgeObjects.zip. Datová sada je opatřena poznámkami ve formátu Pascal VOC, kde každý obrázek odpovídá souboru XML. Každý soubor XML obsahuje informace o tom, kde se nachází odpovídající soubor obrázku, a obsahuje také informace o ohraničujících polích a popiscích objektů. Abyste mohli tato data používat, musíte je nejprve převést na požadovaný formát JSONL, jak je vidět v části Převést stažená data do oddílu JSONL poznámkového bloku.
Pomocí výpočetní instance můžete postupovat podle tohoto kurzu bez další instalace. (Podívejte se, jak vytvořit výpočetní instanci.) Nebo nainstalujte rozhraní příkazového řádku nebo sadu SDK, abyste mohli používat vlastní místní prostředí.
PLATÍ PRO: Rozšíření Azure CLI ml v2 (aktuální)
Tento kurz je také k dispozici v úložišti azureml-examples na GitHubu. Pokud ho chcete spustit ve vlastním místním prostředí:
- Nainstalujte a nastavte rozhraní příkazového řádku (v2) a ujistěte se, že jste rozšíření nainstalovali
ml
.
- Nainstalujte a nastavte rozhraní příkazového řádku (v2) a ujistěte se, že jste rozšíření nainstalovali
Nastavení cílového výpočetního objektu
Poznámka:
Pokud chcete vyzkoušet bezserverové výpočetní prostředky (Preview), přeskočte tento krok a pokračujte nastavením experimentu.
Nejdřív musíte nastavit cílový výpočetní objekt, který se použije pro trénování automatizovaného modelu ML. Modely automatizovaného strojového učení pro úlohy imagí vyžadují skladové položky GPU.
V tomto kurzu se používá řada NCsv3 (s grafickými procesory V100), protože tento typ cílového výpočetního objektu používá k urychlení trénování více GPU. Kromě toho můžete nastavit více uzlů, abyste při ladění hyperparametrů pro váš model využili paralelismu.
Následující kód vytvoří výpočetní výkon Standard_NC24s_v3
GPU se čtyřmi uzly.
PLATÍ PRO: Rozšíření Azure CLI ml v2 (aktuální)
Vytvořte soubor .yml s následující konfigurací.
$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
Pokud chcete vytvořit výpočetní prostředky, spusťte následující příkaz CLI v2 s cestou k souboru .yml, názvu pracovního prostoru, skupině prostředků a ID předplatného.
az ml compute create -f [PATH_TO_YML_FILE] --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]
Nastavení experimentu
Experiment můžete použít ke sledování trénovacích úloh modelu.
PLATÍ PRO: Rozšíření Azure CLI ml v2 (aktuální)
Název experimentu je možné zadat následujícím způsobem experiment_name
:
experiment_name: dpv2-cli-automl-image-object-detection-experiment
Vizualizace vstupních dat
Jakmile máte vstupní data obrázků připravená ve formátu JSONL (řádky JSON), můžete vizualizovat rámečky ohraničující pravdu pro obrázek. Pokud to chcete udělat, ujistěte se, že jste nainstalovali 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))
Pomocí výše uvedených pomocných funkcí pro libovolný obrázek můžete spustit následující kód, který zobrazí ohraničující rámečky.
image_file = "./odFridgeObjects/images/31.jpg"
jsonl_file = "./odFridgeObjects/train_annotations.jsonl"
plot_ground_truth_boxes_jsonl(image_file, jsonl_file)
Nahrání dat a vytvoření tabulky MLTable
Pokud chcete data použít k trénování, nahrajte data do výchozího úložiště objektů blob pracovního prostoru Služby Azure Machine Learning a zaregistrujte je jako prostředek. Mezi výhody registrace dat patří:
- Snadné sdílení s ostatními členy týmu
- Správa verzí metadat (umístění, popis atd.)
- Sledování rodokmenu
PLATÍ PRO: Rozšíření Azure CLI ml v2 (aktuální)
Vytvořte soubor .yml s následující konfigurací.
$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
Pokud chcete nahrát obrázky jako datový prostředek, spusťte následující příkaz CLI v2 s cestou k souboru .yml, názvu pracovního prostoru, skupině prostředků a ID předplatného.
az ml data create -f [PATH_TO_YML_FILE] --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]
Dalším krokem je vytvoření MLTable
z dat ve formátu jsonl, jak je znázorněno níže. MLtable zabalí vaše data do spotřebního objektu pro trénování.
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
PLATÍ PRO: Rozšíření Azure CLI ml v2 (aktuální)
Následující konfigurace vytvoří trénovací a ověřovací data z tabulky MLTable.
target_column_name: label
training_data:
path: data/training-mltable-folder
type: mltable
validation_data:
path: data/validation-mltable-folder
type: mltable
Konfigurace experimentu detekce objektů
Pokud chcete nakonfigurovat automatizované úlohy ML pro úlohy související s imagemi, vytvořte úlohu specifickou pro AutoML.
PLATÍ PRO: Rozšíření Azure CLI ml v2 (aktuální)
Pokud chcete používat bezserverové výpočetní prostředky (Preview), nahraďte řádek
compute: azureml:gpu-cluster
tímto kódem:resources: instance_type: Standard_NC24s_v3 instance_count: 4
task: image_object_detection
primary_metric: mean_average_precision
compute: azureml:gpu-cluster
Automatické úklidy hyperparametrů pro úlohy obrázků (AutoMode)
Důležité
Tato funkce je v současné době ve verzi Public Preview. Tato verze Preview je poskytována bez smlouvy o úrovni služeb. Některé funkce se nemusí podporovat nebo mohou mít omezené možnosti. Další informace najdete v dodatečných podmínkách použití pro verze Preview v Microsoft Azure.
V úloze AutoML můžete provést automatické úklidy hyperparametrů, abyste našli optimální model (tuto funkci nazýváme AutoMode). Určíte pouze počet pokusů; Prostor pro vyhledávání hyperparametrů, metoda vzorkování a zásady předčasného ukončení nejsou potřeba. Systém automaticky určí oblast prostoru hyperparametrů, která se má uklidit na základě počtupokusůch Hodnota mezi 10 a 20 bude pravděpodobně dobře fungovat u mnoha datových sad.
PLATÍ PRO: Rozšíření Azure CLI ml v2 (aktuální)
limits:
max_trials: 10
max_concurrent_trials: 2
Pak můžete odeslat úlohu pro trénování modelu image.
PLATÍ PRO: Rozšíření Azure CLI ml v2 (aktuální)
Pokud chcete odeslat úlohu AutoML, spusťte následující příkaz CLI v2 s cestou k souboru .yml, názvu pracovního prostoru, skupině prostředků a ID předplatného.
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]
Ruční úklid hyperparametrů pro úlohy obrázků
V úloze AutoML můžete určit architektury modelu pomocí model_name
parametru a nakonfigurovat nastavení pro provedení úklidu hyperparametrů nad definovaným vyhledávacím prostorem, abyste našli optimální model.
V tomto příkladu vytrénujeme model detekce objektů s předem vytrénovaným modelem yolov5
fasterrcnn_resnet50_fpn
COCO, rozsáhlou detekcí objektů, segmentací a popiskem datové sady, která obsahuje více než tisíce obrázků s popisky s více než 80 kategoriemi popisků.
Pokud chcete najít optimální model, můžete provést úklid hyperparametrů nad definovaným vyhledávacím prostorem.
Limity úloh
Prostředky vynaložené na trénovací úlohu image AutoML můžete řídit zadáním timeout_minutes
max_trials
hodnoty a hodnoty úlohy v nastavení limitumax_concurrent_trials
. Projděte si podrobný popis parametrů limitů úloh.
PLATÍ PRO: Rozšíření Azure CLI ml v2 (aktuální)
limits:
timeout_minutes: 60
max_trials: 10
max_concurrent_trials: 2
Následující kód definuje vyhledávací prostor při přípravě na úklid hyperparametrů pro každou definovanou architekturu yolov5
a fasterrcnn_resnet50_fpn
. Do vyhledávacího prostoru zadejte rozsah hodnot pro learning_rate
, optimizer
lr_scheduler
, atd., pro AutoML zvolit, když se pokusí vygenerovat model s optimální primární metrikou. Pokud nejsou zadány hodnoty hyperparametrů, použijí se výchozí hodnoty pro každou architekturu.
Pro nastavení ladění pomocí náhodného vzorkování vyberte vzorky z tohoto prostoru parametrů pomocí random
sampling_algorithm. Limity úloh nakonfigurované výše říká automatizovanému strojovému učení, aby vyzkoušelo celkem 10 zkušebních verzí s těmito různými ukázkami a spustilo na našem cílovém výpočetním objektu dvě zkušební verze, které se nastavily pomocí čtyř uzlů. Čím více parametrů má vyhledávací prostor, tím více pokusů potřebujete k nalezení optimálních modelů.
Používá se také zásada předčasného ukončení banditu. Tato zásada ukončí neúspěšné pokusy o provedení; to znamená, že pokusy, které nejsou v rámci 20% časové rezervy nejlepší zkušební verze, což výrazně šetří výpočetní prostředky.
PLATÍ PRO: Rozšíření Azure CLI ml v2 (aktuální)
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]
Jakmile je definováno nastavení vyhledávacího prostoru a úklidu, můžete úlohu odeslat k trénování modelu obrázku pomocí trénovací datové sady.
PLATÍ PRO: Rozšíření Azure CLI ml v2 (aktuální)
Pokud chcete odeslat úlohu AutoML, spusťte následující příkaz CLI v2 s cestou k souboru .yml, názvu pracovního prostoru, skupině prostředků a ID předplatného.
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]
Při úklidu hyperparametrů může být užitečné vizualizovat různé zkušební verze, které se pokusily použít uživatelské rozhraní HyperDrivu. K tomuto uživatelskému rozhraní můžete přejít tak, že přejdete na kartu Podřízené úlohy v uživatelském rozhraní hlavního automl_image_job výše, což je nadřazená úloha HyperDrivu. Pak můžete přejít na kartu Podřízené úlohy této úlohy.
Případně níže vidíte přímo nadřazenou úlohu HyperDrivu a přejděte na její kartu Podřízené úlohy:
PLATÍ PRO: Rozšíření Azure CLI ml v2 (aktuální)
CLI example not available, please use Python SDK.
Registrace a nasazení modelu
Po dokončení úlohy můžete zaregistrovat model vytvořený z nejlepší zkušební verze (konfigurace, která způsobila nejlepší primární metriku). Model můžete zaregistrovat po stažení nebo zadáním azureml
cesty s odpovídajícím jobid
kódem .
Získání nejlepší zkušební verze
PLATÍ PRO: Rozšíření Azure CLI ml v2 (aktuální)
CLI example not available, please use Python SDK.
Registrace modelu
Zaregistrujte model buď pomocí azureml
cesty, nebo místně stažené cesty.
PLATÍ PRO: Rozšíření Azure CLI ml v2 (aktuální)
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]
Jakmile zaregistrujete model, který chcete použít, můžete ho nasadit pomocí spravovaného online koncového bodu deploy-managed-online-endpoint.
Konfigurace online koncového bodu
PLATÍ PRO: Rozšíření Azure CLI ml v2 (aktuální)
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
name: od-fridge-items-endpoint
auth_mode: key
Vytvoření koncového bodu
Pomocí dříve vytvořeného MLClient
koncového bodu teď vytvoříme v pracovním prostoru koncový bod. Tento příkaz spustí vytvoření koncového bodu a během vytváření koncového bodu vrátí potvrzovací odpověď.
PLATÍ PRO: Rozšíření Azure CLI ml v2 (aktuální)
az ml online-endpoint create --file .\create_endpoint.yml --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]
Můžeme také vytvořit dávkový koncový bod pro dávkové odvozování u velkých objemů dat v určitém časovém období. Projděte si poznámkový blok dávkového vyhodnocování objektů pro dávkové odvozování pomocí koncového bodu dávky.
Konfigurace online nasazení
Nasazení je sada prostředků vyžadovaných pro hostování modelu, který provádí skutečné odvozování. Pomocí třídy vytvoříme nasazení pro náš koncový bod ManagedOnlineDeployment
. Pro cluster nasazení můžete použít skladové položky virtuálních počítačů s gpu nebo procesorem.
PLATÍ PRO: Rozšíření Azure CLI ml v2 (aktuální)
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
Vytvoření nasazení
Pomocí dříve vytvořeného MLClient
prostředí vytvoříme nasazení v pracovním prostoru. Tento příkaz spustí vytvoření nasazení a během vytváření nasazení vrátí potvrzovací odpověď.
PLATÍ PRO: Rozšíření Azure CLI ml v2 (aktuální)
az ml online-deployment create --file .\create_deployment.yml --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]
Aktualizace provozu:
Ve výchozím nastavení je aktuální nasazení nastavené na příjem 0% provozu. Můžete nastavit procento provozu, které by mělo aktuální nasazení přijímat. Součet procent provozu všech nasazení s jedním koncovým bodem by neměl překročit 100 %.
PLATÍ PRO: Rozšíření Azure CLI ml v2 (aktuální)
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]
Otestování nasazení
PLATÍ PRO: Rozšíření Azure CLI ml v2 (aktuální)
CLI example not available, please use Python SDK.
Vizualizace detekcí
Teď, když jste získali skóre testovacího obrázku, můžete vizualizovat ohraničující rámečky pro tento obrázek. Pokud to chcete udělat, ujistěte se, že máte nainstalovanou matplotlib.
PLATÍ PRO: Rozšíření Azure CLI ml v2 (aktuální)
CLI example not available, please use Python SDK.
Vyčištění prostředků
Tuto část nedokončíte, pokud plánujete spustit další kurzy služby Azure Machine Learning.
Pokud nechcete používat prostředky, které jste vytvořili, odstraňte je, takže se vám nebudou účtovat žádné poplatky.
- Úplně nalevo na webu Azure Portal vyberte Skupiny prostředků.
- V seznamu vyberte skupinu prostředků, kterou jste vytvořili.
- Vyberte Odstranit skupinu prostředků.
- Zadejte název skupiny prostředků. Poté vyberte Odstranit.
Můžete také zachovat skupinu prostředků, ale odstranit jeden pracovní prostor. Zobrazte vlastnosti pracovního prostoru a vyberte Odstranit.
Další kroky
V tomto kurzu automatizovaného strojového učení jste provedli následující úlohy:
- Nakonfigurovali jste pracovní prostor a připravili data pro experiment.
- Trénování modelu automatizovaného rozpoznávání objektů
- Zadané hodnoty hyperparametrů pro váš model
- Provedli jsme úklid hyperparametrů.
- Nasazení modelu
- Vizualizované detekce
Přečtěte si další informace o počítačovém zpracování obrazu v automatizovaném strojovém učení.
Zjistěte, jak nastavit AutoML pro trénování modelů počítačového zpracování obrazu pomocí Pythonu.
Zjistěte, jak nakonfigurovat přírůstkové trénování na modelech počítačového zpracování obrazu.
Podívejte se , jaké hyperparametry jsou k dispozici pro úlohy počítačového zpracování obrazu.
Příklady kódu:
PLATÍ PRO: Rozšíření Azure CLI ml v2 (aktuální)
- Projděte si podrobné příklady kódu a případy použití v úložišti azureml-examples pro ukázky automatizovaného strojového učení. Zkontrolujte složky s předponou cli-automl-image-, kde najdete ukázky specifické pro vytváření modelů počítačového zpracování obrazu.
Poznámka:
Použití datové sady objektů ledniček je dostupné prostřednictvím licence MIT License.