Tutorial: Melatih model deteksi objek dengan AutoML dan Python

BERLAKU UNTUK:Ekstensi ml Azure CLI v2 (saat ini)Python SDK azure-ai-ml v2 (saat ini)

Dalam tutorial ini, Anda mempelajari cara melatih model deteksi objek menggunakan ML otomatis Azure Machine Learning dengan ekstensi CLI Azure Machine Learning v2 atau Azure Machine Learning Python SDK v2. Model deteksi objek ini mengidentifikasi apakah citra berisi objek, seperti kaleng, karton, botol susu, atau botol air.

ML otomatis menerima data dan konfigurasi pengaturan latihan, dan secara otomatis melakukan iterasi melalui kombinasi metode normalisasi/standarisasi fitur, model, dan pengaturan hyperparameter yang berbeda untuk menemukan model terbaik.

Anda menulis kode menggunakan Python SDK dalam tutorial ini dan mempelajari tugas-tugas berikut:

  • Mengunduh dan mengubah data
  • Melatih model deteksi objek pembelajaran mesin otomatis
  • Menentukan nilai hyperparameter untuk model Anda
  • Melakukan sapuan hyperparameter
  • sebarkan model anda
  • Memvisualisasikan deteksi

Prasyarat

  • Untuk menggunakan Azure Machine Learning, Anda memerlukan ruang kerja terlebih dahulu. Jika Anda tidak memilikinya, selesaikan Buat sumber daya yang Anda perlukan untuk mulai membuat ruang kerja dan pelajari selengkapnya tentang menggunakannya.

  • Python 3.6 atau 3.7 memiliki dukungan untuk fitur ini

  • Unduh dan ekstrak file data *odFridgeObjects.zip. Himpunan data dianotasi dalam format Pascal VOC, di mana setiap gambar sesuai dengan file xml. Setiap file xml berisi informasi letak file gambar yang sesuai berada dan juga berisi informasi tentang kotak batas dan label objek. Untuk menggunakan data ini, pertama Anda harus mengonversinya ke format JSONL yang diperlukan seperti yang terlihat di bagian Konversi data yang diunduh ke JSONL buku catatan.

  • Gunakan instans komputasi untuk mengikuti tutorial ini tanpa penginstalan lebih lanjut. (Lihat cara membuat instans komputasi.) Atau instal CLI/SDK untuk menggunakan lingkungan lokal Anda sendiri.

    BERLAKU UNTUK:Ekstensi ml Azure CLI v2 (saat ini)

    Tutorial juga tersedia di repositori azureml-examples di GitHub. Jika Anda ingin menjalankannya di lingkungan lokal Anda sendiri:

Penyiapan target komputasi

Catatan

Untuk mencoba komputasi tanpa server (pratinjau), lewati langkah ini dan lanjutkan ke Penyiapan eksperimen.

Anda harus terlebih dahulu menyiapkan target komputasi untuk digunakan pada pelatihan model ML otomatis Anda. Model ML otomatis untuk tugas citra memerlukan SKU GPU.

Tutorial ini menggunakan seri NCsv3 (dengan GPU V100) karena jenis target komputasi ini menggunakan beberapa GPU untuk mempercepat pelatihan. Selain itu, Anda dapat menyiapkan beberapa simpul untuk memanfaatkan paralelisme saat menyetel hyperparameter untuk model Anda.

Kode berikut membuat komputasi GPU berukuran Standard_NC24s_v3 dengan empat node.

BERLAKU UNTUK:Ekstensi ml Azure CLI v2 (saat ini)

Buat file .yml dengan konfigurasi berikut.

$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

Untuk membuat komputasi, jalankan perintah CLI v2 berikut dengan jalur ke file .yml, nama ruang kerja, grup sumber daya, dan ID langganan Anda.

az ml compute create -f [PATH_TO_YML_FILE] --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]

Penyiapan eksperimen

Anda dapat menggunakan Eksperimen untuk melacak pekerjaan pelatihan model Anda.

BERLAKU UNTUK:Ekstensi ml Azure CLI v2 (saat ini)

Nama eksperimen dapat disediakan menggunakan kunci experiment_name sebagai berikut:

experiment_name: dpv2-cli-automl-image-object-detection-experiment

Visualisasikan data input

