Öğretici: AutoML ve Python ile nesne algılama modelini eğitme

ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v2 (geçerli)Python SDK azure-ai-ml v2 (geçerli)

Bu öğreticide, Azure Machine Learning CLI uzantısı v2 veya Azure Machine Learning Python SDK v2 ile Azure Machine Learning otomatik ML kullanarak nesne algılama modelini eğitmeyi öğreneceksiniz. Bu nesne algılama modeli, bir görüntünün kutu, karton, süt şişesi veya su şişesi gibi nesneler içerip içermediğini tanımlar.

Otomatik ML, eğitim verilerini ve yapılandırma ayarlarını kabul eder ve en iyi modele ulaşmak için farklı özellik normalleştirme/standartlaştırma yöntemleri, modelleri ve hiper parametre ayarlarının birleşimleri aracılığıyla otomatik olarak yinelenir.

Bu öğreticide Python SDK'sını kullanarak kod yazar ve aşağıdaki görevleri öğrenirsiniz:

  • Verileri indirme ve dönüştürme
  • Otomatik makine öğrenmesi nesne algılama modelini eğitin
  • Modeliniz için hiper parametre değerlerini belirtme
  • Hiper parametre taraması gerçekleştirme
  • Modelinizi dağıtın
  • Algılamaları görselleştirme

Önkoşullar

  • Azure Machine Learning'i kullanmak için bir çalışma alanı gerekir. Bir çalışma alanınız yoksa, bir çalışma alanı oluşturmak ve bunun nasıl kullanılacağı hakkında daha fazla bilgi edinmek için ihtiyacınız olan kaynakları Oluşturun'u tamamlayın.

    Önemli

    Azure Machine Learning çalışma alanınız yönetilen bir sanal ağ ile yapılandırılmışsa, genel Python paket depolarına erişime izin vermek için giden kuralları eklemeniz gerekebilir. Daha fazla bilgi için bkz . Senaryo: Genel makine öğrenmesi paketlerine erişme.

  • Python 3.10 veya üzerini kullanın.

  • Her odFridgeObjects görüntünün bir XML dosyasına karşılık geldiği Pascal VOC biçiminde veri kümesine açıklama eklenir. Her XML dosyası, karşılık gelen görüntü dosyasının nerede olduğuna ilişkin bilgiler içerir ve ayrıca sınırlayıcı kutular ve nesne etiketleri hakkında bilgi içerir. Bu verileri kullanmak için önce automl-image-object-detection-task-buzdolabı-items.ipynb not defterinin İndirilen verileri JSONL'ye dönüştürme bölümünde gösterildiği gibi gerekli JSONL biçimine dönüştürmeniz gerekir.

  • Ek bir yükleme yapmadan bu öğreticiyi tamamlamak için bir hesaplama birimi kullanın. (Bkz. İşlem örneği oluşturma.) Kendi yerel ortamınızı kullanmak için CLI veya SDK'sını da yükleyebilirsiniz.

    ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v2 (geçerli)

    Bu öğretici, GitHub'daki azureml-examples deposunda da kullanılabilir. Yerel ortamınızda çalıştırmak istiyorsanız CLI'yı (v2) yükleyip ayarlayın ve uzantıyı yüklediğinizden ml emin olun.

Hesaplama hedefi kurulumu

Not

Sunucusuz işlemi denemek için bu adımı atlayın ve Deneme kurulumu'na gidin.

Öncelikle otomatik ML modeli eğitiminiz için kullanılacak bir işlem hedefi ayarlamanız gerekir. Görüntü görevleri için otomatik ML modelleri GPU SKU'ları gerektirir.

Bu işlem hedefi türü eğitimi hızlandırmak için birden çok GPU kullandığından bu öğreticide NCsv3 serisi (V100 GPU'larla) kullanılır. Ayrıca, modeliniz için hiper parametreleri ayarlarken paralellikten yararlanmak için birden çok düğüm ayarlayabilirsiniz.

Aşağıdaki kod, Standard_NC64as_T4_v3 boyutlarında ve dört düğümlü bir GPU hesaplama birimi oluşturur.

ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v2 (geçerli)

Aşağıdaki yapılandırmaya sahip bir .yml dosyası oluşturun.

$schema: https://azuremlschemas.azureedge.net/latest/amlCompute.schema.json 
name: gpu-cluster
type: amlcompute
size: Standard_NC64as_T4_v3
min_instances: 0
max_instances: 4
idle_time_before_scale_down: 120

İşlemi oluşturmak için .yml dosyanızın, çalışma alanı adınızın, kaynak grubunuzun ve abonelik kimliğinizin yolunu içeren aşağıdaki CLI v2 komutunu çalıştırırsınız.

az ml compute create -f [PATH_TO_YML_FILE] --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]

