Skema data untuk melatih model visi komputer dengan pembelajaran mesin otomatis
BERLAKU UNTUK:Ekstensi ml Azure CLI v2 (saat ini)Python SDK azure-ai-ml v2 (saat ini)
Pelajari cara memformat file JSONL Anda untuk konsumsi data dalam eksperimen ML otomatis untuk tugas visi komputer selama pelatihan dan inferensi.
Skema data untuk pelatihan
Azure Machine Learning AutoML for Images memerlukan data gambar input yang harus disiapkan dalam format JSONL (JSON Lines). Bagian ini menjelaskan format atau skema data input untuk klasifikasi gambar multi-kelas, klasifikasi gambar multi-label, deteksi objek, dan segmentasi instans. Kami juga akan menyediakan sampel file JSON Lines pelatihan akhir atau validasi.
Klasifikasi gambar (biner/multi-kelas)
Format data input/skema di setiap JSON Line:
{
"image_url":"azureml://subscriptions/<my-subscription-id>/resourcegroups/<my-resource-group>/workspaces/<my-workspace>/datastores/<my-datastore>/paths/<path_to_image>",
"image_details":{
"format":"image_format",
"width":"image_width",
"height":"image_height"
},
"label":"class_name",
}
Kunci | Deskripsi | Contoh |
---|---|---|
image_url |
Lokasi gambar di azure Pembelajaran Mesin datastore. my-subscription-id harus digantikan oleh langganan Azure yang berisi citra. Informasi selengkapnya tentang langganan Azure dapat ditemukan di sini. Demikian pula my-resource-group , my-workspace , my-datastore masing-masing harus diganti dengan nama grup sumber daya, nama ruang kerja, dan nama penyimpanan data. path_to_image harus merupakan jalur lengkap menuju citra di penyimpanan data.Required, String |
"azureml://subscriptions/my-subscription-id/resourcegroups/my-resource-group/workspaces/my-workspace/datastores/my-datastore/paths/image_data/Image_01.jpg" |
image_details |
Detail gambarOptional, Dictionary |
"image_details":{"format": "jpg", "width": "400px", "height": "258px"} |
format |
Jenis gambar (semua format Gambar yang tersedia di pustaka Bantal didukung)Optional, String from {"jpg", "jpeg", "png", "jpe", "jfif","bmp", "tif", "tiff"} |
"jpg" or "jpeg" or "png" or "jpe" or "jfif" or "bmp" or "tif" or "tiff" |
width |
Lebar gambarOptional, String or Positive Integer |
"400px" or 400 |
height |
Tinggi gambarOptional, String or Positive Integer |
"200px" or 200 |
label |
Kelas/label gambarRequired, String |
"cat" |
Contoh file JSONL untuk klasifikasi gambar multi-kelas:
{"image_url": "azureml://subscriptions/my-subscription-id/resourcegroups/my-resource-group/workspaces/my-workspace/datastores/my-datastore/paths/image_data/Image_01.jpg", "image_details":{"format": "jpg", "width": "400px", "height": "258px"}, "label": "can"}
{"image_url": "azureml://subscriptions/my-subscription-id/resourcegroups/my-resource-group/workspaces/my-workspace/datastores/my-datastore/paths/image_data/Image_02.jpg", "image_details": {"format": "jpg", "width": "397px", "height": "296px"}, "label": "milk_bottle"}
.
.
.
{"image_url": "azureml://subscriptions/my-subscription-id/resourcegroups/my-resource-group/workspaces/my-workspace/datastores/my-datastore/paths/image_data/Image_n.jpg", "image_details": {"format": "jpg", "width": "1024px", "height": "768px"}, "label": "water_bottle"}
Klasifikasi gambar multi-label
Berikut ini adalah contoh format/skema data input di setiap JSON Line untuk klasifikasi gambar.
{
"image_url":"azureml://subscriptions/<my-subscription-id>/resourcegroups/<my-resource-group>/workspaces/<my-workspace>/datastores/<my-datastore>/paths/<path_to_image>",
"image_details":{
"format":"image_format",
"width":"image_width",
"height":"image_height"
},
"label":[
"class_name_1",
"class_name_2",
"class_name_3",
"...",
"class_name_n"
]
}
Kunci | Deskripsi | Contoh |
---|---|---|
image_url |
Lokasi gambar di azure Pembelajaran Mesin datastore. my-subscription-id harus digantikan oleh langganan Azure yang berisi citra. Informasi selengkapnya tentang langganan Azure dapat ditemukan di sini. Demikian pula my-resource-group , my-workspace , my-datastore masing-masing harus diganti dengan nama grup sumber daya, nama ruang kerja, dan nama penyimpanan data. path_to_image harus merupakan jalur lengkap menuju citra di penyimpanan data.Required, String |
"azureml://subscriptions/my-subscription-id/resourcegroups/my-resource-group/workspaces/my-workspace/datastores/my-datastore/paths/image_data/Image_01.jpg" |
image_details |
Detail gambarOptional, Dictionary |
"image_details":{"format": "jpg", "width": "400px", "height": "258px"} |
format |
Jenis gambar (semua format Gambar yang tersedia di pustaka Bantal didukung)Optional, String from {"jpg", "jpeg", "png", "jpe", "jfif", "bmp", "tif", "tiff"} |
"jpg" or "jpeg" or "png" or "jpe" or "jfif" or "bmp" or "tif" or "tiff" |
width |
Lebar gambarOptional, String or Positive Integer |
"400px" or 400 |
height |
Tinggi gambarOptional, String or Positive Integer |
"200px" or 200 |
label |
Daftar kelas/label dalam gambarRequired, List of Strings |
["cat","dog"] |
Contoh file JSONL untuk Klasifikasi Gambar Multi-label:
{"image_url": "azureml://subscriptions/my-subscription-id/resourcegroups/my-resource-group/workspaces/my-workspace/datastores/my-datastore/paths/image_data/Image_01.jpg", "image_details":{"format": "jpg", "width": "400px", "height": "258px"}, "label": ["can"]}
{"image_url": "azureml://subscriptions/my-subscription-id/resourcegroups/my-resource-group/workspaces/my-workspace/datastores/my-datastore/paths/image_data/Image_02.jpg", "image_details": {"format": "jpg", "width": "397px", "height": "296px"}, "label": ["can","milk_bottle"]}
.
.
.
{"image_url": "azureml://subscriptions/my-subscription-id/resourcegroups/my-resource-group/workspaces/my-workspace/datastores/my-datastore/paths/image_data/Image_n.jpg", "image_details": {"format": "jpg", "width": "1024px", "height": "768px"}, "label": ["carton","milk_bottle","water_bottle"]}
Deteksi objek
Berikut ini adalah contoh file JSONL untuk deteksi objek.
{
"image_url":"azureml://subscriptions/<my-subscription-id>/resourcegroups/<my-resource-group>/workspaces/<my-workspace>/datastores/<my-datastore>/paths/<path_to_image>",
"image_details":{
"format":"image_format",
"width":"image_width",
"height":"image_height"
},
"label":[
{
"label":"class_name_1",
"topX":"xmin/width",
"topY":"ymin/height",
"bottomX":"xmax/width",
"bottomY":"ymax/height",
"isCrowd":"isCrowd"
},
{
"label":"class_name_2",
"topX":"xmin/width",
"topY":"ymin/height",
"bottomX":"xmax/width",
"bottomY":"ymax/height",
"isCrowd":"isCrowd"
},
"..."
]
}
Di sini,
xmin
= koordinat x sudut kiri atas kotak pembatasymin
= koordinat y sudut kiri atas kotak pembatasxmax
= koordinat x sudut kanan bawah kotak pembatasymax
= koordinat y sudut kanan bawah kotak pembatas
Kunci | Deskripsi | Contoh |
---|---|---|
image_url |
Lokasi gambar di azure Pembelajaran Mesin datastore. my-subscription-id harus digantikan oleh langganan Azure yang berisi citra. Informasi selengkapnya tentang langganan Azure dapat ditemukan di sini. Demikian pula my-resource-group , my-workspace , my-datastore masing-masing harus diganti dengan nama grup sumber daya, nama ruang kerja, dan nama penyimpanan data. path_to_image harus merupakan jalur lengkap menuju citra di penyimpanan data.Required, String |
"azureml://subscriptions/my-subscription-id/resourcegroups/my-resource-group/workspaces/my-workspace/datastores/my-datastore/paths/image_data/Image_01.jpg" |
image_details |
Detail gambarOptional, Dictionary |
"image_details":{"format": "jpg", "width": "400px", "height": "258px"} |
format |
Jenis gambar (semua format Gambar yang tersedia di pustaka Pillow didukung. Tetapi untuk YOLO hanya format gambar yang diizinkan oleh opencv yang didukung)Optional, String from {"jpg", "jpeg", "png", "jpe", "jfif", "bmp", "tif", "tiff"} |
"jpg" or "jpeg" or "png" or "jpe" or "jfif" or "bmp" or "tif" or "tiff" |
width |
Lebar gambarOptional, String or Positive Integer |
"499px" or 499 |
height |
Tinggi gambarOptional, String or Positive Integer |
"665px" or 665 |
label (kunci luar) |
Daftar kotak pembatas, yang mana setiap kotak adalah kamus label, topX, topY, bottomX, bottomY, isCrowd koordinat kiri atas dan kanan bawah merekaRequired, List of dictionaries |
[{"label": "cat", "topX": 0.260, "topY": 0.406, "bottomX": 0.735, "bottomY": 0.701, "isCrowd": 0}] |
label (kunci dalam) |
Kelas/label objek dalam kotak pembatasRequired, String |
"cat" |
topX |
Rasio koordinat x dari sudut kiri atas kotak pembatas dan lebar gambarRequired, Float in the range [0,1] |
0.260 |
topY |
Rasio koordinat y dari sudut kiri atas kotak pembatas dan tinggi gambarRequired, Float in the range [0,1] |
0.406 |
bottomX |
Rasio koordinat x dari sudut kanan bawah kotak pembatas dan lebar gambarRequired, Float in the range [0,1] |
0.735 |
bottomY |
Rasio koordinat y dari sudut kanan bawah kotak pembatas dan tinggi gambarRequired, Float in the range [0,1] |
0.701 |
isCrowd |
Menunjukkan apakah kotak pembatas berada di sekitar kerumunan objek. Jika bendera khusus ini diatur, kita melompati kotak batas tertentu ini saat menghitung metrik.Optional, Bool |
0 |
Contoh file JSONL untuk deteksi objek:
{"image_url": "azureml://subscriptions/my-subscription-id/resourcegroups/my-resource-group/workspaces/my-workspace/datastores/my-datastore/paths/image_data/Image_01.jpg", "image_details": {"format": "jpg", "width": "499px", "height": "666px"}, "label": [{"label": "can", "topX": 0.260, "topY": 0.406, "bottomX": 0.735, "bottomY": 0.701, "isCrowd": 0}]}
{"image_url": "azureml://subscriptions/my-subscription-id/resourcegroups/my-resource-group/workspaces/my-workspace/datastores/my-datastore/paths/image_data/Image_02.jpg", "image_details": {"format": "jpg", "width": "499px", "height": "666px"}, "label": [{"label": "carton", "topX": 0.172, "topY": 0.153, "bottomX": 0.432, "bottomY": 0.659, "isCrowd": 0}, {"label": "milk_bottle", "topX": 0.300, "topY": 0.566, "bottomX": 0.891, "bottomY": 0.735, "isCrowd": 0}]}
.
.
.
{"image_url": "azureml://subscriptions/my-subscription-id/resourcegroups/my-resource-group/workspaces/my-workspace/datastores/my-datastore/paths/image_data/Image_n.jpg", "image_details": {"format": "jpg", "width": "499px", "height": "666px"}, "label": [{"label": "carton", "topX": 0.0180, "topY": 0.297, "bottomX": 0.380, "bottomY": 0.836, "isCrowd": 0}, {"label": "milk_bottle", "topX": 0.454, "topY": 0.348, "bottomX": 0.613, "bottomY": 0.683, "isCrowd": 0}, {"label": "water_bottle", "topX": 0.667, "topY": 0.279, "bottomX": 0.841, "bottomY": 0.615, "isCrowd": 0}]}
Segmentasi instans
Untuk segmentasi instans, ML otomatis hanya mendukung poligon sebagai input dan output, tidak ada masker.
Berikut ini adalah contoh file JSONL, misalnya, segmentasi.
{
"image_url":"azureml://subscriptions/<my-subscription-id>/resourcegroups/<my-resource-group>/workspaces/<my-workspace>/datastores/<my-datastore>/paths/<path_to_image>",
"image_details":{
"format":"image_format",
"width":"image_width",
"height":"image_height"
},
"label":[
{
"label":"class_name",
"isCrowd":"isCrowd",
"polygon":[["x1", "y1", "x2", "y2", "x3", "y3", "...", "xn", "yn"]]
}
]
}
Kunci | Deskripsi | Contoh |
---|---|---|
image_url |
Lokasi gambar di azure Pembelajaran Mesin datastore. my-subscription-id harus digantikan oleh langganan Azure yang berisi citra. Informasi selengkapnya tentang langganan Azure dapat ditemukan di sini. Demikian pula my-resource-group , my-workspace , my-datastore masing-masing harus diganti dengan nama grup sumber daya, nama ruang kerja, dan nama penyimpanan data. path_to_image harus merupakan jalur lengkap menuju citra di penyimpanan data.Required, String |
"azureml://subscriptions/my-subscription-id/resourcegroups/my-resource-group/workspaces/my-workspace/datastores/my-datastore/paths/image_data/Image_01.jpg" |
image_details |
Detail gambarOptional, Dictionary |
"image_details":{"format": "jpg", "width": "400px", "height": "258px"} |
format |
Jenis citraOptional, String from {"jpg", "jpeg", "png", "jpe", "jfif", "bmp", "tif", "tiff" } |
"jpg" or "jpeg" or "png" or "jpe" or "jfif" or "bmp" or "tif" or "tiff" |
width |
Lebar gambarOptional, String or Positive Integer |
"499px" or 499 |
height |
Tinggi gambarOptional, String or Positive Integer |
"665px" or 665 |
label (kunci luar) |
Daftar masker, di mana setiap masker adalah kamus label, isCrowd, polygon coordinates Required, List of dictionaries |
[{"label": "can", "isCrowd": 0, "polygon": [[0.577, 0.689, 0.562, 0.681, 0.559, 0.686]]}] |
label (kunci dalam) |
Kelas/label objek dalam maskerRequired, String |
"cat" |
isCrowd |
Menunjukkan apakah topeng berada di sekitar kerumunan objekOptional, Bool |
0 |
polygon |
Koordinat poligon untuk objekRequired, List of list for multiple segments of the same instance. Float values in the range [0,1] |
[[0.577, 0.689, 0.567, 0.689, 0.559, 0.686]] |
Contoh file JSONL untuk Segmentasi Instans:
{"image_url": "azureml://subscriptions/my-subscription-id/resourcegroups/my-resource-group/workspaces/my-workspace/datastores/my-datastore/paths/image_data/Image_01.jpg", "image_details": {"format": "jpg", "width": "499px", "height": "666px"}, "label": [{"label": "can", "isCrowd": 0, "polygon": [[0.577, 0.689, 0.567, 0.689, 0.559, 0.686, 0.380, 0.593, 0.304, 0.555, 0.294, 0.545, 0.290, 0.534, 0.274, 0.512, 0.2705, 0.496, 0.270, 0.478, 0.284, 0.453, 0.308, 0.432, 0.326, 0.423, 0.356, 0.415, 0.418, 0.417, 0.635, 0.493, 0.683, 0.507, 0.701, 0.518, 0.709, 0.528, 0.713, 0.545, 0.719, 0.554, 0.719, 0.579, 0.713, 0.597, 0.697, 0.621, 0.695, 0.629, 0.631, 0.678, 0.619, 0.683, 0.595, 0.683, 0.577, 0.689]]}]}
{"image_url": "azureml://subscriptions/my-subscription-id/resourcegroups/my-resource-group/workspaces/my-workspace/datastores/my-datastore/paths/image_data/Image_02.jpg", "image_details": {"format": "jpg", "width": "499px", "height": "666px"}, "label": [{"label": "carton", "isCrowd": 0, "polygon": [[0.240, 0.65, 0.234, 0.654, 0.230, 0.647, 0.210, 0.512, 0.202, 0.403, 0.182, 0.267, 0.184, 0.243, 0.180, 0.166, 0.186, 0.159, 0.198, 0.156, 0.396, 0.162, 0.408, 0.169, 0.406, 0.217, 0.414, 0.249, 0.422, 0.262, 0.422, 0.569, 0.342, 0.569, 0.334, 0.572, 0.320, 0.585, 0.308, 0.624, 0.306, 0.648, 0.240, 0.657]]}, {"label": "milk_bottle", "isCrowd": 0, "polygon": [[0.675, 0.732, 0.635, 0.731, 0.621, 0.725, 0.573, 0.717, 0.516, 0.717, 0.505, 0.720, 0.462, 0.722, 0.438, 0.719, 0.396, 0.719, 0.358, 0.714, 0.334, 0.714, 0.322, 0.711, 0.312, 0.701, 0.306, 0.687, 0.304, 0.663, 0.308, 0.630, 0.320, 0.596, 0.32, 0.588, 0.326, 0.579]]}]}
.
.
.
{"image_url": "azureml://subscriptions/my-subscription-id/resourcegroups/my-resource-group/workspaces/my-workspace/datastores/my-datastore/paths/image_data/Image_n.jpg", "image_details": {"format": "jpg", "width": "499px", "height": "666px"}, "label": [{"label": "water_bottle", "isCrowd": 0, "polygon": [[0.334, 0.626, 0.304, 0.621, 0.254, 0.603, 0.164, 0.605, 0.158, 0.602, 0.146, 0.602, 0.142, 0.608, 0.094, 0.612, 0.084, 0.599, 0.080, 0.585, 0.080, 0.539, 0.082, 0.536, 0.092, 0.533, 0.126, 0.530, 0.132, 0.533, 0.144, 0.533, 0.162, 0.525, 0.172, 0.525, 0.186, 0.521, 0.196, 0.521 ]]}, {"label": "milk_bottle", "isCrowd": 0, "polygon": [[0.392, 0.773, 0.380, 0.732, 0.379, 0.767, 0.367, 0.755, 0.362, 0.735, 0.362, 0.714, 0.352, 0.644, 0.352, 0.611, 0.362, 0.597, 0.40, 0.593, 0.444, 0.494, 0.588, 0.515, 0.585, 0.621, 0.588, 0.671, 0.582, 0.713, 0.572, 0.753 ]]}]}
Skema data untuk penilaian online
Di bagian ini, kami mendokumentasikan format data input yang diperlukan untuk membuat prediksi menggunakan model yang disebarkan.
Format input
JSON berikut adalah format input yang diperlukan untuk menghasilkan prediksi pada tugas apa pun menggunakan titik akhir model khusus tugas.
{
"input_data": {
"columns": [
"image"
],
"data": [
"image_in_base64_string_format"
]
}
}
Json ini adalah kamus columns
dengan kunci input_data
luar dan kunci dalam , data
seperti yang dijelaskan dalam tabel berikut. Titik akhir menerima string json dalam format di atas dan mengonversinya menjadi kerangka data sampel yang diperlukan oleh skrip penilaian. Setiap gambar input di bagian request_json["input_data"]["data"]
json adalah string yang dikodekan base64.
Kunci | Deskripsi |
---|---|
input_data (kunci luar) |
Ini adalah kunci luar dalam permintaan json. input_data adalah kamus yang menerima sampel gambar input Required, Dictionary |
columns (kunci dalam) |
Nama kolom yang akan digunakan untuk membuat dataframe. Ini hanya menerima satu kolom dengan image sebagai nama kolom.Required, List |
data (kunci dalam) |
Daftar gambar yang dikodekan base64 Required, List |
Setelah menyebarkan model mlflow, kita dapat menggunakan cuplikan kode berikut untuk mendapatkan prediksi untuk semua tugas.
# Create request json
import base64
sample_image = os.path.join(dataset_dir, "images", "1.jpg")
def read_image(image_path):
with open(image_path, "rb") as f:
return f.read()
request_json = {
"input_data": {
"columns": ["image"],
"data": [base64.encodebytes(read_image(sample_image)).decode("utf-8")],
}
}
import json
request_file_name = "sample_request_data.json"
with open(request_file_name, "w") as request_file:
json.dump(request_json, request_file)
resp = ml_client.online_endpoints.invoke(
endpoint_name=online_endpoint_name,
deployment_name=deployment.name,
request_file=request_file_name,
)
Format output
Prediksi yang dibuat pada titik akhir model mengikuti struktur yang berbeda tergantung pada jenis tugas. Bagian ini mengeksplorasi format data output untuk mtugas ulti-kelas, klasifikasi gambar multi-label, deteksi objek, dan segmentasi instans.
Skema berikut berlaku ketika permintaan input berisi satu gambar.
Klasifikasi gambar (biner/multi-kelas)
Titik akhir untuk klasifikasi gambar menampilkan semua label dalam dataset dan skor peluangnya untuk gambar input dalam format berikut. visualizations
dan attributions
terkait dengan keterjelaskan dan ketika permintaan hanya untuk penilaian, kunci ini tidak akan disertakan dalam output. Untuk informasi selengkapnya tentang skema input dan output kemampuan penjelasan untuk klasifikasi gambar, lihat bagian penjelasan untuk klasifikasi gambar.
[
{
"probs": [
2.098e-06,
4.783e-08,
0.999,
8.637e-06
],
"labels": [
"can",
"carton",
"milk_bottle",
"water_bottle"
]
}
]
Klasifikasi gambar multi-label
Untuk klasifikasi gambar multi-label, titik akhir model menampilkan label beserta peluangnya. visualizations
dan attributions
terkait dengan keterjelaskan dan ketika permintaan hanya untuk penilaian, kunci ini tidak akan disertakan dalam output. Untuk informasi selengkapnya tentang skema input dan output kemampuan penjelasan untuk klasifikasi multi-label, lihat bagian penjelasan untuk klasifikasi gambar multi-label.
[
{
"probs": [
0.997,
0.960,
0.982,
0.025
],
"labels": [
"can",
"carton",
"milk_bottle",
"water_bottle"
]
}
]
Deteksi objek
Model deteksi objek menampilkan beberapa kotak dengan koordinat kiri atas dan kanan bawah yang diskalakan sekaligus label kotak dan skor keyakinan.
[
{
"boxes": [
{
"box": {
"topX": 0.224,
"topY": 0.285,
"bottomX": 0.399,
"bottomY": 0.620
},
"label": "milk_bottle",
"score": 0.937
},
{
"box": {
"topX": 0.664,
"topY": 0.484,
"bottomX": 0.959,
"bottomY": 0.812
},
"label": "can",
"score": 0.891
},
{
"box": {
"topX": 0.423,
"topY": 0.253,
"bottomX": 0.632,
"bottomY": 0.725
},
"label": "water_bottle",
"score": 0.876
}
]
}
]
Segmentasi instans
Dalam segmentasi instans, output terdiri dari beberapa kotak dengan koordinat kiri atas dan kanan bawah yang diskalakan, label, skor keyakinan, dan poligon (bukan masker). Di sini, nilai poligon dalam format yang sama dengan yang kita bahas di bagian skema.
[
{
"boxes": [
{
"box": {
"topX": 0.679,
"topY": 0.491,
"bottomX": 0.926,
"bottomY": 0.810
},
"label": "can",
"score": 0.992,
"polygon": [
[
0.82, 0.811, 0.771, 0.810, 0.758, 0.805, 0.741, 0.797, 0.735, 0.791, 0.718, 0.785, 0.715, 0.778, 0.706, 0.775, 0.696, 0.758, 0.695, 0.717, 0.698, 0.567, 0.705, 0.552, 0.706, 0.540, 0.725, 0.520, 0.735, 0.505, 0.745, 0.502, 0.755, 0.493
]
]
},
{
"box": {
"topX": 0.220,
"topY": 0.298,
"bottomX": 0.397,
"bottomY": 0.601
},
"label": "milk_bottle",
"score": 0.989,
"polygon": [
[
0.365, 0.602, 0.273, 0.602, 0.26, 0.595, 0.263, 0.588, 0.251, 0.546, 0.248, 0.501, 0.25, 0.485, 0.246, 0.478, 0.245, 0.463, 0.233, 0.442, 0.231, 0.43, 0.226, 0.423, 0.226, 0.408, 0.234, 0.385, 0.241, 0.371, 0.238, 0.345, 0.234, 0.335, 0.233, 0.325, 0.24, 0.305, 0.586, 0.38, 0.592, 0.375, 0.598, 0.365
]
]
},
{
"box": {
"topX": 0.433,
"topY": 0.280,
"bottomX": 0.621,
"bottomY": 0.679
},
"label": "water_bottle",
"score": 0.988,
"polygon": [
[
0.576, 0.680, 0.501, 0.680, 0.475, 0.675, 0.460, 0.625, 0.445, 0.630, 0.443, 0.572, 0.440, 0.560, 0.435, 0.515, 0.431, 0.501, 0.431, 0.433, 0.433, 0.426, 0.445, 0.417, 0.456, 0.407, 0.465, 0.381, 0.468, 0.327, 0.471, 0.318
]
]
}
]
}
]
Format data untuk Penilaian dan Penjelasan Online (XAI)
Penting
Pengaturan ini saat ini dalam pratinjau publik. Mereka disediakan tanpa perjanjian tingkat layanan. Fitur tertentu mungkin tidak didukung atau mungkin memiliki kemampuan terbatas. Untuk mengetahui informasi selengkapnya, lihat Ketentuan Penggunaan Tambahan untuk Pratinjau Microsoft Azure.
Peringatan
Penjelasan hanya didukung untuk klasifikasi multi-kelas dan klasifikasi multi-label. Saat menghasilkan penjelasan tentang titik akhir online, jika Anda mengalami masalah waktu habis, gunakan buku catatan penilaian batch (SDK v1) untuk menghasilkan penjelasan.
Di bagian ini, kami mendokumentasikan format data input yang diperlukan untuk membuat prediksi dan menghasilkan penjelasan untuk kelas/kelas yang diprediksi menggunakan model yang disebarkan. Tidak ada penyebaran terpisah yang diperlukan untuk penjelasan. Titik akhir yang sama untuk penilaian online dapat digunakan untuk menghasilkan penjelasan. Kita hanya perlu meneruskan beberapa parameter terkait penjelasan tambahan dalam skema input dan mendapatkan visualisasi penjelasan dan/atau matriks skor atribusi (penjelasan tingkat piksel).
Metode penjelasan yang didukung:
- XRAI (xrai)
- Gradien Terintegrasi (integrated_gradients)
- GradCAM Terpandu (guided_gradcam)
- BackPropagation Terpandu (guided_backprop)
Format input (XAI)
Format input berikut didukung untuk menghasilkan prediksi dan penjelasan pada tugas klasifikasi apa pun menggunakan titik akhir model khusus tugas. Setelah menyebarkan model, kita dapat menggunakan skema berikut untuk mendapatkan prediksi dan penjelasan.
{
"input_data": {
"columns": ["image"],
"data": [json.dumps({"image_base64": "image_in_base64_string_format",
"model_explainability": True,
"xai_parameters": {}
})
]
}
}
Bersama dengan gambar, ada dua parameter tambahan (model_explainability
dan xai_parameters
) yang diperlukan dalam skema input untuk menghasilkan penjelasan.
Kunci | Deskripsi | Nilai Default |
---|---|---|
image_base64 |
gambar input dalam format base64Required, String |
- |
model_explainability |
Apakah akan menghasilkan penjelasan atau hanya penilaianOptional, Bool |
False |
xai_parameters |
Jika model_explainability True, maka xai_parameters adalah kamus yang berisi parameter terkait algoritma penjelasan dengan xai_algorithm , visualizations , attributions tanyakan kunci. Optional, Dictionary Jika xai_parameters tidak diteruskan, algoritma xrai kemampuan penjelasan digunakan dengan nilai defaultnya |
{"xai_algorithm": "xrai", "visualizations": True, "attributions": False} |
xai_algorithm |
Nama algoritma Penjelasan yang akan digunakan. Algoritma XAI yang didukung adalah {xrai , , integrated_gradients guided_gradcam , guided_backprop }Optional, String |
xrai |
visualizations |
Apakah akan mengembalikan visualisasi penjelasan. Optional, Bool |
True |
attributions |
Apakah akan mengembalikan atribusi fitur. Optional, Bool |
False |
confidence_score_threshold_multilabel |
Ambang skor keyakinan untuk memilih kelas teratas untuk menghasilkan penjelasan dalam klasifikasi multi-label. Optional, Float |
0.5 |
Tabel berikut menjelaskan skema yang didukung untuk penjelasan.
Jenis | Skema |
---|---|
Inferensi pada gambar tunggal dalam format base64 | Kamus dengan image_base64 sebagai kunci dan nilai adalah gambar yang dikodekan base64, model_explainability kunci dengan True atau False dan xai_parameters kamus dengan parameter khusus algoritma XAI Required, Json String Works for one or more images |
Setiap gambar input dalam request_json
, yang ditentukan dalam kode di bawah ini, adalah string berkode base64 yang ditambahkan ke daftar request_json["input_data"]["data"]
:
import base64
import json
# Get the details for online endpoint
endpoint = ml_client.online_endpoints.get(name=online_endpoint_name)
sample_image = "./test_image.jpg"
# Define explainability (XAI) parameters
model_explainability = True
xai_parameters = {"xai_algorithm": "xrai",
"visualizations": True,
"attributions": False}
def read_image(image_path):
with open(image_path, "rb") as f:
return f.read()
# Create request json
request_json = {
"input_data": {
"columns": ["image"],
"data": [json.dumps({"image_base64": base64.encodebytes(read_image(sample_image)).decode("utf-8"),
"model_explainability": model_explainability,
"xai_parameters": xai_parameters})],
}
}
request_file_name = "sample_request_data.json"
with open(request_file_name, "w") as request_file:
json.dump(request_json, request_file)
resp = ml_client.online_endpoints.invoke(
endpoint_name=online_endpoint_name,
deployment_name=deployment.name,
request_file=request_file_name,
)
predictions = json.loads(resp)
Format output (XAI)
Prediksi yang dibuat pada titik akhir model mengikuti skema yang berbeda tergantung pada jenis tugas. Bagian ini menjelaskan format data output untuk tugas klasifikasi gambar multi-kelas multi-label.
Skema berikut didefinisikan untuk kasus dua gambar input.
Klasifikasi gambar (biner/multi-kelas)
Skema output sama seperti yang dijelaskan di atas kecuali bahwa visualizations
dan attributions
nilai kunci disertakan, jika kunci ini diatur ke True
dalam permintaan.
Jika model_explainability
, visualizations
, attributions
diatur ke True
dalam permintaan input, maka output akan memiliki visualizations
dan attributions
. Detail selengkapnya tentang parameter ini dijelaskan dalam tabel berikut. Visualisasi dan atribusi dihasilkan terhadap kelas yang memiliki skor probabilitas tertinggi.
Kunci output | Deskripsi |
---|---|
visualizations |
Gambar tunggal dalam format string base64 dengan jenis Optional, String |
attributions |
array multi-dimensi dengan skor atribusi piksel bijaksana bentuk [3, valid_crop_size, valid_crop_size] Optional, List |
[
{
"probs": [
0.006,
9.345e-05,
0.992,
0.003
],
"labels": [
"can",
"carton",
"milk_bottle",
"water_bottle"
],
"visualizations": "iVBORw0KGgoAAAAN.....",
"attributions": [[[-4.2969e-04, -1.3090e-03, 7.7791e-04, ..., 2.6677e-04,
-5.5195e-03, 1.7989e-03],
.
.
.
[-5.8236e-03, -7.9108e-04, -2.6963e-03, ..., 2.6517e-03,
1.2546e-03, 6.6507e-04]]]
}
]
Klasifikasi gambar multi-label
Satu-satunya perbedaan dalam skema output klasifikasi multi-label dibandingkan dengan klasifikasi multi-kelas adalah bahwa mungkin ada beberapa kelas di setiap gambar yang penjelasannya dapat dihasilkan. Jadi, visualizations
adalah daftar string gambar base64 dan attributions
merupakan daftar skor atribusi terhadap setiap kelas yang dipilih berdasarkan confidence_score_threshold_multilabel
(defaultnya adalah 0,5).
Jika model_explainability
, visualizations
, attributions
diatur ke True
dalam permintaan input, maka output akan memiliki visualizations
dan attributions
. Detail selengkapnya tentang parameter ini dijelaskan dalam tabel berikut. Visualisasi dan atribusi dihasilkan terhadap semua kelas yang memiliki skor probabilitas lebih besar dari atau sama dengan confidence_score_threshold_multilabel
.
Kunci output | Deskripsi |
---|---|
visualizations |
Daftar gambar dalam format string base64 dengan jenis Optional, String |
attributions |
Daftar array multi-dimensi dengan skor atribusi piksel bijaksana terhadap setiap kelas, di mana setiap array multi-dimensi berbentuk [3, valid_crop_size, valid_crop_size] Optional, List |
Peringatan
Saat menghasilkan penjelasan tentang titik akhir online, pastikan untuk memilih hanya beberapa kelas berdasarkan skor keyakinan untuk menghindari masalah batas waktu pada titik akhir atau menggunakan titik akhir dengan jenis instans GPU. Untuk menghasilkan penjelasan untuk sejumlah besar kelas dalam klasifikasi multi-label, lihat buku catatan penilaian batch (SDK v1).
[
{
"probs": [
0.994,
0.994,
0.843,
0.166
],
"labels": [
"can",
"carton",
"milk_bottle",
"water_bottle"
],
"visualizations": ["iVBORw0KGgoAAAAN.....", "iVBORw0KGgoAAAAN......", .....],
"attributions": [
[[[-4.2969e-04, -1.3090e-03, 7.7791e-04, ..., 2.6677e-04,
-5.5195e-03, 1.7989e-03],
.
.
.
[-5.8236e-03, -7.9108e-04, -2.6963e-03, ..., 2.6517e-03,
1.2546e-03, 6.6507e-04]]],
.
.
.
]
}
]
Deteksi objek
Peringatan
XAI tidak didukung. Jadi, hanya skor yang dikembalikan. Untuk contoh penilaian, lihat bagian penilaian online.
Segmentasi instans
Peringatan
XAI tidak didukung. Jadi, hanya skor yang dikembalikan. Untuk contoh penilaian, lihat bagian penilaian online.
Catatan
Gambar yang digunakan dalam artikel ini berasal dari himpunan data Fridge Objects, hak cipta © Microsoft Corporation dan tersedia di computervision-recipes/01_training_introduction.ipynb di bawah Lisensi MIT.