Tutorial: Preparar um modelo de deteção de objetos com AutoML e Python
APLICA-SE A:Extensão v2 da CLI do Azure (atual)SDK python azure-ai-ml v2 (atual)
Neste tutorial, vai aprender a preparar um modelo de deteção de objetos com o ML automatizado do Azure Machine Learning com a extensão v2 da CLI do Azure Machine Learning ou o SDK Python v2 do Azure Machine Learning. Este modelo de deteção de objetos identifica se a imagem contém objetos, como uma lata, uma caixa, uma garrafa de leite ou uma garrafa de água.
O ML automatizado aceita definições de configuração e dados de preparação e itera automaticamente através de combinações de diferentes métodos de normalização/uniformização de funcionalidades, modelos e definições de hiperparâmetros para chegar ao melhor modelo.
Neste tutorial, escreve código com o SDK python e aprende as seguintes tarefas:
- Transferir e transformar dados
- Preparar um modelo automatizado de deteção de objetos de machine learning
- Especificar valores de hiperparâmetros para o modelo
- Executar uma limpeza de hiperparâmetros
- Implementar o modelo
- Visualizar deteções
Pré-requisitos
-
Para utilizar o Azure Machine Learning, primeiro precisará de uma área de trabalho. Se não tiver um, conclua Criar recursos que precisa para começar a criar uma área de trabalho e saber mais sobre como utilizá-la.
O Python 3.6 ou 3.7 é suportado para esta funcionalidade
Transfira e deszipe o * ficheiro de dadosodFridgeObjects.zip. O conjunto de dados é anotado no formato Pascal VOC, onde cada imagem corresponde a um ficheiro xml. Cada ficheiro xml contém informações sobre onde está localizado o ficheiro de imagem correspondente e também contém informações sobre as caixas delimitadoras e as etiquetas do objeto. Para utilizar estes dados, primeiro tem de convertê-lo no formato JSONL necessário, conforme visto na secção Converter os dados transferidos em JSONL do bloco de notas.
Utilize uma instância de computação para seguir este tutorial sem mais instalações. (Veja como criar uma instância de computação.) Em alternativa, instale a CLI/SDK para utilizar o seu próprio ambiente local.
APLICA-SE A:Extensão v2 da CLI do Azure (atual)
Este tutorial também está disponível no repositório azureml-examples no GitHub. Se quiser executá-lo no seu próprio ambiente local:
- Instale e configure a CLI (v2) e certifique-se de que instala a
ml
extensão.
- Instale e configure a CLI (v2) e certifique-se de que instala a
Configuração do destino de computação
Nota
Para experimentar computação sem servidor (pré-visualização), ignore este passo e avance para a Configuração da experimentação.
Primeiro, tem de configurar um destino de computação para utilizar para a preparação automatizada do modelo de ML. Os modelos de ML automatizados para tarefas de imagem requerem SKUs de GPU.
Este tutorial utiliza a série NCsv3 (com GPUs V100), uma vez que este tipo de destino de computação utiliza várias GPUs para acelerar a preparação. Além disso, pode configurar vários nós para tirar partido do paralelismo ao otimizar os hiperparâmetros para o seu modelo.
O código seguinte cria uma computação gpu de tamanho Standard_NC24s_v3
com quatro nós.
APLICA-SE A:Extensão v2 da CLI do Azure (atual)
Crie um ficheiro .yml com a seguinte configuração.
$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
Para criar a computação, execute o seguinte comando da CLI v2 com o caminho para o ficheiro .yml, o nome da área de trabalho, o grupo de recursos e o ID da subscrição.
az ml compute create -f [PATH_TO_YML_FILE] --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]
Configuração da experimentação
Pode utilizar uma Experimentação para controlar as tarefas de preparação do modelo.
APLICA-SE A:Extensão v2 da CLI do Azure (atual)
O nome da experimentação pode ser fornecido com a experiment_name
chave da seguinte forma:
experiment_name: dpv2-cli-automl-image-object-detection-experiment
Visualizar dados de entrada
Assim que tiver os dados de imagem de entrada preparados no formato JSONL (Linhas JSON), pode visualizar as caixas delimitadoras da verdade básica para uma imagem. Para tal, certifique-se de que instalou 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))
Ao utilizar as funções auxiliares acima, para qualquer imagem, pode executar o seguinte código para apresentar as caixas delimitadoras.
image_file = "./odFridgeObjects/images/31.jpg"
jsonl_file = "./odFridgeObjects/train_annotations.jsonl"
plot_ground_truth_boxes_jsonl(image_file, jsonl_file)
Carregar dados e criar MLTable
Para utilizar os dados para preparação, carregue dados para o Armazenamento de Blobs predefinido da área de trabalho do Azure Machine Learning e registe-os como um recurso. As vantagens de registar dados são:
- Fácil de partilhar com outros membros da equipa
- Controlo de versões dos metadados (localização, descrição, etc.)
- Controlo de linhagem
APLICA-SE A:Extensão v2 da CLI do Azure (atual)
Crie um ficheiro .yml com a seguinte configuração.
$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
Para carregar as imagens como um recurso de dados, execute o seguinte comando da CLI v2 com o caminho para o ficheiro .yml, o nome da área de trabalho, o grupo de recursos e o ID da subscrição.
az ml data create -f [PATH_TO_YML_FILE] --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]
O passo seguinte é criar MLTable
a partir dos seus dados no formato jsonl, conforme mostrado abaixo. A MLtable empacota os seus dados num objeto consumível para preparação.
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
APLICA-SE A:Extensão v2 da CLI do Azure (atual)
A configuração seguinte cria dados de preparação e validação a partir da MLTable.
target_column_name: label
training_data:
path: data/training-mltable-folder
type: mltable
validation_data:
path: data/validation-mltable-folder
type: mltable
Configurar a experimentação de deteção de objetos
Para configurar tarefas de ML automatizadas para tarefas relacionadas com imagens, crie uma tarefa específica do AutoML.
APLICA-SE A:Extensão v2 da CLI do Azure (atual)
Para utilizar a computação sem servidor (pré-visualização), substitua a linha
compute: azureml:gpu-cluster
por este código:resources: instance_type: Standard_NC24s_v3 instance_count: 4
task: image_object_detection
primary_metric: mean_average_precision
compute: azureml:gpu-cluster
Limpeza automática de hiperparâmetros para tarefas de imagem (AutoMode)
Importante
Esta funcionalidade está atualmente em pré-visualização pública. Esta versão de pré-visualização é fornecida sem um contrato de nível de serviço. Algumas funcionalidades poderão não ser suportadas ou poderão ter capacidades limitadas. Para obter mais informações, veja Termos Suplementares de Utilização para Pré-visualizações do Microsoft Azure.
Na sua tarefa de AutoML, pode realizar uma limpeza automática de hiperparâmetros para encontrar o modelo ideal (chamamos a este Modelo Automático de funcionalidade). Só especifica o número de avaliações; o espaço de pesquisa de hiperparâmetros, o método de amostragem e a política de terminação antecipada não são necessários. O sistema determinará automaticamente a região do espaço de hiperparâmetros para varrer com base no número de avaliações. Um valor entre 10 e 20 provavelmente funcionará bem em muitos conjuntos de dados.
APLICA-SE A:Extensão v2 da CLI do Azure (atual)
limits:
max_trials: 10
max_concurrent_trials: 2
Em seguida, pode submeter a tarefa para preparar um modelo de imagem.
APLICA-SE A:Extensão v2 da CLI do Azure (atual)
Para submeter a tarefa autoML, execute o seguinte comando da CLI v2 com o caminho para o ficheiro .yml, o nome da área de trabalho, o grupo de recursos e o ID da subscrição.
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]
Limpeza manual de hiperparâmetros para tarefas de imagem
Na sua tarefa de AutoML, pode especificar as arquiteturas do modelo com model_name
o parâmetro e configurar as definições para efetuar uma limpeza de hiperparâmetros sobre um espaço de pesquisa definido para encontrar o modelo ideal.
Neste exemplo, vamos preparar um modelo de deteção de objetos com yolov5
e fasterrcnn_resnet50_fpn
, ambos pré-preparados em COCO, um conjunto de dados de deteção, segmentação e legendagem de objetos em larga escala que contém mais de milhares de imagens etiquetadas com mais de 80 categorias de etiquetas.
Pode realizar uma limpeza de hiperparâmetros sobre um espaço de pesquisa definido para encontrar o modelo ideal.
Limites dos trabalhos
Pode controlar os recursos gastos na sua tarefa de preparação imagem autoML ao especificar o timeout_minutes
e max_trials
o max_concurrent_trials
para a tarefa nas definições de limite. Veja a descrição detalhada sobre os parâmetros Limites de Tarefas.
APLICA-SE A:Extensão v2 da CLI do Azure (atual)
limits:
timeout_minutes: 60
max_trials: 10
max_concurrent_trials: 2
O código seguinte define o espaço de pesquisa em preparação para a limpeza de hiperparâmetros para cada arquitetura yolov5
definida e fasterrcnn_resnet50_fpn
. No espaço de pesquisa, especifique o intervalo de valores para learning_rate
, optimizer
, lr_scheduler
, , etc., para a AutoML escolher, uma vez que tenta gerar um modelo com a métrica primária ideal. Se os valores de hiperparâmetros não forem especificados, os valores predefinidos são utilizados para cada arquitetura.
Para as definições de otimização, utilize a amostragem aleatória para escolher amostras deste espaço de parâmetros com o random
sampling_algorithm. Os limites de tarefas configurados acima, indica ao ML automatizado para experimentar um total de 10 avaliações com estas amostras diferentes, executando duas avaliações de cada vez no nosso destino de computação, que foi configurado com quatro nós. Quanto mais parâmetros o espaço de pesquisa tiver, mais avaliações precisa para encontrar modelos ideais.
A política de cessação antecipada de bandidos também é utilizada. Esta política termina as avaliações de mau desempenho; ou seja, as avaliações que não estão dentro de 20% da avaliação com melhor desempenho, o que poupa significativamente recursos de computação.
APLICA-SE A:Extensão v2 da CLI do Azure (atual)
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]
Assim que o espaço de pesquisa e as definições de varrimento estiverem definidos, pode submeter a tarefa para preparar um modelo de imagem com o conjunto de dados de preparação.
APLICA-SE A:Extensão v2 da CLI do Azure (atual)
Para submeter a tarefa autoML, execute o seguinte comando da CLI v2 com o caminho para o ficheiro .yml, o nome da área de trabalho, o grupo de recursos e o ID da subscrição.
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]
Ao fazer uma limpeza de hiperparâmetros, pode ser útil visualizar as diferentes avaliações que foram experimentadas com a IU do HyperDrive. Pode navegar para esta IU acedendo ao separador "Tarefas subordinadas" na IU do automl_image_job principal acima, que é a tarefa principal do HyperDrive. Em seguida, pode aceder ao separador "Tarefas subordinados" deste.
Em alternativa, aqui abaixo, pode ver diretamente a tarefa principal do HyperDrive e navegar para o separador "Tarefas subordinadas":
APLICA-SE A:Extensão v2 da CLI do Azure (atual)
CLI example not available, please use Python SDK.
Registar e implementar o modelo
Assim que a tarefa estiver concluída, pode registar o modelo que foi criado a partir da melhor versão de avaliação (configuração que resultou na melhor métrica primária). Pode registar o modelo após a transferência ou ao especificar o azureml
caminho com o correspondente jobid
.
Obter a melhor avaliação
APLICA-SE A:Extensão v2 da CLI do Azure (atual)
CLI example not available, please use Python SDK.
Registar o modelo
Registe o modelo utilizando o azureml
caminho ou o caminho transferido localmente.
APLICA-SE A:Extensão v2 da CLI do Azure (atual)
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]
Depois de registar o modelo que pretende utilizar, pode implementá-lo com o ponto final online gerido deploy-managed-online-endpoint
Configurar o ponto final online
APLICA-SE A:Extensão v2 da CLI do Azure (atual)
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
name: od-fridge-items-endpoint
auth_mode: key
Criar o ponto final
Com o MLClient
criado anteriormente, vamos agora criar o Ponto Final na área de trabalho. Este comando inicia a criação do ponto final e devolve uma resposta de confirmação enquanto a criação do ponto final continua.
APLICA-SE A:Extensão v2 da CLI do Azure (atual)
az ml online-endpoint create --file .\create_endpoint.yml --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]
Também podemos criar um ponto final de lote para a inferência de lotes em grandes volumes de dados durante um período de tempo. Veja o bloco de notas de classificação do lote de deteção de objetos para inferência de lotes com o ponto final do batch.
Configurar a implementação online
Uma implementação é um conjunto de recursos necessários para alojar o modelo que faz a inferência real. Criamos uma implementação para o nosso ponto final com a ManagedOnlineDeployment
classe. Pode utilizar SKUs de VM de GPU ou CPU para o cluster de implementação.
APLICA-SE A:Extensão v2 da CLI do Azure (atual)
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
Criar a implementação
Com o MLClient
criado anteriormente, vamos criar a implementação na área de trabalho. Este comando inicia a criação da implementação e devolve uma resposta de confirmação enquanto a criação da implementação continua.
APLICA-SE A:Extensão v2 da CLI do Azure (atual)
az ml online-deployment create --file .\create_deployment.yml --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]
Atualizar tráfego:
Por predefinição, a implementação atual está definida para receber 0% de tráfego. pode definir a percentagem de tráfego que a implementação atual deve receber. A soma das percentagens de tráfego de todas as implementações com um ponto final não deve exceder os 100%.
APLICA-SE A:Extensão v2 da CLI do Azure (atual)
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]
Testar a implementação
APLICA-SE A:Extensão v2 da CLI do Azure (atual)
CLI example not available, please use Python SDK.
Visualizar deteções
Agora que obteve uma imagem de teste, pode visualizar as caixas delimitadoras para esta imagem. Para tal, certifique-se de que tem o matplotlib instalado.
APLICA-SE A:Extensão v2 da CLI do Azure (atual)
CLI example not available, please use Python SDK.
Limpar os recursos
Não conclua esta secção se planear executar outros tutoriais do Azure Machine Learning.
Se não planear utilizar os recursos que criou, elimine-os para não incorrer em custos.
- No portal do Azure, selecione Grupos de recursos na extremidade esquerda.
- Na lista, selecione o grupo de recursos que criou.
- Selecione Eliminar grupo de recursos.
- Introduza o nome do grupo de recursos. Em seguida, selecione Eliminar.
Também pode manter o grupo de recursos, mas eliminar uma única área de trabalho. Apresente as propriedades da área de trabalho e selecione Eliminar.
Passos seguintes
Neste tutorial de machine learning automatizado, fez as seguintes tarefas:
- Configurou uma área de trabalho e preparou dados para uma experimentação.
- Preparado um modelo de deteção de objetos automatizado
- Valores de hiperparâmetros especificados para o modelo
- Efetuou uma limpeza de hiperparâmetros
- Implementou o modelo
- Deteções visualizadas
Saiba como configurar o AutoML para preparar modelos de imagem digitalizada com Python.
Saiba como configurar a preparação incremental em modelos de imagem digitalizada.
Veja que hiperparâmetros estão disponíveis para tarefas de imagem digitalizada.
Exemplos de código:
APLICA-SE A:Extensão v2 da CLI do Azure (atual)
- Veja exemplos de código detalhados e casos de utilização no repositório azureml-examples para exemplos automatizados de machine learning. Verifique as pastas com o prefixo "cli-automl-image-" para obter amostras específicas para a criação de modelos de imagem digitalizada.
Nota
A utilização do conjunto de dados de objetos de frigorífico está disponível através da licença ao abrigo da Licença do MIT.