Datascheman för att träna modeller för visuellt innehåll med automatiserad maskininlärning

GÄLLER FÖR:Azure CLI ml extension v2 (aktuell)Python SDK azure-ai-ml v2 (aktuell)

Lär dig hur du formaterar dina JSONL-filer för dataförbrukning i automatiserade ML-experiment för uppgifter med visuellt innehåll under träning och slutsatsdragning.

Dataschema för träning

Azure Machine Learning AutoML for Images kräver att indata för avbildningar förbereds i JSONL-format (JSON Lines). I det här avsnittet beskrivs indataformat eller scheman för bildklassificering i flera klasser, bildklassificering med flera etiketter, objektidentifiering och instanssegmentering. Vi kommer också att tillhandahålla ett exempel på en slutgiltig JSON Lines-fil för träning eller validering.

Bildklassificering (binär/flerklass)

Indataformat/schema på varje JSON-rad:

{
   "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",
}
Nyckel Beskrivning Exempel
image_url Bildplats i Azure Machine Learning-datalager.
my-subscription-id måste ersättas av Azure-prenumerationen där avbildningar finns. Mer information om Azure-prenumerationer finns här. my-resource-groupmy-workspacePå samma sätt bör , my-datastore ersättas med resursgruppsnamn, arbetsytenamn respektive datalagernamn.
path_to_image ska vara den fullständiga sökvägen till avbildningen i dataarkivet.
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 Bildinformation
Optional, Dictionary
"image_details":{"format": "jpg", "width": "400px", "height": "258px"}
format Bildtyp (alla tillgängliga bildformat i Pillow-biblioteket stöds)
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 Bildens bredd
Optional, String or Positive Integer
"400px" or 400
height Bildens höjd
Optional, String or Positive Integer
"200px" or 200
label Klass/etikett för bilden
Required, String
"cat"

Exempel på en JSONL-fil för bildklassificering i flera klasser:

{"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"}

Bildexempel för bildklassificering i flera klasser.

Bildklassificering med flera etiketter

Följande är ett exempel på indataformat/schema i varje JSON-rad för bildklassificering.

{
   "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"
        
   ]
}
Nyckel Beskrivning Exempel
image_url Bildplats i Azure Machine Learning-datalager.
my-subscription-id måste ersättas av Azure-prenumerationen där avbildningar finns. Mer information om Azure-prenumerationer finns här. my-resource-groupmy-workspacePå samma sätt bör , my-datastore ersättas med resursgruppsnamn, arbetsytenamn respektive datalagernamn.
path_to_image ska vara den fullständiga sökvägen till avbildningen i dataarkivet.
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 Bildinformation
Optional, Dictionary
"image_details":{"format": "jpg", "width": "400px", "height": "258px"}
format Bildtyp (alla bildformat som är tillgängliga i Pillow-biblioteket stöds)
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 Bildens bredd
Optional, String or Positive Integer
"400px" or 400
height Bildens höjd
Optional, String or Positive Integer
"200px" or 200
label Lista över klasser/etiketter i bilden
Required, List of Strings
["cat","dog"]

Exempel på en JSONL-fil för flera etiketter för bildklassificering:

{"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"]}

Bildexempel för flera etiketter för bildklassificering.

Objektidentifiering

Följande är ett exempel på en JSONL-fil för objektidentifiering.

{
   "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"
      },
      "..."
   ]
}

Här

  • xmin = x koordinat för avgränsningsrutans övre vänstra hörn
  • ymin = y-koordinat i det övre vänstra hörnet av avgränsningsrutan
  • xmax = x koordinat för avgränsningsrutans nedre högra hörn
  • ymax = y koordinat för avgränsningsrutans nedre högra hörn
