Dela via


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 (current)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 från bilddata förbereds i JSONL-format (JSON Lines). I det här avsnittet beskrivs indataformat eller schema för bildklassificering i flera klasser, bildklassificering med flera etiketter, objektidentifiering och instanssegmentering. Vi tillhandahåller också ett exempel på den slutliga träningen eller valideringen av JSON Lines-filen.

Bildklassificering (binär/flera klasser)

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-groupPå samma sätt bör , my-workspacemy-datastore ersättas med resursgruppsnamn, arbetsytenamn respektive datalagernamn.
path_to_image ska vara den fullständiga sökvägen till avbildningen i datalager.
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 Bredd på bilden
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.

Fleretiketter för bildklassificering

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-groupPå samma sätt bör , my-workspacemy-datastore ersättas med resursgruppsnamn, arbetsytenamn respektive datalagernamn.
path_to_image ska vara den fullständiga sökvägen till avbildningen i datalager.
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 Bredd på bilden
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 Multi-label 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 fleretiketter 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 det övre vänstra hörnet av avgränsningsrutan
  • ymin = y koordinat för det övre vänstra hörnet av avgränsningsrutan
  • xmax = x koordinat för det nedre högra hörnet av avgränsningsrutan
  • ymax = y koordinat för det nedre högra hörnet av avgränsningsrutan
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-groupPå samma sätt bör , my-workspacemy-datastore ersättas med resursgruppsnamn, arbetsytenamn respektive datalagernamn.
path_to_image ska vara den fullständiga sökvägen till avbildningen i datalager.
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 Bredd på bilden
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 över label, topX, topY, bottomX, bottomY, isCrowd deras koordinater överst 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 av 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 har angetts hoppar vi över den här specifika avgränsningsrutan när måttet beräknas.
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 en JSONL-exempelfil, 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-groupPå samma sätt bör , my-workspacemy-datastore ersättas med resursgruppsnamn, arbetsytenamn respektive datalagernamn.
path_to_image ska vara den fullständiga sökvägen till avbildningen i datalager.
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
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 Bredd på bilden
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 aktivitetsspecifik modellslutpunkt.

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

Denna json ä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 hämta 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örklaring och när begäran endast är för bedömning inkluderas inte dessa nycklar i utdata. Mer information om förklaringsdata och utdataschema för bildklassificering finns i avsnittet om förklaring för bildklassificering.

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

Fleretiketter för bildklassificering

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

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

Objektidentifiering

Objektidentifieringsmodellen returnerar flera rutor med sina skalade koordinater uppe till vänster och längst ned till höger tillsammans med boxetikett 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 sina skalade koordinater överst till vänster och längst ned till höger, etiketter, konfidenspoäng och polygoner (inte masker). Här är polygonvärdena i 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 ett 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örklaring 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 uppgiftsspecifik modellslutpunkt. När vi har distribuerat modellen kan vi använda följande schema för att hämta 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 Sant är en xai_parameters ordlista som innehåller förklaringsalgoritmrelaterade parametrar med xai_algorithm, visualizations, attributions fråga 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å förklaringsalgoritmen som ska användas. XAI-algoritmer som stöds är {xrai, integrated_gradients, guided_gradcam, guided_backprop}
Optional, String
xrai
visualizations Om du vill returnera visualiseringar av förklaringar.
Optional, Bool
True
attributions Om funktions-attribut ska returneras.
Optional, Bool
False
confidence_score_threshold_multilabel Tröskelvärde för konfidenspoäng för att välja de översta 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örklaring.

Typ Schema
Slutsatsdragning på en bild 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 pixelvis 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]]]
    }
]

Fleretiketter 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. visualizations Så är 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 bilder 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 bara välja några klasser baserat på konfidenspoäng för att undvika timeout-problem på slutpunkten eller använda slutpunkten med GPU-instanstypen. 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.

Kommentar

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