Deneme kurulumu

Model eğitim işlerinizi izlemek için bir deney kullanabilirsiniz.

ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v2 (geçerli)

Deneme adını şu anahtarı kullanarak experiment_name sağlayabilirsiniz:

experiment_name: dpv2-cli-automl-image-object-detection-experiment

Giriş verilerini görselleştirme

Giriş görüntüsü verilerini JSONL (JSON Çizgileri) biçiminde hazırladıktan sonra, bir görüntü için temel gerçeklik sınırlayıcı kutularını görselleştirebilirsiniz. Bunu yapmak için matplotlib yüklediğinizden emin olun.

%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))

Herhangi bir görüntü için yukarıdaki yardımcı işlevleri kullanarak sınırlayıcı kutuları görüntülemek için aşağıdaki kodu çalıştırabilirsiniz.

image_file = "./odFridgeObjects/images/31.jpg"
jsonl_file = "./odFridgeObjects/train_annotations.jsonl"

plot_ground_truth_boxes_jsonl(image_file, jsonl_file)

Verileri yükleyin ve MLTable oluşturun

Eğitim için verileri kullanmak için, verileri Azure Machine Learning çalışma alanınızın varsayılan blob depolama alanına yükleyin ve varlık olarak kaydedin. Verileri kaydetmenin avantajları şunlardır:

  • Ekibin diğer üyeleriyle kolayca paylaşabilirsiniz.
  • Meta verilerin sürüm oluşturma (konum, açıklama vb.).
  • Köken izleme.

ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v2 (geçerli)

Aşağıdaki yapılandırmaya sahip bir .yml dosyası oluşturun.

$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

Görüntüleri veri varlığı olarak karşıya yüklemek için, .yml dosyanızın, çalışma alanı adınızın, kaynak grubunuzun ve abonelik kimliğinizin yolunu içeren aşağıdaki CLI v2 komutunu çalıştırın.

az ml data create -f [PATH_TO_YML_FILE] --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]

Sonraki adım, aşağıdaki örnekte gösterildiği gibi verilerinizden JSONL biçiminde bir MLTable oluşturmaktır. MLTable, verilerinizi eğitim için tüketilebilir bir nesneye paketler.

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

ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v2 (geçerli)

Aşağıdaki yapılandırma MLTable'dan eğitim ve doğrulama verileri oluşturur.

target_column_name: label
training_data:
  path: data/training-mltable-folder
  type: mltable
validation_data:
  path: data/validation-mltable-folder
  type: mltable

Nesne algılama denemenizi yapılandırma

Görüntüyle ilgili görevler için otomatik ML işlerini yapılandırmak için göreve özgü bir AutoML işi oluşturun.

ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v2 (geçerli)

Not

Sunucusuz işlem kullanmak için satırını compute: azureml:gpu-cluster şu kodla değiştirin:

resources:
 instance_type: Standard_NC64as_T4_v3
 instance_count: 4
task: image_object_detection
primary_metric: mean_average_precision
compute: azureml:gpu-cluster

Görüntü görevleri için otomatik hiper parametre süpürme (AutoMode)

AutoML işinizde, en uygun modeli bulmak için otomatik bir hiper parametre taraması gerçekleştirebilirsiniz. (Bu işlev AutoMode olarak adlandırılır). Yalnızca deneme sayısını belirtirsiniz. Hiper parametre arama alanı, örnekleme yöntemi ve erken sonlandırma ilkesi gerekli değildir. Sistem, deneme sayısına göre süpürecek hiper parametre alanının bölgesini otomatik olarak belirler. 10 ile 20 arasında bir değer büyük olasılıkla birçok veri kümesinde iyi çalışır.

ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v2 (geçerli)

limits:
  max_trials: 10
  max_concurrent_trials: 2

Daha sonra bir görüntü modelini eğitmek için işi gönderebilirsiniz.

ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v2 (geçerli)