Nyckel Beskrivning Exempel
image_url Bildplats i Azure Machine Learning-datalager.
my-subscription-id måste ersättas av Azure-prenumerationen där avbildningar finns. Mer information om Azure-prenumerationer finns här. my-resource-groupmy-workspacePå samma sätt bör , my-datastore ersättas med resursgruppsnamn, arbetsytenamn respektive datalagernamn.
path_to_image ska vara den fullständiga sökvägen till avbildningen i dataarkivet.
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 Bildinformation
Optional, Dictionary
"image_details":{"format": "jpg", "width": "400px", "height": "258px"}
format Bildtyp (alla bildformat som är tillgängliga i Pillow-biblioteket stöds. Men för YOLO stöds endast bildformat som tillåts av opencv )
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 Bildens bredd
Optional, String or Positive Integer
"499px" or 499
height Bildens höjd
Optional, String or Positive Integer
"665px" or 665
label (yttre nyckel) Lista över avgränsningsrutor, där varje ruta är en ordlista label, topX, topY, bottomX, bottomY, isCrowd med koordinaterna längst upp till vänster och längst ned till höger
Required, List of dictionaries
[{"label": "cat", "topX": 0.260, "topY": 0.406, "bottomX": 0.735, "bottomY": 0.701, "isCrowd": 0}]
label (inre nyckel) Klass/etikett för objektet i avgränsningsrutan
Required, String
"cat"
topX Förhållandet mellan x-koordinaten i det övre vänstra hörnet i avgränsningsrutan och bildens bredd
Required, Float in the range [0,1]
0.260
topY Förhållandet mellan y-koordinaten i det övre vänstra hörnet i avgränsningsrutan och bildens höjd
Required, Float in the range [0,1]
0.406
bottomX Förhållandet mellan x koordinaten i det nedre högra hörnet i avgränsningsrutan och bildens bredd
Required, Float in the range [0,1]
0.735
bottomY Förhållandet mellan y-koordinaten i det nedre högra hörnet i avgränsningsrutan och bildens höjd
Required, Float in the range [0,1]
0.701
isCrowd Anger om avgränsningsrutan är runt mängden objekt. Om den här särskilda flaggan anges hoppar vi över den här specifika avgränsningsrutan vid beräkning av måttet.
Optional, Bool
0

Exempel på en JSONL-fil för objektidentifiering:

{"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}]}

Bildexempel för objektidentifiering.

Instanssegmentering

Till exempel segmentering stöder automatiserad ML endast polygon som indata och utdata, inga masker.

Följande är ett exempel på en JSONL-fil, till exempel segmentering.

{
   "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"]]
      }
   ]
}
Nyckel Beskrivning Exempel
image_url Bildplats i Azure Machine Learning-datalager.
my-subscription-id måste ersättas av Azure-prenumerationen där avbildningar finns. Mer information om Azure-prenumerationer finns här. my-resource-groupmy-workspacePå samma sätt bör , my-datastore ersättas med resursgruppsnamn, arbetsytenamn respektive datalagernamn.
path_to_image ska vara den fullständiga sökvägen till avbildningen i dataarkivet.
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 Bildinformation
Optional, Dictionary
"image_details":{"format": "jpg", "width": "400px", "height": "258px"}
format Avbildningstyp
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 Bildens bredd
Optional, String or Positive Integer
"499px" or 499
height Bildens höjd
Optional, String or Positive Integer
"665px" or 665
label (yttre nyckel) Lista över masker, där varje mask är en ordlista med 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 (inre nyckel) Klass/etikett för objektet i masken
Required, String
"cat"
isCrowd Anger om masken är runt mängden objekt
Optional, Bool
0
polygon Polygonkoordinater för objektet
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]]

Exempel på en JSONL-fil för instanssegmentering:

{"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 ]]}]}

Bildexempel för instanssegmentering.

Dataschema för onlinebedömning

I det här avsnittet dokumenterar vi det indataformat som krävs för att göra förutsägelser med hjälp av en distribuerad modell.

Indataformat

Följande JSON är det indataformat som behövs för att generera förutsägelser för alla aktiviteter med hjälp av en uppgiftsspecifik modellslutpunkt.

{
   "input_data": {
      "columns": [
         "image"
      ],
      "data": [
         "image_in_base64_string_format"
      ]
   }
}

Den här json-filen är en ordlista med yttre nyckel input_data och inre nycklar columns, data enligt beskrivningen i följande tabell. Slutpunkten accepterar en json-sträng i ovanstående format och konverterar den till en dataram med exempel som krävs av bedömningsskriptet. Varje indatabild i request_json["input_data"]["data"] avsnittet i json är en base64-kodad sträng.

Nyckel Beskrivning
input_data
(yttre nyckel)
Det är en yttre nyckel i json-begäran. input_data är en ordlista som accepterar indatabildexempel
Required, Dictionary
columns
(inre nyckel)
Kolumnnamn som ska användas för att skapa en dataram. Den accepterar bara en kolumn med image som kolumnnamn.
Required, List
data
(inre nyckel)
Lista över base64-kodade bilder
Required, List

När vi har distribuerat mlflow-modellen kan vi använda följande kodfragment för att få förutsägelser för alla uppgifter.

# 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,
)

