Öğ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, 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öntemlerinin, modellerinin 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ğı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 bu çalışma alanını kullanma hakkında daha fazla bilgi edinmek için ihtiyacınız olan kaynakları oluşturma'yı tamamlayın.
Bu özellik için Python 3.9 veya 3.10 desteklenir
odFridgeObjects.zip veri dosyasını indirin ve sıkıştırmasını açın*. Her 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 bulunduğu yerle ilgili 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 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. işlem örneği oluşturma.) Veya CLI/SDK'yi yükleyip kendi yerel ortamınızı kullanabilirsiniz.
Ş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.
- CLI'yı (v2) yükleyip ayarlayın ve uzantıyı yüklediğinizden
İşlem hedefi kurulumu
Not
Sunucusuz işlemi (önizleme) denemek için bu adımı atlayın ve Deneme kurulumuna 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üğümlü boyuta Standard_NC24s_v3
sahip 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ı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 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 temel gerçeklik sınırlayıcı kutularını 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 için Azure Machine Learning Çalışma Alanınızın varsayılan Blob Depolama alanına veri 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 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ırsınız.
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 nesneye paketleyin.
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ı
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 Ek Kullanım Koşulları.
AutoML işinizde, en uygun modeli bulmak için otomatik bir hiper parametre taraması gerçekleştirebilirsiniz (bu işleve AutoMode diyoruz). 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
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, 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 açıklamalı alt yazı veri kümesi olan ve fasterrcnn_resnet50_fpn
ile bir nesne algılama modeli yolov5
eğiteceğiz.
En uygun modeli bulmak için tanımlı bir arama alanı üzerinde hiper parametre taraması gerçekleştirebilirsiniz.
İş sınırları
AutoML Görüntü eğitim işinizde harcanan kaynakları, sınır ayarlarında işin ve max_concurrent_trials
öğesini belirterek timeout_minutes
max_trials
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, tanımlanan her mimari yolov5
ve fasterrcnn_resnet50_fpn
için hiper parametre taramasına hazırlık olarak 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_rate
aralığını belirtin. Hiper parametre değerleri belirtilmezse, her mimari için varsayılan değerler kullanılır.
Ayarlama ayarları için, sampling_algorithm kullanarak bu parametre alanından örnekler seçmek için rastgele örnekleme kullanın random
. 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 deneme 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'sinde 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 yolunu ilgili jobid
ile 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 kaydedin
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 çalışma alanında Uç Nokta oluşturacağı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]
Ayrıca, belirli bir süre boyunca büyük hacimli verilerde toplu çıkarım için bir toplu iş uç noktası oluşturabiliriz. Toplu iş 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
Daha önce oluşturulan öğesini MLClient
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. Tek 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, ücret ödememek için bunları silin.
- Azure portalının en sol tarafındaki Kaynak gruplarını seçin.
- Listeden oluşturduğunuz kaynak grubunu seçin.
- Kaynak grubunu sil'i seçin.
- 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 yerine getirin:
- Bir ç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
Otomatik ML'de görüntü işleme hakkında daha fazla bilgi edinin.
Python ile görüntü işleme modellerini eğitmek için AutoML'yi ayarlamayı öğrenin.
Görüntü işleme modellerinde artımlı eğitimi yapılandırmayı öğrenin.
Görüntü işleme görevleri için hangi hiper parametrelerin kullanılabilir olduğunu görün.
Kod örnekleri:
ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v2 (geçerli)
Not
Buzdolabı nesneleri veri kümesinin kullanımı, MIT Lisansı altındaki lisans aracılığıyla kullanılabilir.