Setelah Anda memiliki data citra input yang disiapkan dalam format JSONL (JSON Lines), Anda dapat memvisualisasikan kotak pembatas kebenaran dasar untuk citra. Untuk melakukannya, pastikan Anda telah memasang 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))

Dengan menggunakan fungsi pembantu di atas, untuk citra apa pun, Anda dapat menjalankan kode berikut untuk menampilkan kotak pembatas.

image_file = "./odFridgeObjects/images/31.jpg"
jsonl_file = "./odFridgeObjects/train_annotations.jsonl"

plot_ground_truth_boxes_jsonl(image_file, jsonl_file)

Mengunggah data dan membuat MLTable

Untuk menggunakan data untuk pelatihan, unggah data ke Blob Storage default Ruang Kerja Azure Machine Learning Anda dan daftarkan sebagai aset. Manfaat mendaftarkan data adalah:

  • Mudah dibagikan dengan anggota tim lain
  • Penerapan versi metadata (lokasi, deskripsi, dll.)
  • Pelacakan silsilah data

BERLAKU UNTUK:Ekstensi ml Azure CLI v2 (saat ini)

Buat file .yml dengan konfigurasi berikut.

$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

Untuk mengunggah gambar sebagai aset data, jalankan perintah CLI v2 berikut dengan jalur ke file .yml, nama ruang kerja, grup sumber daya, dan ID langganan Anda.

az ml data create -f [PATH_TO_YML_FILE] --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]

Langkah selanjutnya adalah membuat MLTable dari data Anda dalam format jsonl seperti yang ditunjukkan di bawah ini. MLtable data mengemas data Anda menjadi objek yang dapat digunakan untuk pelatihan.

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

BERLAKU UNTUK:Ekstensi ml Azure CLI v2 (saat ini)

Konfigurasi berikut membuat data pelatihan dan validasi dari MLTable.

target_column_name: label
training_data:
  path: data/training-mltable-folder
  type: mltable
validation_data:
  path: data/validation-mltable-folder
  type: mltable

Mengonfigurasi eksperimen deteksi objek Anda

Untuk mengonfigurasi pekerjaan ML otomatis untuk tugas terkait gambar, buat tugas tertentu pekerjaan AutoML.

BERLAKU UNTUK:Ekstensi ml Azure CLI v2 (saat ini)

Untuk menggunakan komputasi tanpa server (pratinjau), ganti baris compute: azureml:gpu-cluster dengan kode ini:

resources:
 instance_type: Standard_NC24s_v3
 instance_count: 4
task: image_object_detection
primary_metric: mean_average_precision
compute: azureml:gpu-cluster

Pembersihan hiperparameter otomatis untuk tugas gambar (AutoMode)

Penting

Fitur ini sedang dalam pratinjau umum. Versi pratinjau ini disediakan tanpa perjanjian tingkat layanan. Fitur tertentu mungkin tidak didukung atau mungkin memiliki kemampuan terbatas. Untuk informasi lebih lanjut, lihat Ketentuan Penggunaan Tambahan untuk Pratinjau Microsoft Azure.

Dalam pekerjaan AutoML Anda, Anda dapat melakukan pembersihan hyperparameter otomatis untuk menemukan model optimal (kami menyebut fungsi ini AutoMode). Anda hanya menentukan jumlah uji coba; ruang pencarian hyperparameter, metode pengambilan sampel, dan kebijakan penghentian dini tidak diperlukan. Sistem akan secara otomatis menentukan wilayah ruang hiperparameter untuk menyapu berdasarkan jumlah uji coba. Nilai antara 10 dan 20 kemungkinan akan berfungsi dengan baik pada banyak himpunan data.

BERLAKU UNTUK:Ekstensi ml Azure CLI v2 (saat ini)

limits:
  max_trials: 10
  max_concurrent_trials: 2

Anda kemudian dapat mengirimkan pekerjaan untuk melatih model gambar.

BERLAKU UNTUK:Ekstensi ml Azure CLI v2 (saat ini)

Untuk mengirimkan pekerjaan AutoML, jalankan perintah CLI v2 berikut dengan jalur ke file .yml, nama ruang kerja, grup sumber daya, dan ID langganan Anda.

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]

Pembersihan hiperparameter manual untuk tugas gambar

Dalam pekerjaan AutoML, Anda dapat menentukan arsitektur model dengan menggunakan model_name parameter dan mengonfigurasi pengaturan untuk melakukan pembersihan hyperparameter di atas ruang pencarian yang ditentukan untuk menemukan model optimal.

