البرنامج التعليمي: تدريب نموذج الكشف عن العناصر باستخدام 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. إذا كنت ترغب في تشغيله في البيئة المحلية الخاصة بك:

حساب إعداد الهدف

ملاحظة

لتجربة الحوسبة بلا خادم (معاينة)، تخطي هذه الخطوة وانتقل إلى إعداد التجربة.

تحتاج أولاً إلى حساب إعداد الهدف لاستخدامه في تدريب نموذج التعلم الآلي. تتطلب نماذج التعلم الآلي لمهام الصور وحدات معالجة الرسومات 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.

إذا كنت لا تخطط لاستخدام الموارد التي أنشأتها، فاحذفها، حتى لا تتحمل أي رسوم.

  1. ومن مدخل Microsoft Azure، حدد Resource groups من أقصى الجانب الأيمن.
  2. من القائمة، حدد مجموعة الموارد التي أنشأتها.
  3. حدد Delete resource group.
  4. أدخل اسم مجموعة الموارد. ثم حدد «Delete».

يمكنك أيضًا الاحتفاظ بمجموعة الموارد، ولكن احذف مساحة عمل واحدة. عرض خصائص مساحة العمل، وحدد حذف.

الخطوات التالية

في هذا البرنامج التعليمي للتعلم الآلي التلقائي، أتممت المهام التالية:

  • تكوين مساحة عمل وإعداد بيانات لتجربة.
  • التدريب على نموذج الكشف الآلي عن الكائنات
  • قيم المعلمة الفائقة المُحددة للنموذج الخاص بك
  • إجراء مسح المعلمة الفائقة
  • نشر النموذج الخاص بك
  • اكتشافات مرئية

ملاحظة

يتوفر استخدام مجموعة بيانات كائنات البراد من خلال الترخيص بموجب ترخيص MIT.