Utdataformat

Förutsägelser som görs på modellslutpunkter följer olika struktur beroende på aktivitetstyp. Det här avsnittet utforskar utdataformaten för bildklassificering med flera klasser, bildklassificering med flera etiketter, objektidentifiering och instanssegmenteringsuppgifter.

Följande scheman gäller när indatabegäran innehåller en bild.

Bildklassificering (binär/flera klasser)

Slutpunkten för bildklassificering returnerar alla etiketter i datamängden och deras sannolikhetspoäng för indatabilden i följande format. visualizations och attributions är relaterade till förklarbarhet och när begäran endast är för bedömning inkluderas inte dessa nycklar i utdata. Mer information om indata- och utdatascheman för förklaring för bildklassificering finns i avsnittet förklarande för bildklassificering.

[
   {
      "probs": [
         2.098e-06,
         4.783e-08,
         0.999,
         8.637e-06
      ],
      "labels": [
         "can",
         "carton",
         "milk_bottle",
         "water_bottle"
      ]
   }
]

Flera etiketter för bildklassificering

För bildklassificering med flera etiketter returnerar modellslutpunkten etiketter och deras sannolikheter. visualizations och attributions är relaterade till förklarbarhet och när begäran endast är för bedömning inkluderas inte dessa nycklar i utdata. Mer information om indata- och utdatascheman för förklaring för klassificering med flera etiketter finns i avsnittet förklarande för bildklassificering med flera etiketter.

[
   {
      "probs": [
         0.997,
         0.960,
         0.982,
         0.025
      ],
      "labels": [
         "can",
         "carton",
         "milk_bottle",
         "water_bottle"
      ]
   }
]

Objektidentifiering

Objektidentifieringsmodellen returnerar flera rutor med deras skalade koordinater uppe till vänster och längst ned till höger tillsammans med lådetikett och konfidenspoäng.

[
   {
      "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
         }
      ]
   }
]

Instanssegmentering

I instanssegmentering består utdata av flera rutor med deras skalade koordinater uppe till vänster och längst ned till höger, etiketter, konfidenspoäng och polygoner (inte masker). Här har polygonvärdena samma format som vi diskuterade i schemaavsnittet.

[
    {
       "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
                ]
             ]
          }
       ]
    }
]

Dataformat för Online Scoring and Explainability (XAI)

Viktigt

De här inställningarna är för närvarande i offentlig förhandsversion. De tillhandahålls utan serviceavtal. Vissa funktioner kanske inte stöds eller kan vara begränsade. Mer information finns i Kompletterande villkor för användning av Microsoft Azure-förhandsversioner.

Varning

Förklarbarhet stöds endast för klassificering av flera klasser och klassificering med flera etiketter. När du genererar förklaringar på onlineslutpunkten kan du använda notebook-filen för batchbedömning (SDK v1) för att generera förklaringar om du stöter på timeout-problem.

I det här avsnittet dokumenterar vi det indataformat som krävs för att göra förutsägelser och generera förklaringar för den förutsagda klassen/klasserna med hjälp av en distribuerad modell. Det behövs ingen separat distribution för att förklara. Samma slutpunkt för onlinebedömning kan användas för att generera förklaringar. Vi behöver bara skicka några extra förklaringsrelaterade parametrar i indataschemat och få antingen visualiseringar av förklaringar och/eller attributionspoängmatriser (förklaringar på pixelnivå).

Förklaringsmetoder som stöds:

Indataformat (XAI)

Följande indataformat stöds för att generera förutsägelser och förklaringar för alla klassificeringsuppgifter med hjälp av en aktivitetsspecifik modellslutpunkt. När vi har distribuerat modellen kan vi använda följande schema för att få förutsägelser och förklaringar.

{
   "input_data": {
      "columns": ["image"],
      "data": [json.dumps({"image_base64": "image_in_base64_string_format", 
                           "model_explainability": True,
                           "xai_parameters": {}
                         })
      ]
   }
}

Tillsammans med bilden finns det två extra parametrar (model_explainability och xai_parameters) som krävs i indataschemat för att generera förklaringar.