Dalam contoh ini, kita akan melatih model deteksi objek dengan yolov5 dan fasterrcnn_resnet50_fpn, yang keduanya telah dilatih sebelumnya pada COCO, deteksi objek skala besar, segmentasi, dan himpunan data keterangan yang berisi lebih dari ribuan gambar berlabel dengan lebih dari 80 kategori label.

Anda dapat melakukan pembersihan hyperparameter pada ruang pencarian yang ditentukan untuk menemukan model yang optimal.

Batas untuk pekerjaan

Anda dapat mengontrol sumber daya yang dihabiskan untuk pekerjaan pelatihan AutoML Image Anda dengan menentukan timeout_minutes, max_trials dan max_concurrent_trials untuk pekerjaan dalam pengaturan batas. Lihat deskripsi terperinci tentang parameter Batas Pekerjaan.

BERLAKU UNTUK:Ekstensi ml Azure CLI v2 (saat ini)

limits:
  timeout_minutes: 60
  max_trials: 10
  max_concurrent_trials: 2

Kode berikut mendefinisikan ruang pencarian sebagai persiapan untuk sapuan hyperparameter untuk setiap arsitektur yang ditentukan, yolov5 dan fasterrcnn_resnet50_fpn. Dalam ruang pencarian, tentukan rentang nilai untuk learning_rate, optimizer, lr_scheduler, dll, yang akan dipilih oleh AutoML saat mencoba menghasilkan model dengan metrik primer yang optimal. Jika nilai hyperparameter tidak ditentukan, maka nilai default digunakan untuk setiap arsitektur.

Untuk pengaturan penyetelan, gunakan pengambilan sampel acak untuk memilih sampel dari ruang parameter ini dengan menggunakan sampling_algorithm random. Batas pekerjaan yang dikonfigurasi di atas, memberi tahu ML otomatis untuk mencoba total 10 uji coba dengan sampel yang berbeda ini, menjalankan dua uji coba pada satu waktu pada target komputasi kami, yang disiapkan menggunakan empat simpul. Semakin banyak parameter pencarian, semakin banyak percobaan yang Anda butuhkan untuk menemukan model yang optimal.

Kebijakan penghentian awal Bandit juga digunakan. Kebijakan ini mengakhiri uji coba berkinerja buruk; artinya, uji coba yang tidak dalam 20% kendur dari uji coba berkinerja terbaik, yang secara signifikan menyimpan sumber daya komputasi.

BERLAKU UNTUK:Ekstensi ml Azure CLI v2 (saat ini)

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]

Setelah ruang pencarian dan pengaturan pembersihan ditentukan, Anda kemudian dapat mengirimkan pekerjaan untuk melatih model citra menggunakan set data pelatihan Anda.

BERLAKU UNTUK:Ekstensi ml Azure CLI v2 (saat ini)

Untuk mengirimkan pekerjaan AutoML, jalankan perintah CLI v2 berikut dengan jalur ke file .yml, nama ruang kerja, grup sumber daya, dan ID langganan Anda.

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]

Saat melakukan pembersihan hyperparameter, akan berguna untuk memvisualisasikan berbagai uji coba yang dicoba menggunakan antarmuka pengguna HyperDrive. Anda dapat menavigasi ke UI ini dengan masuk ke tab 'Pekerjaan anak' di UI automl_image_job utama dari atas, yang merupakan pekerjaan induk HyperDrive. Kemudian Anda dapat masuk ke tab 'Pekerjaan anak' yang satu ini.

Atau, di sini di bawah ini Anda dapat melihat langsung pekerjaan induk HyperDrive dan menavigasi ke tab 'Pekerjaan anak':

BERLAKU UNTUK:Ekstensi ml Azure CLI v2 (saat ini)

CLI example not available, please use Python SDK.

Mendaftarkan dan menggunakan model

Setelah pekerjaan selesai, Anda dapat mendaftarkan model yang dibuat dari uji coba terbaik (konfigurasi yang menghasilkan metrik utama terbaik). Anda dapat mendaftarkan model setelah mengunduh atau dengan menentukan azureml jalur dengan yang jobidsesuai.

Dapatkan uji coba terbaik

BERLAKU UNTUK:Ekstensi ml Azure CLI v2 (saat ini)

CLI example not available, please use Python SDK.

Daftarkan model

