البرنامج التعليمي: تدريب نموذج الكشف عن العناصر باستخدام AutoML وPython
ينطبق على:ملحق التعلم الآلي من Azure CLI v2 (الحالي)Python SDK azure-ai-ml v2 (الحالي)
في هذا البرنامج التعليمي، ستتعلم كيفية تدريب نموذج الكشف عن العناصر باستخدام التعلم الآلي التلقائي من Microsoft Azure مع ملحق Azure Machine Learning CLI v2 أو Python SDK v2 للتعلم الآلي من Microsoft Azure. يحدد نموذج الكشف عن الكائنات هذا ما إذا كانت الصورة تحتوي على كائنات، مثل علبة أو كرتونة أو زجاجة حليب أو زجاجة مياه.
يقبل التعلم الآلي التلقائي بيانات التدريب وإعدادات التكوين، والتكرار تلقائياً من خلال مجموعات من أساليب تطبيع / توحيد الميزات المختلفة، والنماذج، وإعدادات فرط القياس للوصول إلى أفضل نموذج.
يمكنك كتابة التعليمات البرمجية باستخدام Python SDK في هذا البرنامج التعليمي وتعلم المهام التالية:
- تنزيل البيانات وتحويلها
- تدريب نموذج الكشف الآلي عن كائن التعلم الآلي
- تحديد قيم فرط المقاييس للنموذج الخاص بك
- إجراء مسح فرط المقاييس
- نشر النموذج الخاص بك
- تصور الاكتشافات
المتطلبات الأساسية
-
لاستخدام التعلم الآلي من Microsoft Azure، ستحتاج أولا إلى مساحة عمل. إذا لم يكن لديك واحد، فأكمل إنشاء الموارد التي تحتاجها للبدء في إنشاء مساحة عمل ومعرفة المزيد حول استخدامها.
تكون إصدارات Python 3.6 أو 3.7 مدعومة لهذه الميزة
قم بتنزيل ملف البيانات *odFridgeObjects.zip وإلغاء ضغطه. يتم شرح مجموعة البيانات بتنسيق Pascal VOC، حيث تتوافق كل صورة مع ملف xml. يحتوي كل ملف xml على معلومات حول مكان وجود ملف الصورة المقابل له ويحتوي أيضا على معلومات حول مربعات الإحاطة وتسميات العناصر. لاستخدام هذه البيانات، تحتاج أولا إلى تحويلها إلى تنسيق JSONL المطلوب كما هو ملاحظ في قسم تحويل البيانات المنزلة إلى JSONL في دفتر الملاحظات.
استخدم مثيل حساب لمتابعة هذا البرنامج التعليمي دون مزيد من التثبيت. (راجع كيفية إنشاء مثيل حساب.) أو قم بتثبيت CLI/SDK لاستخدام بيئتك المحلية.
ينطبق على:ملحق Azure CLI ml الإصدار 2 (الحالي)
يتاح هذا البرنامج التعليمي أيضا في مستودع أمثلة azureml على GitHub. إذا كنت ترغب في تشغيله في البيئة المحلية الخاصة بك:
- قم بتثبيت وإعداد CLI (v2) واحرص على تثبيت الملحق
ml
.
- قم بتثبيت وإعداد CLI (v2) واحرص على تثبيت الملحق
حساب إعداد الهدف
ملاحظة
لتجربة الحوسبة بلا خادم (معاينة)، تخطي هذه الخطوة وانتقل إلى إعداد التجربة.
تحتاج أولاً إلى حساب إعداد الهدف لاستخدامه في تدريب نموذج التعلم الآلي. تتطلب نماذج التعلم الآلي لمهام الصور وحدات معالجة الرسومات GPU SKUs.
يستخدم هذا البرنامج التعليمي سلسلة NCsv3 (مع وحدات معالجة الرسومات V100) لأن هذا النوع من هدف الحساب يستخدم وحدات معالجة الرسومات المتعددة لتسريع التدريب. بالإضافة إلى ذلك، يمكنك إعداد عقد متعددة للاستفادة من التوازي عند ضبط المقاييس الفائقة للنموذج الخاص بك.
تقوم التعليمة البرمجية التالية بإنشاء حساب GPU للحجم Standard_NC24s_v3
بأربع عقد.
ينطبق على:ملحق Azure CLI ml v2 (الحالي)
إنشاء ملف yml باستخدام التكوين التالي.
$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
لإنشاء الحساب، يمكنك تشغيل أمر الإصدار 2 من CLI الآتي مع المسار إلى ملف .yml واسم مساحة العمل ومجموعة الموارد ومعرّف الاشتراك.
az ml compute create -f [PATH_TO_YML_FILE] --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]
إعداد التجربة
يمكنك استخدام تجربة لتتبع مهام تدريب النموذج.
يطبق على:ملحق Azure CLI ml v2 (الحالي)
يمكن توفير اسم التجربة باستخدام المفتاح experiment_name
كما يأتي:
experiment_name: dpv2-cli-automl-image-object-detection-experiment
تصور بيانات الإدخال
بمجرد الانتهاء من بيانات صورة الإدخال المُعدة بتنسيق JSONL (خطوط JSON)، يمكنك تصور مربعات الحقيقة الأرضية المحيطة بالصورة. للقيام بذلك، تأكد من 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))
باستخدام وظائف المساعد أعلاه، لأي صورة معينة، يمكنك تشغيل التعليمات البرمجية التالية لعرض مربعات الحدود.
image_file = "./odFridgeObjects/images/31.jpg"
jsonl_file = "./odFridgeObjects/train_annotations.jsonl"
plot_ground_truth_boxes_jsonl(image_file, jsonl_file)
تحميل البيانات وإنشاء MLTable
لاستخدام البيانات للتدريب، قم بتحميل البيانات إلى Blob Storage الافتراضي لمساحة عمل التعلم الآلي من Microsoft Azure وتسجيلها كأصل. فوائد تسجيل البيانات هي كما يلي:
- سهولة المشاركة مع الأعضاء الآخرين في الفريق
- تعيين إصدار لبيانات التعريف (الموقع والوصف وما إلى ذلك)
- تعقب دورة الحياة للبيانات
ينطبق على:ملحق Azure CLI ml v2 (الحالي)
إنشاء ملف yml باستخدام التكوين التالي.
$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
لتحميل الصورة كأصل للبيانات، يمكنك تشغيل أمر CLI v2 الآتي مع المسار إلى ملف .yml واسم مساحة العمل ومجموعة الموارد ومعرّف الاشتراك.
az ml data create -f [PATH_TO_YML_FILE] --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]
الخطوة التالية هي لإنشاء MLTable
من بياناتك بتنسيق jsonl كما هو مبين أدناه. تقوم MLtable بتجميع بياناتك في عنصر مستهلك للتدريب.
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
يطبق على:ملحق Azure CLI ml v2 (الحالي)
التكوين التالي بإنشاء بيانات تدريب وتحقق من الصحة من MLTable.
target_column_name: label
training_data:
path: data/training-mltable-folder
type: mltable
validation_data:
path: data/validation-mltable-folder
type: mltable
تكوين تجربة اكتشاف الكائنات
لتكوين مهام التعلم الآلي المؤتمتة للمهام المتعلقة بالصور، قم بإنشاء مهمة AutoML محددة للمهمة.
ينطبق على:ملحق Azure CLI ml v2 (الحالي)
لاستخدام الحوسبة بلا خادم (معاينة)، استبدل السطر
compute: azureml:gpu-cluster
بهذه التعليمة البرمجية:resources: instance_type: Standard_NC24s_v3 instance_count: 4
task: image_object_detection
primary_metric: mean_average_precision
compute: azureml:gpu-cluster
مسح المعلمات الفائقة التلقائي لمهام الصور (AutoMode)
هام
تُعد هذه الميزة قيد المعاينة العامة في الوقت الحالي. يتم توفير إصدار المعاينة هذا من دون اتفاقية مستوى الخدمة. بعض الميزات ربما لا تكون مدعمة أو بها بعض القدرات المقيدة لمزيد من المعلومات، راجع شروط الاستخدام التكميلية لمعاينات Microsoft Azure.
في وظيفة AutoML الخاصة بك، يمكنك إجراء مسح تلقائي للمسارات الفائقة من أجل العثور على النموذج الأمثل (نسميها هذه الوظيفة AutoMode). يمكنك تحديد عدد الإصدارات التجريبية فقط؛ لا توجد حاجة إلى مساحة بحث المعلمة الفائقة وطريقة أخذ العينات ونهج الإنهاء المبكر. سيحدد النظام تلقائيا منطقة مساحة المعلمة الفائقة للمسح استنادا إلى عدد التجارب. من المحتمل أن تعمل القيمة بين 10 و20 بشكل جيد على العديد من مجموعات البيانات.
ينطبق على:ملحق Azure CLI ml v2 (الحالي)
limits:
max_trials: 10
max_concurrent_trials: 2
يمكنك بعد ذلك إرسال المهمة لتدريب نموذج صورة.
يطبق على:ملحق Azure CLI ml v2 (الحالي)
لإرسال وظيفة AutoML، يمكنك تشغيل أمر CLI v2 التالي مع المسار إلى ملف .yml واسم مساحة العمل ومجموعة الموارد ومعرّف الاشتراك.
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]
مسح المعلمات الفائقة يدويا لمهام الصور
في مهمة AutoML، يمكنك تحديد بنيات النموذج باستخدام model_name
المعلمة وتكوين الإعدادات لإجراء مسح المعلمات الفائقة عبر مساحة بحث محددة للعثور على النموذج الأمثل.
في هذا المثال، سندرب نموذج الكشف عن العناصر باستخدام yolov5
و fasterrcnn_resnet50_fpn
، وكلاهما مدرب مسبقا على COCO، وهي مجموعة بيانات واسعة النطاق للكشف عن الكائنات وتجزئتها وتسمياتها التوضيحية التي تحتوي على أكثر من آلاف الصور المسماة مع أكثر من 80 فئة تسمية.
يمكنك إجراء مسح للمعلمات الفائقة فوق مساحة بحث محددة للعثور على النموذج الأمثل.
حدود الوظيفة
يمكنك التحكم في الموارد التي تم إنفاقها على مهمة تدريب AutoML Image عن طريق تحديد timeout_minutes
و max_trials
للوظيفة max_concurrent_trials
في إعدادات الحد. راجع وصفا مفصلا لمعلمات حدود الوظيفة.
ينطبق على:ملحق Azure CLI ml v2 (الحالي)
limits:
timeout_minutes: 60
max_trials: 10
max_concurrent_trials: 2
تحدد التعليمات البرمجية التالية مساحة البحث استعدادا لمسح المعلمات الفائقة لكل بنية محددة، yolov5
و fasterrcnn_resnet50_fpn
. في مساحة البحث، حدد نطاق القيم لـ learning_rate
، optimizer
، lr_scheduler
، إلخ، لكي يختار AutoML من بينها أثناء محاولته إنشاء نموذج باستخدام القياس الأساسي الأمثل. إذا لم يتم تحديد قيم المعلمات الفائقة، فسيتم استخدام القيم الافتراضية لكل بنية.
بالنسبة لإعدادات الضبط، قم بأخذ عينات عشوائية لأخذ عينات من مساحة المعلمة هذه باستخدام random
sampling_algorithm. حدود المهمة التي تم تكوينها أعلاه، تخبر التعلم الآلي المؤتمت بتجربة ما مجموعه 10 تجارب مع هذه العينات المختلفة، وتشغيل تجربتين في كل مرة على هدف الحساب الخاص بنا، والذي تم إعداده باستخدام أربع عقد. كلما زاد عدد المعلمات التي تحتوي عليها المساحة، كلما زاد عدد التجارب التي تحتاجها للعثور على النماذج المثلى.
كما يتم استخدام نهج الإنهاء المبكر لـ Bandit. تنهي هذه السياسة التجارب الضعيفة الأداء؛ أي تلك التجارب التي ليست ضمن فترة السماح بنسبة 20٪ من الإصدار التجريبي الأفضل أداء، ما يوفر بشكل كبير موارد الحوسبة.
ينطبق على:ملحق Azure CLI ml v2 (الحالي)
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]
بمجرد تحديد مساحة البحث وإعدادات المسح، يمكنك بعد ذلك تقديم الوظيفة لتدريب نموذج الصورة باستخدام مجموعة بيانات تدريبك.
يطبق على:ملحق Azure CLI ml v2 (الحالي)
لإرسال وظيفة AutoML، يمكنك تشغيل أمر CLI v2 التالي مع المسار إلى ملف .yml واسم مساحة العمل ومجموعة الموارد ومعرّف الاشتراك.
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]
عند إجراء مسح المعلمات الفائقة، يمكن أن يكون من المفيد تصور الإصدارات التجريبية المختلفة التي تمت تجربتها باستخدام واجهة مستخدم HyperDrive. يمكنك الانتقال إلى واجهة المستخدم هذه بالانتقال إلى علامة التبويب "الوظائف التابعة" في واجهة المستخدم automl_image_job الرئيسية من الأعلى، وهي الوظيفة الأصل ل HyperDrive. ثم يمكنك الانتقال إلى علامة التبويب "الوظائف التابعة" لهذه الوظيفة.
بدلا من ذلك، هنا أدناه يمكنك أن ترى مباشرة مهمة HyperDrive الأصل والانتقال إلى علامة التبويب "الوظائف التابعة":
ينطبق على:ملحق Azure CLI ml v2 (الحالي)
CLI example not available, please use Python SDK.
تسجيل النموذج ونشره
بمجرد اكتمال المهمة، يمكنك تسجيل النموذج الذي تم إنشاؤه من أفضل تجربة (التكوين الذي أدى إلى أفضل مقياس أساسي). يمكنك إما تسجيل النموذج بعد التنزيل أو عن طريق تحديد azureml
المسار مع المطابقة jobid
.
الحصول على أفضل تجربة
ينطبق على:ملحق Azure CLI ml v2 (الحالي)
CLI example not available, please use Python SDK.
تسجيل النموذج
سجل النموذج إما باستخدام azureml
المسار أو المسار الذي تم تنزيله محليا.
ينطبق على:ملحق Azure CLI ml v2 (الحالي)
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]
بعد تسجيل النموذج الذي تريد استخدامه، يمكنك توزيعه باستخدام نقطة النهاية المُدارة عبر الإنترنت deploy-managed-online-endpoint
تكوين نقطة النهاية عبر الإنترنت
ينطبق على:ملحق Azure CLI ml v2 (الحالي)
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
name: od-fridge-items-endpoint
auth_mode: key
أنشئ نقطة النهاية
باستخدام MLClient
الذي تم إنشاؤه مسبقاً، سننشئ الآن نقطة النهاية في مساحة العمل. يبدأ هذا الأمر في إنشاء نقطة النهاية وإرجاع استجابة تأكيد أثناء استمرار إنشاء نقطة النهاية.
ينطبق على:ملحق Azure CLI ml v2 (الحالي)
az ml online-endpoint create --file .\create_endpoint.yml --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]
يمكننا أيضا إنشاء نقطة نهاية دفعية للاستدلال الدفعي على كميات كبيرة من البيانات على مدى فترة زمنية. تحقق من دفتر ملاحظات تسجيل دفعة الكشف عن الكائنات للاستدلال الدفعي باستخدام نقطة نهاية الدفعة.
تكوين التوزيع عبر الإنترنت
يشكل التوزيع مجموعة من الموارد اللازمة لاستضافة النموذج الذي يقوم بالاستدلال الفعلي. نقوم بإنشاء توزيع لنقطة النهاية الخاصة بنا باستخدام ManagedOnlineDeployment
الفئة . يمكنك استخدام وحدات SKU لوحدة معالجة الرسومات أو وحدة المعالجة المركزية الظاهرية لمجموعة التوزيع لديك.
ينطبق على:ملحق Azure CLI ml v2 (الحالي)
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
إنشاء النشر
باستخدام الذي MLClient
تم إنشاؤه مسبقا، سنقوم بإنشاء التوزيع في مساحة العمل. يبدأ هذا الأمر في إنشاء النشر وإرجاع استجابة تأكيد أثناء استمرار إنشاء النشر.
ينطبق على:ملحق Azure CLI ml v2 (الحالي)
az ml online-deployment create --file .\create_deployment.yml --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]
تحديث نسبة استخدام الشبكة:
يُعيّن التوزيع الحالي بشكل افتراضي لتلقي 0% من نسبة استخدام الشبكة. يمكنك تعيين النسبة المئوية لنسبة استخدام الشبكة التي يجب أن يتلقاها التوزيع الحالي. مجموع النسب المئوية لنسبة استخدام الشبكة لجميع عمليات التوزيع ذات نقطة نهاية واحدة يجب ألا يتجاوز 100٪.
ينطبق على:ملحق Azure CLI ml v2 (الحالي)
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]
اختبار النشر
ينطبق على:ملحق Azure CLI ml v2 (الحالي)
CLI example not available, please use Python SDK.
تصور الاكتشافات
الآن بعد أن قمت بتسجيل صورة اختبار، يمكنك تصور مربعات الحدود لهذه الصورة. للقيام بذلك، تأكد من أن matplotlib مثبت لديك.
ينطبق على:ملحق Azure CLI ml v2 (الحالي)
CLI example not available, please use Python SDK.
تنظيف الموارد
لا تكمل هذا القسم إذا كنت تخطط لتشغيل برامج تعليمية أخرى للتعلم الآلي من Microsoft Azure.
إذا كنت لا تخطط لاستخدام الموارد التي أنشأتها، فاحذفها، حتى لا تتحمل أي رسوم.
- ومن مدخل Microsoft Azure، حدد Resource groups من أقصى الجانب الأيمن.
- من القائمة، حدد مجموعة الموارد التي أنشأتها.
- حدد Delete resource group.
- أدخل اسم مجموعة الموارد. ثم حدد «Delete».
يمكنك أيضًا الاحتفاظ بمجموعة الموارد، ولكن احذف مساحة عمل واحدة. عرض خصائص مساحة العمل، وحدد حذف.
الخطوات التالية
في هذا البرنامج التعليمي للتعلم الآلي التلقائي، أتممت المهام التالية:
- تكوين مساحة عمل وإعداد بيانات لتجربة.
- التدريب على نموذج الكشف الآلي عن الكائنات
- قيم المعلمة الفائقة المُحددة للنموذج الخاص بك
- إجراء مسح المعلمة الفائقة
- نشر النموذج الخاص بك
- اكتشافات مرئية
تعرف على المزيد حول رؤية الكمبيوتر في التعلم الآلي التلقائي.
تعرف على كيفية إعداد AutoML لتدريب نماذج رؤية الكمبيوتر باستخدام Python.
أمثلة للتعليمة البرمجية:
ينطبق على:ملحق Azure CLI ml الإصدار 2 (الحالي)
- راجع الأمثلة التفصيلية للتعليمات البرمجية وحالات الاستخدام في مستودع أمثلة azureml لعينات التعلم الآلي التلقائي. تحقق من المجلدات باستخدام بادئة "cli-automl-image-" للعينات الخاصة ببناء نماذج رؤية الكمبيوتر.
ملاحظة
يتوفر استخدام مجموعة بيانات كائنات البراد من خلال الترخيص بموجب ترخيص MIT.