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

Ş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, görüntünün kutu, karton, süt şişesi veya su şişesi gibi nesneler içerip içermediğini belirler.

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 süpürme işlemi gerçekleştirme
  • Modelinizi dağıtma
  • Algılamaları görselleştirme

Önkoşullar

  • Azure Machine Learning'i kullanmak için öncelikle bir çalışma alanı gerekir. Bir çalışma alanınız yoksa, çalışma alanı oluşturmaya başlamak ve çalışma alanını kullanma hakkında daha fazla bilgi edinmek için ihtiyacınız olan kaynakları oluşturma işlemini tamamlayın.

  • Bu özellik için Python 3.6 veya 3.7 desteklenir

  • odFridgeObjects.zipveri dosyasını indirin ve sıkıştırmasını * açın. Veri kümesine Pascal VOC biçiminde açıklama eklenir ve her görüntü bir xml dosyasına karşılık gelir. Her xml dosyası, karşılık gelen görüntü dosyasının bulunduğu yer hakkında bilgi içerir ve ayrıca sınırlayıcı kutular ve nesne etiketleri hakkında bilgi içerir. Bu verileri kullanmak için, önce not defterinin İndirilen verileri JSONL'ye dönüştürme bölümünde görüldüğü gibi gerekli JSONL biçimine dönüştürmeniz gerekir.

  • Daha fazla yükleme yapmadan bu öğreticiyi izlemek için bir işlem örneği kullanın. (Bkz. İşlem örneği oluşturma.) Veya kendi yerel ortamınızı kullanmak için CLI/SDK'yi yükleyin.

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

    Bu öğretici, GitHub'daki azureml-examples deposunda da kullanılabilir. Kendi 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.

İşlem hedefi kurulumu

Not

Sunucusuz işlemi (önizleme) denemek için bu adımı atlayın ve Deneme kurulumu'na geçin.

Ö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'lar ile) kullanılır. Ayrıca, modeliniz için hiper parametreleri ayarlarken paralellikten yararlanmak için birden çok düğüm ayarlayabilirsiniz.

Aşağıdaki kod, dört düğümle boyutta Standard_NC24s_v3 bir GPU hesaplaması 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_NC24s_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ın.

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 deneme kullanabilirsiniz.

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

Deneme adı aşağıdaki gibi anahtar kullanılarak experiment_name sağlanabilir:

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 gerçek sınırlayıcı kutuları görselleştirebilirsiniz. Bunu yapmak için yüklediğinizden matplotlib 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))

Yukarıdaki yardımcı işlevleri kullanarak, belirli bir görüntü için 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 karşıya yükleme ve MLTable oluşturma

Verileri eğitim için kullanmak üzere Azure Machine Learning Çalışma Alanınızın varsayılan Blob Depolama alanına yükleyin ve bir 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 bir 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ğıda gösterildiği gibi jsonl biçiminde verilerinizden oluşturmaktır MLTable . MLtable, verilerinizi eğitim için tüketilebilir bir nesne olarak 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)

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

resources:
 instance_type: Standard_NC24s_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)

Önemli

Bu özellik şu anda genel önizlemededir. Bu önizleme sürümü hizmet düzeyi sözleşmesi olmadan sağlanır. Bazı özellikler desteklenmiyor olabileceği gibi özellikleri sınırlandırılmış da olabilir. Daha fazla bilgi için bkz. Microsoft Azure Önizlemeleri için Ek Kullanım Koşulları.

AutoML işinizde, en uygun modeli bulmak için otomatik bir hiper parametre süpürme işlemi gerçekleştirebilirsiniz (biz bu işlevi AutoMode olarak adlandırıyoruz). 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ürilecek 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 sonuç verir.

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

limits:
  max_trials: 10
  max_concurrent_trials: 2

Ardından 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 en uygun modeli bulmak için tanımlı bir arama alanı üzerinde hiper parametre taraması gerçekleştirmek için ayarları yapılandırabilirsiniz.

Bu örnekte, her ikisi de 80'den fazla etiket kategorisine sahip binlerce etiketli görüntü içeren büyük ölçekli nesne algılama, segmentasyon ve açıklamalı alt yazı veri kümesi olan VE ile bir nesne algılama modeli yolov5fasterrcnn_resnet50_fpneğiteceğiz.

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

