Samouczek: trenowanie modelu wykrywania obiektów za pomocą rozwiązania AutoML i języka Python
DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)
Zestaw PYTHON SDK azure-ai-ml w wersji 2 (bieżąca)
Z tego samouczka dowiesz się, jak wytrenować model wykrywania obiektów przy użyciu zautomatyzowanego uczenia maszynowego usługi Azure Machine Learning za pomocą rozszerzenia interfejsu wiersza polecenia usługi Azure Machine Learning w wersji 2 lub zestawu SDK języka Python usługi Azure Machine Learning w wersji 2. Ten model wykrywania obiektów określa, czy obraz zawiera obiekty, takie jak kan, karton, butelka mleka czy butelka wody.
Zautomatyzowane uczenie maszynowe akceptuje dane treningowe i ustawienia konfiguracji i automatycznie iteruje za pomocą kombinacji różnych metod normalizacji/standaryzacji funkcji, modeli i ustawień hiperparametrów, aby uzyskać najlepszy model.
W tym samouczku napiszesz kod przy użyciu zestawu SDK języka Python i poznasz następujące zadania:
- Pobieranie i przekształcanie danych
- Trenowanie modelu wykrywania obiektów zautomatyzowanego uczenia maszynowego
- Określanie wartości hiperparametrów dla modelu
- Wykonywanie zamiatania hiperparametrów
- Wdrażanie modelu
- Wizualizowanie wykrywania
Wymagania wstępne
Jeśli nie masz subskrypcji Azure, przed rozpoczęciem utwórz bezpłatne konto. Wypróbuj bezpłatną lub płatną wersję usługi Azure Machine Learning już dziś.
Ta funkcja obsługuje język Python 3.6 lub 3.7
Ukończ przewodnik Szybki start: rozpoczynanie pracy z usługą Azure Machine Learning, jeśli nie masz jeszcze obszaru roboczego usługi Azure Machine Learning.
Pobierz i rozpakuj * plik danychodFridgeObjects.zip. Zestaw danych jest oznaczony adnotacją w formacie Pascal VOC, gdzie każdy obraz odpowiada plikowi XML. Każdy plik XML zawiera informacje o tym, gdzie znajduje się odpowiedni plik obrazu, a także zawiera informacje o polach ograniczenia i etykietach obiektów. Aby użyć tych danych, należy najpierw przekonwertować je na wymagany format JSONL, jak pokazano w sekcji Konwertowanie pobranych danych na format JSONL notesu.
DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)
Ten samouczek jest również dostępny w repozytorium azureml-examples w witrynie GitHub. Jeśli chcesz uruchomić go we własnym środowisku lokalnym, skonfiguruj go, korzystając z poniższych instrukcji
- Zainstaluj i skonfiguruj interfejs wiersza polecenia (wersja 2) i upewnij się, że zainstalowano
ml
rozszerzenie.
Konfiguracja docelowego obiektu obliczeniowego
Najpierw należy skonfigurować docelowy obiekt obliczeniowy do użycia na potrzeby zautomatyzowanego trenowania modelu uczenia maszynowego. Zautomatyzowane modele uczenia maszynowego dla zadań obrazu wymagają jednostek SKU procesora GPU.
W tym samouczku użyto serii NCsv3 (z procesorami GPU V100), ponieważ ten typ docelowego obiektu obliczeniowego korzysta z wielu procesorów GPU w celu przyspieszenia trenowania. Ponadto można skonfigurować wiele węzłów, aby korzystać z równoległości podczas dostrajania hiperparametrów dla modelu.
Poniższy kod tworzy obliczenia procesora GPU o rozmiarze Standard_NC24s_v3
z czterema węzłami.
DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)
Utwórz plik yml z następującą konfiguracją.
$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
Aby utworzyć środowisko obliczeniowe, uruchom następujące polecenie interfejsu wiersza polecenia w wersji 2 ze ścieżką do pliku yml, nazwy obszaru roboczego, grupy zasobów i identyfikatora subskrypcji.
az ml compute create -f [PATH_TO_YML_FILE] --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]
Utworzone zasoby obliczeniowe można podać przy użyciu compute
klucza w automl
pliku yaml konfiguracji zadania:
compute: azureml:gpu-cluster
Konfiguracja eksperymentu
Możesz użyć eksperymentu do śledzenia zadań trenowania modelu.
DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)
Nazwę eksperymentu można podać przy użyciu experiment_name
klucza w następujący sposób:
experiment_name: dpv2-cli-automl-image-object-detection-experiment
Wizualizowanie danych wejściowych
Po przygotowaniu danych obrazu wejściowego w formacie JSONL (JSON Lines) można zwizualizować pola ograniczenia prawdy podstawowej dla obrazu. W tym celu upewnij się, że zainstalowano 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))
Za pomocą powyższych funkcji pomocnika dla dowolnego obrazu można uruchomić następujący kod, aby wyświetlić pola ograniczenia.
image_file = "./odFridgeObjects/images/31.jpg"
jsonl_file = "./odFridgeObjects/train_annotations.jsonl"
plot_ground_truth_boxes_jsonl(image_file, jsonl_file)
Przekazywanie danych i tworzenie tabeli MLTable
Aby użyć danych do trenowania, przekaż dane do domyślnej usługi Blob Storage obszaru roboczego usługi Azure Machine Learning i zarejestruj je jako zasób. Korzyści wynikające z rejestrowania danych to:
- Łatwe udostępnianie innym członkom zespołu
- Przechowywanie wersji metadanych (lokalizacja, opis itp.)
- Śledzenie pochodzenia danych
DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)
Utwórz plik yml z następującą konfiguracją.
$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
Aby przekazać obrazy jako zasób danych, uruchom następujące polecenie interfejsu wiersza polecenia w wersji 2 ze ścieżką do pliku yml, nazwy obszaru roboczego, grupy zasobów i identyfikatora subskrypcji.
az ml data create -f [PATH_TO_YML_FILE] --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]
Następnym krokiem jest utworzenie MLTable
danych w formacie jsonl, jak pokazano poniżej. Narzędzie MLtable pakuje dane do obiektu eksploatacyjnego na potrzeby trenowania.
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
DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)
Poniższa konfiguracja tworzy dane trenowania i walidacji z tabeli MLTable.
target_column_name: label
training_data:
path: data/training-mltable-folder
type: mltable
validation_data:
path: data/validation-mltable-folder
type: mltable
Konfigurowanie eksperymentu wykrywania obiektów
Aby skonfigurować zadania zautomatyzowanego uczenia maszynowego dla zadań związanych z obrazem, utwórz zadanie specyficzne dla rozwiązania AutoML.
DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)
task: image_object_detection
primary_metric: mean_average_precision
Automatyczne zamiatanie hiperparametrów dla zadań obrazu (AutoMode)
Ważne
Ta funkcja jest obecnie w publicznej wersji zapoznawczej. Ta wersja zapoznawcza jest udostępniana bez umowy dotyczącej poziomu usług. Niektóre funkcje mogą być nieobsługiwane lub ograniczone. Aby uzyskać więcej informacji, zobacz Uzupełniające warunki korzystania z wersji zapoznawczych platformy Microsoft Azure.
W zadaniu rozwiązania AutoML można wykonać automatyczne zamiatanie hiperparametrów w celu znalezienia optymalnego modelu (nazywamy to funkcją AutoMode). Określasz tylko liczbę prób; Nie są potrzebne zasady hiperparametru wyszukiwania, metody próbkowania i wczesnego kończenia. System automatycznie określi region przestrzeni hiperparametrów, aby zamiatać na podstawie liczby prób. Wartość z zakresu od 10 do 20 prawdopodobnie będzie działać dobrze w przypadku wielu zestawów danych.
DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)
limits:
max_trials: 10
max_concurrent_trials: 2
Następnie możesz przesłać zadanie w celu wytrenowania modelu obrazu.
DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)
Aby przesłać zadanie rozwiązania AutoML, uruchom następujące polecenie interfejsu wiersza polecenia w wersji 2 ze ścieżką do pliku yml, nazwy obszaru roboczego, grupy zasobów i identyfikatora subskrypcji.
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]
Ręczne zamiatanie hiperparametrów dla zadań obrazu
W zadaniu zautomatyzowanego uczenia maszynowego można określić architektury modelu przy użyciu model_name
parametru i skonfigurować ustawienia w celu przeprowadzenia zamiatania hiperparametrów przez zdefiniowaną przestrzeń wyszukiwania w celu znalezienia optymalnego modelu.
W tym przykładzie wytrenujemy model wykrywania obiektów za pomocą yolov5
elementów i fasterrcnn_resnet50_fpn
, z których oba są wstępnie wytrenowane na platformie COCO, czyli zestaw danych wykrywania obiektów na dużą skalę, segmentacji i podpisów, który zawiera ponad tysiące oznaczonych obrazów z ponad 80 kategoriami etykiet.
Aby znaleźć optymalny model, można wykonać zamiatanie hiperparametrów na zdefiniowanym obszarze wyszukiwania.
Limity zadań
Zasoby wydane w zadaniu trenowania obrazów automatycznego uczenia maszynowego można kontrolować, określając timeout_minutes
parametr i max_trials
dla max_concurrent_trials
zadania w ustawieniach limitu. Zapoznaj się ze szczegółowym opisem parametrów limitów zadań.
DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)
limits:
timeout_minutes: 60
max_trials: 10
max_concurrent_trials: 2
Poniższy kod definiuje przestrzeń wyszukiwania w ramach przygotowań do zamiatania hiperparametrów dla każdej zdefiniowanej architektury yolov5
i fasterrcnn_resnet50_fpn
. W obszarze wyszukiwania określ zakres wartości dla learning_rate
, optimizer
, lr_scheduler
itp., aby rozwiązanie AutoML wybierało, próbując wygenerować model z optymalną metryką podstawową. Jeśli nie określono wartości hiperparametrów, wartości domyślne są używane dla każdej architektury.
W przypadku ustawień dostrajania użyj losowego próbkowania, aby wybrać próbki z tej przestrzeni parametrów przy użyciu random
sampling_algorithm. Powyższe limity zadań informują zautomatyzowane uczenie maszynowe o wypróbowaniu w sumie 10 prób z tymi różnymi próbkami, uruchamiając jednocześnie dwie próby na naszym docelowym obiekcie obliczeniowym, który został skonfigurowany przy użyciu czterech węzłów. Tym więcej parametrów zawiera przestrzeń wyszukiwania, tym więcej prób jest potrzebnych do znalezienia optymalnych modeli.
Są również używane zasady wczesnego kończenia działania bandyty. Ta zasada kończy próby o niskiej wydajności; oznacza to, że te wersje próbne, które nie mieszczą się w 20% okresie próbnym, co znacznie oszczędza zasoby obliczeniowe.
DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)
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]
Po zdefiniowaniu ustawień obszaru wyszukiwania i czyszczenia można przesłać zadanie w celu wytrenowania modelu obrazu przy użyciu zestawu danych trenowania.
DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)
Aby przesłać zadanie rozwiązania AutoML, uruchom następujące polecenie interfejsu wiersza polecenia w wersji 2 ze ścieżką do pliku yml, nazwy obszaru roboczego, grupy zasobów i identyfikatora subskrypcji.
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]
Podczas wykonywania zamiatania hiperparametrów może być przydatne wizualizowanie różnych prób, które próbowano użyć interfejsu użytkownika funkcji HyperDrive. Możesz przejść do tego interfejsu użytkownika, przechodząc do karty "Zadania podrzędne" w interfejsie użytkownika głównego automl_image_job z powyższego, co jest zadaniem nadrzędnym funkcji HyperDrive. Następnie możesz przejść do karty "Zadania podrzędne" tego zadania.
Możesz też zobaczyć bezpośrednio zadanie nadrzędne funkcji HyperDrive i przejść do karty "Zadania podrzędne":
DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)
CLI example not available, please use Python SDK.
Rejestrowanie i wdrażanie modelu
Po zakończeniu zadania można zarejestrować model utworzony na podstawie najlepszej wersji próbnej (konfiguracja, która spowodowała najlepszą metryki podstawowej). Model można zarejestrować po pobraniu lub określając ścieżkę azureml przy użyciu odpowiedniego identyfikatora jobid.
Uzyskaj najlepszą wersję próbną
DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)
CLI example not available, please use Python SDK.
Rejestrowanie modelu
Zarejestruj model przy użyciu ścieżki azureml lub ścieżki pobranej lokalnie.
DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)
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]
Po zarejestrowaniu modelu, którego chcesz użyć, możesz wdrożyć go przy użyciu zarządzanego punktu końcowego online deploy-managed-online-endpoint
Konfigurowanie punktu końcowego online
DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
name: od-fridge-items-endpoint
auth_mode: key
Tworzenie punktu końcowego
Przy użyciu utworzonego MLClient
wcześniej punktu końcowego utworzymy punkt końcowy w obszarze roboczym. To polecenie spowoduje uruchomienie tworzenia punktu końcowego i zwrócenie odpowiedzi potwierdzenia, gdy tworzenie punktu końcowego będzie kontynuowane.
DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)
az ml online-endpoint create --file .\create_endpoint.yml --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]
Możemy również utworzyć punkt końcowy wsadowy na potrzeby wnioskowania wsadowego na dużych ilościach danych w danym okresie. Zapoznaj się z notesem oceniania wsadowego wykrywania obiektów na potrzeby wnioskowania wsadowego przy użyciu punktu końcowego wsadowego.
Konfigurowanie wdrożenia online
Wdrożenie to zestaw zasobów wymaganych do hostowania modelu, który wykonuje rzeczywiste wnioskowanie. Utworzymy wdrożenie dla naszego punktu końcowego ManagedOnlineDeployment
przy użyciu klasy . Dla klastra wdrażania można użyć jednostek SKU procesora GPU lub maszyny wirtualnej procesora CPU.
DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)
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
Tworzenie wdrożenia
Przy użyciu utworzonego MLClient
wcześniej wdrożenia utworzymy teraz w obszarze roboczym. To polecenie spowoduje uruchomienie tworzenia wdrożenia i zwrócenie odpowiedzi potwierdzenia podczas tworzenia wdrożenia.
DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)
az ml online-deployment create --file .\create_deployment.yml --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]
Aktualizuj ruch:
Domyślnie bieżące wdrożenie jest ustawione na odbieranie 0% ruchu. Można ustawić procent ruchu bieżącego wdrożenia powinny być odbierane. Suma wartości procentowych ruchu we wszystkich wdrożeniach z jednym punktem końcowym nie powinna przekraczać 100%.
DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)
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]
Testowanie wdrożenia
DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)
CLI example not available, please use Python SDK.
Wizualizowanie wykrywania
Po badaniu obrazu testowego możesz zwizualizować pola ograniczenia dla tego obrazu. W tym celu upewnij się, że masz zainstalowaną bibliotekę matplotlib.
DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)
CLI example not available, please use Python SDK.
Czyszczenie zasobów
Nie należy wykonywać tej sekcji, jeśli planujesz uruchamianie innych samouczków usługi Azure Machine Learning.
Jeśli nie planujesz korzystać z utworzonych zasobów, usuń je, aby nie ponosić żadnych opłat.
- W witrynie Azure Portal na końcu z lewej strony wybierz pozycję Grupy zasobów.
- Wybierz utworzoną grupę zasobów z listy.
- Wybierz pozycję Usuń grupę zasobów.
- Wpisz nazwę grupy zasobów. Następnie wybierz pozycję Usuń.
Możesz też zachować grupę zasobów i usunąć jeden obszar roboczy. Wyświetl właściwości obszaru roboczego i wybierz pozycję Usuń.
Następne kroki
W tym samouczku zautomatyzowanego uczenia maszynowego wykonano następujące czynności:
- Skonfigurowano obszar roboczy i przygotowano dane do eksperymentu.
- Trenowanie modelu automatycznego wykrywania obiektów
- Określone wartości hiperparametrów dla modelu
- Wykonano zamiatanie hiperparametrów
- Wdrożono model
- Zwizualizowane wykrycia
Dowiedz się więcej o przetwarzaniu obrazów w zautomatyzowanym uczeniu maszynowym.
Dowiedz się, jak skonfigurować trenowanie przyrostowe na modelach przetwarzania obrazów.
Zobacz , jakie hiperparametry są dostępne dla zadań przetwarzania obrazów.
Przykłady kodu:
DOTYCZY:
Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)
- Zapoznaj się ze szczegółowymi przykładami kodu i przypadkami użycia w repozytorium azureml-examples, aby zapoznać się z przykładami zautomatyzowanego uczenia maszynowego. Sprawdź foldery z prefiksem "cli-automl-image-" pod kątem przykładów specyficznych dla tworzenia modeli przetwarzania obrazów.
Uwaga
Korzystanie z zestawu danych obiektów lodówki jest dostępne za pośrednictwem licencji na licencję MIT.