Bagikan melalui


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 gambar
Optional, 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 gambar
Optional, String or Positive Integer
"400px" or 400
height Tinggi gambar
Optional, String or Positive Integer
"200px" or 200
label Kelas/label gambar
Required, 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"}

Contoh gambar untuk klasifikasi gambar multikelas.

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 gambar
Optional, 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 gambar
Optional, String or Positive Integer
"400px" or 400
height Tinggi gambar
Optional, String or Positive Integer
"200px" or 200
label Daftar kelas/label dalam gambar
Required, 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"]}

Contoh gambar untuk klasifikasi gambar multilabel.

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 pembatas
  • ymin = koordinat y sudut kiri atas kotak pembatas
  • xmax = koordinat x sudut kanan bawah kotak pembatas
  • ymax = 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 gambar
Optional, 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 gambar
Optional, String or Positive Integer
"499px" or 499
height Tinggi gambar
Optional, 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 mereka
Required, 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 pembatas
Required, String
"cat"
topX Rasio koordinat x dari sudut kiri atas kotak pembatas dan lebar gambar
Required, Float in the range [0,1]
0.260
topY Rasio koordinat y dari sudut kiri atas kotak pembatas dan tinggi gambar
Required, Float in the range [0,1]
0.406
bottomX Rasio koordinat x dari sudut kanan bawah kotak pembatas dan lebar gambar
Required, Float in the range [0,1]
0.735
bottomY Rasio koordinat y dari sudut kanan bawah kotak pembatas dan tinggi gambar
Required, 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}]}

Contoh gambar untuk deteksi objek.

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 gambar
Optional, Dictionary
"image_details":{"format": "jpg", "width": "400px", "height": "258px"}
format Jenis citra
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 gambar
Optional, String or Positive Integer
"499px" or 499
height Tinggi gambar
Optional, 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 masker
Required, String
"cat"
isCrowd Menunjukkan apakah topeng berada di sekitar kerumunan objek
Optional, Bool
0
polygon Koordinat poligon untuk objek
Required, 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 ]]}]}

Contoh gambar untuk segmentasi instans.

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 columnsdengan 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:

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 base64
Required, String
-
model_explainability Apakah akan menghasilkan penjelasan atau hanya penilaian
Optional, 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_gradientsguided_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.

Langkah berikutnya