İş sınırları

Sınır ayarlarında işin ve max_concurrent_trials öğesini belirterek timeout_minutesmax_trials AutoML Görüntü eğitim işinizde harcanan kaynakları denetleyebilirsiniz. İş Sınırları parametreleriyle ilgili ayrıntılı açıklamaya 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 tanımlanan her mimari ve fasterrcnn_resnet50_fpniçin hiper parametre süpürme hazırlığında arama alanını tanımlar. Arama alanında, AutoML'nin en uygun birincil ölçüme sahip bir model oluşturmaya çalışırken aralarından seçim yapmak için , optimizer, lr_scheduler, vb. için değer learning_ratearalığını belirtin. Hiper parametre değerleri belirtilmezse, her mimari için varsayılan değerler kullanılır.

Ayarlama ayarları için rastgele örnekleme kullanarak sampling_algorithm kullanarak random bu parametre alanından örnekler seçin. Yukarıda yapılandırılan iş sınırları, otomatik ML'ye bu farklı örneklerle toplam 10 deneme denemesi gerçekleştirmesini ve işlem hedefimizde aynı anda iki deneme çalıştırmasını söyler ve bu da dört düğüm kullanılarak ayarlanmıştır. Arama alanında ne kadar çok parametre varsa, en uygun modelleri bulmak için o kadar fazla deneme gerekir.

Eşkıya erken sonlandırma ilkesi de kullanılır. Bu ilke düşük performanslı denemeleri sonlandırır; yani en iyi performansa sahip denemenin %20'si içinde olmayan denemeler, işlem 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ı tanımlandı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, ç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]

Hiper parametre taraması yaparken, HyperDrive kullanıcı arabirimi kullanılarak denenen farklı denemeleri görselleştirmek yararlı olabilir. HyperDrive üst işi olan yukarıdan ana automl_image_job kullanıcı arabirimindeki 'Alt işler' sekmesine giderek bu kullanıcı arabirimine gidebilirsiniz. Ardından bunun 'Alt işler' sekmesine gidebilirsiniz.

Alternatif olarak, burada doğrudan HyperDrive üst işini görebilir ve 'Alt işler' sekmesine gidebilirsiniz:

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

CLI example not available, please use Python SDK.

Modeli kaydetme ve dağıtma

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

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, please use Python SDK.

Modeli kaydetme

Yolu veya yerel olarak indirdiğiniz yolu kullanarak azureml modeli 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ç nokta deploy-managed-online-endpoint 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şturulan öğesini MLClient kullanarak şimdi uç noktayı çalışma alanında oluşturacağız. Bu komut uç nokta oluşturma işlemini 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]

Ayrıca, belirli bir süre boyunca büyük hacimli verilerde toplu çıkarım için bir toplu iş uç noktası oluşturabiliriz. Batch uç noktasını kullanarak toplu çıkarım için nesne algılama toplu puanlama not defterine göz atı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. sınıfını ManagedOnlineDeployment kullanarak uç noktamız için bir dağıtım oluştururuz. 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şturma

MLClient Daha önce oluşturulan öğesini kullanarak dağıtımı çalışma alanında oluşturacağız. Bu komut dağıtım oluşturma işlemini 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 ayarlanmıştır. geçerli dağıtımın alması gereken trafik yüzdesini ayarlayabilirsiniz. Bir uç noktası olan 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 etme

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

CLI example not available, please use Python SDK.

Algılamaları görselleştirme

Artık bir test görüntüsü puanladığınıza göre, bu görüntü için sınırlayıcı kutuları görselleştirebilirsiniz. Bunu yapmak için matplotlib'in yüklü olduğundan emin olun.

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

CLI example not available, please use Python SDK.

Kaynakları temizleme

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

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

  1. Azure portalının en sol tarafındaki Kaynak gruplarını seçin.
  2. Listeden 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ı özelliklerini görüntüleyin ve Sil'i seçin.

Sonraki adımlar

Bu otomatik makine öğrenmesi öğreticisinde aşağıdaki görevleri gerçekleştirdiniz:

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

Not

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