AutoML işinizi göndermek için, .yml dosyanızın, çalışma alanı adınızın, kaynak grubunuzun ve abonelik kimliğinizin yolunu içeren aşağıdaki CLI v2 komutunu çalıştırırsınız.

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]

Görüntü görevleri için el ile hiper parametre süpürme

AutoML işinizde, parametresini kullanarak model_name model mimarilerini belirtebilir ve ayarları yapılandırarak en uygun modeli bulmak için tanımlı bir arama alanı üzerinde hiper parametre taraması gerçekleştirebilirsiniz.

Bu örnekte, YOLOv5 ve FasterRCNN ResNet50 FPN ile, her ikisi de 80'den fazla etiket kategorisine sahip binlerce etiketli görüntü içeren büyük ölçekli bir nesne algılama, segmentasyon ve resim yazısı veri kümesi olan COCO üzerinde önceden eğitilen bir nesne algılama modeli eğitirsiniz.

En uygun modeli bulmak için tanımlı bir arama alanı üzerinde hiper parametre taraması gerçekleştirebilirsiniz.

İş sınırları

Sınır ayarlarında iş için timeout_minutes, max_trials ve max_concurrent_trials belirterek AutoML görüntü eğitim işinize harcanan kaynakları kontrol edebilirsiniz. Daha fazla bilgi için iş sınırları parametrelerinin açıklamasına bakın.

ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v2 (geçerli)

limits:
  timeout_minutes: 60
  max_trials: 10
  max_concurrent_trials: 2

Aşağıdaki kod, YOLOv5, FasterRCNN ResNet50 FPN olarak tanımlanan her bir mimari için hiperparametre taramasına hazırlık olarak arama alanını tanımlar. AutoML'nin en uygun birincil metriği optimize edecek bir model oluşturması için aralarından seçim yapacağı learning_rate, optimizer, lr_scheduler vb. değerlerin aralığını arama uzayında belirtin. Hiper parametre değerleri belirtilmezse, her mimari için varsayılan değerler kullanılır.

Ayarlama ayarları için, örnekleme algoritmasını kullanarak bu parametre alanından örnekler seçmek için rastgele örnekleme kullanın random . Önceki kodda belirtilen iş sınırları, otomatik ML'yi bu farklı örneklerle toplam 10 denemeyi deneyecek şekilde yapılandırarak işlem hedefinde aynı anda iki deneme çalıştırır ve bu da dört düğüm kullanılarak ayarlanır. Arama alanında ne kadar çok parametre varsa, en uygun modelleri bulmak için o kadar fazla deneme gerekir.

Bandit erken sonlandırma politikası da kullanılır. Bu ilke, düşük performanslı denemeleri sonlandırır. %20'lik bir esneklik payının dışında kalan ve en iyi performansı gösteren denemeler. Bu sonlandırma, kullanım kaynaklarından önemli ölçüde tasarruf sağlar.

ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v2 (geçerli)

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]

Arama alanı ve süpürme ayarlarını tanımladıktan sonra, eğitim veri kümenizi kullanarak bir görüntü modelini eğitmek için işi gönderebilirsiniz.

ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v2 (geçerli)

AutoML işinizi göndermek için, .yml dosyanızın yolu, çalışma alanı adı, kaynak grubu ve abonelik kimliği ile aşağıdaki CLI v2 komutunu çalıştırın.

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]

Hiper parametre taraması yaptığınızda, Hyperdrive kullanıcı arabirimi kullanılarak denenen farklı denemeleri görselleştirmek yararlı olabilir. Bu kullanıcı arabirimine ulaşmak için, Hyperdrive ana işi olan daha önce belirtilen AutoML ana görüntü işinin kullanıcı arabirimindeki Alt işler sekmesine gidebilirsiniz. Daha sonra bunun Alt işler sekmesine gidebilirsiniz.

Alternatif olarak, burada Hyperdrive ana görevini doğrudan görebilir ve Alt görevler sekmesine gidebilirsiniz.

ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v2 (geçerli)

CLI example not available. Use the the Python SDK.

Modeli kaydetme ve dağıtma

İş tamamlandıktan sonra, en iyi deneme sürümünden (en iyi birincil ölçümle sonuçlanan yapılandırma) oluşturulan modeli kaydedebilirsiniz. İndirdikten sonra modeli kaydedebilir veya ilgili azureml ile jobid yolunu belirtebilirsiniz.