Daftarkan model baik menggunakan azureml jalur atau jalur yang diunduh secara lokal.

BERLAKU UNTUK:Ekstensi ml Azure CLI v2 (saat ini)

 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]

Setelah mendaftarkan model yang ingin digunakan, Anda dapat menyebarkannya menggunakan titik akhir online terkelola deploy-managed-online-endpoint

Mengonfigurasi titik akhir online

BERLAKU UNTUK:Ekstensi ml Azure CLI v2 (saat ini)

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
name: od-fridge-items-endpoint
auth_mode: key

Membuat titik akhir

Dengan menggunakan MLClient yang dibuat sebelumnya, kita sekarang akan membuat Titik Akhir di ruang kerja. Perintah ini memulai pembuatan titik akhir dan mengembalikan respons konfirmasi saat pembuatan titik akhir berlanjut.

BERLAKU UNTUK:Ekstensi ml Azure CLI v2 (saat ini)

az ml online-endpoint create --file .\create_endpoint.yml --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]

Kita juga dapat membuat titik akhir batch untuk inferensi batch pada data dalam volume besar selama periode waktu tertentu. Lihat buku catatan penilaian batch deteksi objek untuk inferensi batch menggunakan titik akhir batch.

Mengonfigurasi penyebaran online

Penyebaran adalah kumpulan sumber daya yang diperlukan untuk menghosting model yang melakukan inferensi aktual. Kami membuat penyebaran untuk titik akhir kami menggunakan ManagedOnlineDeployment kelas . Anda dapat menggunakan GPU atau CPU VM SKU untuk kluster penyebaran Anda.

BERLAKU UNTUK:Ekstensi ml Azure CLI v2 (saat ini)

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 

Membuat penyebaran

Dengan menggunakan yang MLClient dibuat sebelumnya, kita akan membuat penyebaran di ruang kerja. Perintah ini memulai pembuatan penyebaran dan mengembalikan respons konfirmasi saat pembuatan penyebaran berlanjut.

BERLAKU UNTUK:Ekstensi ml Azure CLI v2 (saat ini)

az ml online-deployment create --file .\create_deployment.yml --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]

Memperbarui lalu lintas:

Secara default penyebaran saat ini diatur untuk menerima 0% lalu lintas. Anda dapat mengatur persentase lalu lintas yang harus diterima penyebaran saat ini. Jumlah persentase lalu lintas dari semua penyebaran dengan satu titik akhir tidak boleh melebihi 100%.

BERLAKU UNTUK:Ekstensi ml Azure CLI v2 (saat ini)

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]

Menguji penyebaran

BERLAKU UNTUK:Ekstensi ml Azure CLI v2 (saat ini)

CLI example not available, please use Python SDK.

Memvisualisasikan deteksi

Sekarang setelah Anda menilai citra uji, Anda dapat memvisualisasikan kotak pembatas untuk citra ini. Untuk melakukannya, pastikan Anda telah memasang matplotlib.

BERLAKU UNTUK:Ekstensi ml Azure CLI v2 (saat ini)

CLI example not available, please use Python SDK.

Membersihkan sumber daya

Jangan selesaikan bagian ini jika Anda berencana menjalankan tutorial Azure Machine Learning lainnya.

Jika Anda tidak berencana menggunakan sumber daya yang Anda buat, hapus sehingga Anda tidak dikenakan biaya apa pun.

  1. Dari portal Azure, pilih Grup sumber daya dari sisi sebelah kiri.
  2. Dari daftar, pilih grup sumber daya yang Anda buat.
  3. Pilih Hapus grup sumber daya.
  4. Masukkan nama grup sumber daya. Kemudian pilih Hapus.

Anda juga dapat menyimpan grup sumber daya, tetapi menghapus satu ruang kerja. Tampilkan properti ruang kerja dan pilih Hapus.

Langkah berikutnya

Dalam tutorial pembelajaran mesin otomatis ini, Anda telah melakukan tugas-tugas berikut:

  • Mengonfigurasi ruang kerja dan menyiapkan data untuk eksperimen.
  • Melatih model deteksi objek otomatis
  • Menentukan nilai hyperparameter untuk model Anda
  • Melakukan sapuan hyperparameter
  • Menyebarkan model Anda
  • Memvisualisasikan deteksi

Catatan

Penggunaan himpunan data objek kulkas tersedia melalui lisensi di bawah Lisensi MIT.