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:
- Instal dan siapkan CLI (v2) dan pastikan Anda menginstal ekstensi
ml
.
- Instal dan siapkan CLI (v2) dan pastikan Anda menginstal ekstensi
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 jobid
sesuai.
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.
- Dari portal Azure, pilih Grup sumber daya dari sisi sebelah kiri.
- Dari daftar, pilih grup sumber daya yang Anda buat.
- Pilih Hapus grup sumber daya.
- 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
Pelajari cara menyiapkan AutoML untuk melatih model visi komputer dengan Python.
Pelajari cara mengonfigurasi pelatihan bertambah bertahap pada model visi komputer.
Lihat hyperparameter apa yang tersedia untuk tugas visi komputer.
Contoh kode:
BERLAKU UNTUK:Ekstensi ml Azure CLI v2 (saat ini)
- Tinjau contoh kode terperinci dan kasus penggunaan di repositori azureml-examples untuk sampel pembelajaran mesin otomatis. Periksa folder dengan awalan 'cli-automl-image-' untuk sampel khusus untuk membangun model visi komputer.
Catatan
Penggunaan himpunan data objek kulkas tersedia melalui lisensi di bawah Lisensi MIT.