En iyi deneme sürümünü edinin

ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v2 (geçerli)

CLI example not available. Use the Python SDK.

Modeli kaydedin

Modeli, azureml yolunu ya da yerel olarak indirdiğiniz yolu kullanarak kaydedin.

ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v2 (geçerli)

 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]

Kullanmak istediğiniz modeli kaydettikten sonra yönetilen çevrimiçi uç noktayı kullanarak dağıtabilirsiniz.

Çevrimiçi uç noktayı yapılandırma

ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v2 (geçerli)

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
name: od-fridge-items-endpoint
auth_mode: key

Uç noktayı oluşturma

Daha önce oluşturduğunuz MLClient'ü kullanarak artık çalışma alanında bir uç noktası oluşturacaksınız. Bu komut uç nokta oluşturmayı başlatır ve uç nokta oluşturma işlemi devam ederken bir onay yanıtı döndürür.

ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v2 (geçerli)

az ml online-endpoint create --file .\create_endpoint.yml --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]

Büyük hacimli verilerde toplu çıkarım yapmak için ayrıca bir toplu çıkarım uç noktası oluşturabilirsiniz. Toplu işlem uç noktasını kullanarak toplu çıkarım örneği görmek için nesne algılama toplu puanlama not defterine bakın.

Çevrimiçi dağıtımı yapılandırma

Dağıtım, gerçek çıkarım yapan modeli barındırmak için gereken bir kaynak kümesidir. Aşağıdaki kod uç nokta için bir dağıtım oluşturur. Dağıtım kümeniz için GPU veya CPU VM SKU'larını kullanabilirsiniz.

ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v2 (geçerli)

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 

Dağıtımı oluştur

Daha önce oluşturduğunuz MLClient kullanarak dağıtımı çalışma alanında oluşturacaksınız. Bu komut dağıtım oluşturmayı başlatır ve dağıtım oluşturma işlemi devam ederken bir onay yanıtı döndürür.

ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v2 (geçerli)

az ml online-deployment create --file .\create_deployment.yml --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]

Trafiği güncelleştirme

Varsayılan olarak, geçerli dağıtım 0% trafik alacak şekilde ayarlanır. Geçerli dağıtımın alması gereken trafik yüzdesini ayarlayabilirsiniz. Bir uç noktaya sahip tüm dağıtımların trafik yüzdelerinin toplamı 100%'ı aşmamalıdır.

ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v2 (geçerli)

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]

Dağıtımı test et

ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v2 (geçerli)

CLI example not available. Use the Python SDK.

Algılamaları görselleştirme

Artık bir test görüntüsünü puanladığınıza göre, resmin sınırlayıcı kutularını görselleştirebilirsiniz. Bunu yapmak için Matplotlib'in yüklü olması gerekir.

ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v2 (geçerli)

CLI example not available. Use the Python SDK.

Kaynakları temizleme

Diğer Azure Machine Learning öğreticilerini tamamlamayı planlıyorsanız bu bölümü tamamlamayın.

Oluşturduğunuz kaynakları kullanmayı planlamıyorsanız, ücret ödememek için bunları silin.

  1. Azure portalında sol bölmedeki Kaynak grupları'nı seçin.
  2. Kaynak grupları listesinde, oluşturduğunuz kaynak grubunu seçin.
  3. Kaynak grubunu sil'i seçin.
  4. Kaynak grubu adını girin. Ardından Sil'i seçin.

Ayrıca kaynak grubunu koruyabilir, ancak tek bir çalışma alanını silebilirsiniz. Çalışma alanı sayfasına gidin ve Sil'i seçin.

Sonraki adımlar

Bu otomatik makine öğrenmesi öğreticisinde aşağıdaki görevleri tamamladınız:

  • Çalışma alanı yapılandırıldı ve deneme için veriler hazırlandı
  • Otomatik nesne algılama modeli eğitildi
  • Modeliniz için belirtilen hiper parametre değerleri
  • Hiper parametre taraması gerçekleştirildi
  • Modelinizi dağıttınız
  • Görselleştirilmiş algılamalar

Not

Buzdolabı nesneleri veri kümesinin kullanımı, MIT Lisansı altındaki lisans aracılığıyla kullanılabilir.