Nyckel Beskrivning Standardvärde
image_base64 indatabild i base64-format
Required, String
-
model_explainability Om du vill generera förklaringar eller bara bedömning
Optional, Bool
False
xai_parameters Om model_explainability är True är en xai_parameters ordlista som innehåller förklaringsalgoritmrelaterade parametrar med xai_algorithm, visualizations, attributions ask-nycklar.
Optional, Dictionary
Om xai_parameters inte skickas används förklaringsalgoritmen xrai med dess standardvärde
{"xai_algorithm": "xrai", "visualizations": True, "attributions": False}
xai_algorithm Namnet på algoritmen för förklaring som ska användas. XAI-algoritmer som stöds är {xrai, integrated_gradients, guided_gradcam, guided_backprop}
Optional, String
xrai
visualizations Om visualiseringar av förklaringar ska returneras.
Optional, Bool
True
attributions Om funktions-attribut ska returneras.
Optional, Bool
False
confidence_score_threshold_multilabel Tröskelvärde för förtroendepoäng för att välja de högsta klasserna för att generera förklaringar i klassificering med flera etiketter.
Optional, Float
0.5

I följande tabell beskrivs de scheman som stöds för förklarbarhet.

Typ Schema
Slutsatsdragning för en enskild avbildning i base64-format Ordlista med image_base64 som nyckel och värde är base64-kodad bild,
model_explainability nyckel med Sant eller Falskt och xai_parameters ordlista med XAI-algoritmspecifika parametrar
Required, Json String
Works for one or more images

Varje indatabild i request_json, som definieras i koden nedan, är en base64-kodad sträng som läggs till i listan 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)

Utdataformat (XAI)

Förutsägelser som görs på modellslutpunkter följer olika scheman beroende på aktivitetstyp. I det här avsnittet beskrivs utdataformat för bildklassificeringsuppgifter med flera klasser.

Följande scheman definieras för två indatabilder.

Bildklassificering (binär/flera klasser)

Utdataschemat är detsamma som beskrivs ovan förutom att visualizations och attributions nyckelvärden ingår, om dessa nycklar har angetts till True i begäran.

Om model_explainability, visualizationsanges attributions till True i indatabegäran kommer utdata att ha visualizations och attributions. Mer information om dessa parametrar beskrivs i följande tabell. Visualiseringar och attribut genereras mot en klass som har den högsta sannolikhetspoängen.

Utdatanyckel Beskrivning
visualizations En bild i base64-strängformat med typ
Optional, String
attributions flerdimensionell matris med bildpunktsvis attributionspoäng för form [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]]]
    }
]

Flera etiketter för bildklassificering

Den enda skillnaden i utdataschemat för klassificering med flera etiketter jämfört med klassificering med flera klasser är att det kan finnas flera klasser i varje bild som förklaringar kan genereras för. Så är visualizations listan över base64-bildsträngar och attributions är listan över attributionspoäng mot varje vald klass baserat på confidence_score_threshold_multilabel (standardvärdet är 0,5).

Om model_explainability, visualizationsanges attributions till True i indatabegäran kommer utdata att ha visualizations och attributions. Mer information om dessa parametrar beskrivs i följande tabell. Visualiseringar och attribut genereras mot alla klasser som har sannolikhetspoängen större än eller lika med confidence_score_threshold_multilabel.

Utdatanyckel Beskrivning
visualizations Lista över avbildningar i base64-strängformat med typ
Optional, String
attributions Lista över flerdimensionella matriser med pixelvis attributionspoäng mot varje klass, där varje flerdimensionell matris är i form [3, valid_crop_size, valid_crop_size]
Optional, List

Varning

När du genererar förklaringar på onlineslutpunkten bör du välja endast några klasser baserat på konfidenspoäng för att undvika timeout-problem på slutpunkten eller använda slutpunkten med typen GPU-instans. Information om hur du genererar förklaringar för ett stort antal klasser i klassificering med flera etiketter finns i notebook-filen för batchbedömning (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]]],
                        .
                        .
                        .
                       ]
    }
]

Objektidentifiering

Varning

XAI stöds inte. Därför returneras bara poäng. Exempel på bedömning finns i avsnittet om onlinebedömning.

Instanssegmentering

Varning

XAI stöds inte. Därför returneras bara poäng. Exempel på bedömning finns i avsnittet om onlinebedömning.

Anteckning

Bilderna som används i den här artikeln kommer från datauppsättningen Fridge Objects, copyright © Microsoft Corporation och finns på computervision-recipes/01_training_introduction.ipynb under MIT-licensen.

Nästa steg