Öğ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.
- 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 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 yolov5
fasterrcnn_resnet50_fpn
eğ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_minutes
max_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_fpn
iç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_rate
aralığı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 jobid
ile 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.
- 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 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
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)
- Otomatik makine öğrenmesi örnekleri için azureml-samples deposunda ayrıntılı kod örneklerini ve kullanım örneklerini gözden geçirin. Görüntü işleme modelleri oluşturmaya özgü örnekler için 'cli-automl-image-' ön ekine sahip klasörleri denetleyin.
Not
Buzdolabı nesneleri veri kümesinin kullanımı , MIT Lisansı altındaki lisans aracılığıyla kullanılabilir.