Gegevensschema's voor het trainen van Computer Vision-modellen met geautomatiseerde machine learning

VAN TOEPASSING OP:Azure CLI ml-extensie v2 (huidig)Python SDK azure-ai-ml v2 (huidig)

Meer informatie over het formatteren van uw JSONL-bestanden voor gegevensverbruik in geautomatiseerde ML-experimenten voor Computer Vision-taken tijdens training en deductie.

Gegevensschema voor training

Voor Azure Machine Learning AutoML voor installatiekopieën moeten invoerafbeeldingsgegevens worden voorbereid in JSONL-indeling (JSONL-lijnen ). In deze sectie worden invoergegevensindelingen of -schema's voor afbeeldingsclassificatie met meerdere klassen, afbeeldingsclassificatie met meerdere labels, objectdetectie en exemplaarsegmentatie beschreven. We geven ook een voorbeeld van het JSON-regelbestand voor de laatste training of validatie.

Afbeeldingsclassificatie (binair/meerdere klassen)

Invoergegevensindeling/-schema in elke JSON-regel:

{
   "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",
}
Sleutel Beschrijving Voorbeeld
image_url Locatie van installatiekopieën in Azure Machine Learning-gegevensarchief.
my-subscription-id moet worden vervangen door het Azure-abonnement waarin de installatiekopieën zich bevinden. Meer informatie over Azure-abonnementen vindt u hier. Op my-resource-groupdezelfde manier moet , my-workspacemy-datastore worden vervangen door respectievelijk de naam van de resourcegroep, de naam van de werkruimte en de naam van het gegevensarchief.
path_to_image moet het volledige pad naar de afbeelding in het gegevensarchief zijn.
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 Details van afbeelding
Optional, Dictionary
"image_details":{"format": "jpg", "width": "400px", "height": "258px"}
format Afbeeldingstype (alle beschikbare afbeeldingsindelingen in de Pillow-bibliotheek worden ondersteund)
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 Breedte van de afbeelding
Optional, String or Positive Integer
"400px" or 400
height Hoogte van de afbeelding
Optional, String or Positive Integer
"200px" or 200
label Klasse/label van de afbeelding
Required, String
"cat"

Voorbeeld van een JSONL-bestand voor afbeeldingsclassificatie met meerdere klassen:

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

Afbeeldingsvoorbeeld voor afbeeldingsclassificatie met meerdere klassen.

Afbeeldingsclassificatie met meerdere labels

Hier volgt een voorbeeld van invoergegevensindeling/-schema in elke JSON-lijn voor afbeeldingsclassificatie.

{
   "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"
        
   ]
}
Sleutel Beschrijving Voorbeeld
image_url Locatie van installatiekopieën in Azure Machine Learning-gegevensarchief.
my-subscription-id moet worden vervangen door het Azure-abonnement waarin de installatiekopieën zich bevinden. Meer informatie over Azure-abonnementen vindt u hier. Op my-resource-groupdezelfde manier moet , my-workspacemy-datastore worden vervangen door respectievelijk de naam van de resourcegroep, de naam van de werkruimte en de naam van het gegevensarchief.
path_to_image moet het volledige pad naar de afbeelding in het gegevensarchief zijn.
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 Details van afbeelding
Optional, Dictionary
"image_details":{"format": "jpg", "width": "400px", "height": "258px"}
format Afbeeldingstype (alle afbeeldingsindelingen die beschikbaar zijn in de Pillow-bibliotheek worden ondersteund)
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 Breedte van de afbeelding
Optional, String or Positive Integer
"400px" or 400
height Hoogte van de afbeelding
Optional, String or Positive Integer
"200px" or 200
label Lijst met klassen/labels in de afbeelding
Required, List of Strings
["cat","dog"]

Voorbeeld van een JSONL-bestand voor afbeeldingsclassificatie met meerdere labels:

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

Afbeeldingsvoorbeeld voor afbeeldingsclassificatie met meerdere labels.

Objectdetectie

Hier volgt een voorbeeld van een JSONL-bestand voor objectdetectie.

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

Hier

  • xmin = x coördinaat van de linkerbovenhoek van het begrenzingsvak
  • ymin = y coördinaat van de linkerbovenhoek van het begrenzingsvak
  • xmax = x coördinaat van de rechterbenedenhoek van het begrenzingsvak
  • ymax = y coördinaat van de rechterbenedenhoek van het begrenzingsvak
Sleutel Beschrijving Voorbeeld
image_url Locatie van installatiekopieën in Azure Machine Learning-gegevensarchief.
my-subscription-id moet worden vervangen door het Azure-abonnement waarin de installatiekopieën zich bevinden. Meer informatie over Azure-abonnementen vindt u hier. Op my-resource-groupdezelfde manier moet , my-workspacemy-datastore worden vervangen door respectievelijk de naam van de resourcegroep, de naam van de werkruimte en de naam van het gegevensarchief.
path_to_image moet het volledige pad naar de afbeelding in het gegevensarchief zijn.
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 Details van afbeelding
Optional, Dictionary
"image_details":{"format": "jpg", "width": "400px", "height": "258px"}
format Afbeeldingstype (alle afbeeldingsindelingen die beschikbaar zijn in de Pillow-bibliotheek worden ondersteund. Maar voor YOLO worden alleen afbeeldingsindelingen ondersteund die zijn toegestaan door 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 Breedte van de afbeelding
Optional, String or Positive Integer
"499px" or 499
height Hoogte van de afbeelding
Optional, String or Positive Integer
"665px" or 665
label (buitenste sleutel) Lijst met begrenzingsvakken, waarbij elk vak een woordenlijst is met label, topX, topY, bottomX, bottomY, isCrowd de coördinaten linksboven en rechtsonder
Required, List of dictionaries
[{"label": "cat", "topX": 0.260, "topY": 0.406, "bottomX": 0.735, "bottomY": 0.701, "isCrowd": 0}]
label (binnenste toets) Klasse/label van het object in het begrenzingsvak
Required, String
"cat"
topX Verhouding van x coördinaat van de linkerbovenhoek van het begrenzingsvak en de breedte van de afbeelding
Required, Float in the range [0,1]
0.260
topY Verhouding van y-coördinaat van de linkerbovenhoek van het begrenzingsvak en de hoogte van de afbeelding
Required, Float in the range [0,1]
0.406
bottomX Verhouding van x coördinaat van de rechterbenedenhoek van het begrenzingsvak en de breedte van de afbeelding
Required, Float in the range [0,1]
0.735
bottomY Verhouding van y-coördinaat van de rechterbenedenhoek van het begrenzingsvak en de hoogte van de afbeelding
Required, Float in the range [0,1]
0.701
isCrowd Hiermee wordt aangegeven of het begrenzingsvak zich rond de massa objecten bevindt. Als deze speciale vlag is ingesteld, slaan we dit specifieke begrenzingsvak over bij het berekenen van de metrische waarde.
Optional, Bool
0

Voorbeeld van een JSONL-bestand voor objectdetectie:

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

Afbeeldingsvoorbeeld voor objectdetectie.

Instantiesegmentatie

Bijvoorbeeld segmentatie, geautomatiseerde ML ondersteunt alleen polygoon als invoer en uitvoer, geen maskers.

Hier volgt een voorbeeld van een JSONL-bestand, bijvoorbeeld segmentatie.

{
   "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"]]
      }
   ]
}
Sleutel Beschrijving Voorbeeld
image_url Locatie van installatiekopieën in Azure Machine Learning-gegevensarchief.
my-subscription-id moet worden vervangen door het Azure-abonnement waarin de installatiekopieën zich bevinden. Meer informatie over Azure-abonnementen vindt u hier. Op my-resource-groupdezelfde manier moet , my-workspacemy-datastore worden vervangen door respectievelijk de naam van de resourcegroep, de naam van de werkruimte en de naam van het gegevensarchief.
path_to_image moet het volledige pad naar de afbeelding in het gegevensarchief zijn.
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 Details van afbeelding
Optional, Dictionary
"image_details":{"format": "jpg", "width": "400px", "height": "258px"}
format Type installatiekopie
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 Breedte van de afbeelding
Optional, String or Positive Integer
"499px" or 499
height Hoogte van de afbeelding
Optional, String or Positive Integer
"665px" or 665
label (buitenste sleutel) Lijst met maskers, waarbij elk masker een woordenlijst is van 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 (binnenste toets) Klasse/label van het object in het masker
Required, String
"cat"
isCrowd Geeft aan of het masker zich rond de menigte objecten bevindt
Optional, Bool
0
polygon Veelhoekcoördinaten voor het object
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]]

Voorbeeld van een JSONL-bestand voor exemplaarsegmentatie:

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

Afbeeldingsvoorbeeld voor bijvoorbeeld segmentatie.

Gegevensschema voor online scoren

In deze sectie documenteren we de invoergegevensindeling die nodig is om voorspellingen te doen met behulp van een geïmplementeerd model.

Invoerindeling

De volgende JSON is de invoerindeling die nodig is om voorspellingen te genereren voor elke taak met behulp van een taakspecifiek modeleindpunt.

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

Deze json is een woordenlijst met de buitenste sleutel input_data en de binnenste sleutels columns, data zoals beschreven in de volgende tabel. Het eindpunt accepteert een JSON-tekenreeks in de bovenstaande indeling en converteert deze naar een gegevensframe met voorbeelden die vereist zijn voor het scorescript. Elke invoerafbeelding in de request_json["input_data"]["data"] sectie van de json is een met base64 gecodeerde tekenreeks.

Sleutel Beschrijving
input_data
(buitenste sleutel)
Het is een externe sleutel in de JSON-aanvraag. input_data is een woordenlijst die voorbeelden van invoerafbeeldingen accepteert
Required, Dictionary
columns
(binnenste toets)
Kolomnamen die moeten worden gebruikt om een dataframe te maken. Er wordt slechts één kolom geaccepteerd met image als kolomnaam.
Required, List
data
(binnenste toets)
Lijst met met base64 gecodeerde afbeeldingen
Required, List

Nadat we het mlflow-model hebben geïmplementeerd, kunnen we het volgende codefragment gebruiken om voorspellingen voor alle taken op te halen.

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

Uitvoerindeling

Voorspellingen op modeleindpunten hebben een andere structuur, afhankelijk van het taaktype. In deze sectie worden de uitvoergegevensindelingen verkend voor afbeeldingsclassificatie met meerdere klassen, met meerdere labels, objectdetectie en segmentatietaken van exemplaren.

De volgende schema's zijn van toepassing wanneer de invoeraanvraag één afbeelding bevat.

Afbeeldingsclassificatie (binair/meerdere klassen)

Eindpunt voor afbeeldingsclassificatie retourneert alle labels in de gegevensset en hun waarschijnlijkheidsscores voor de invoerafbeelding in de volgende indeling. visualizations en attributions zijn gerelateerd aan verklaarbaarheid en wanneer de aanvraag alleen voor scoren is, worden deze sleutels niet opgenomen in de uitvoer. Zie de sectie Uitlegbaarheid voor afbeeldingsclassificatie voor meer informatie over het invoer- en uitvoerschema voor uitlegbaarheid voor afbeeldingsclassificatie.

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

Afbeeldingsclassificatie met meerdere labels

Voor afbeeldingsclassificatie met meerdere labels retourneert het modeleindpunt labels en hun waarschijnlijkheden. visualizations en attributions zijn gerelateerd aan verklaarbaarheid en wanneer de aanvraag alleen voor scoren is, worden deze sleutels niet opgenomen in de uitvoer. Zie de sectie Uitlegbaarheid voor afbeeldingsclassificatie met meerdere labels voor meer informatie over het invoer- en uitvoerschema voor uitlegbaarheid voor classificatie van meerdere labels.

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

Objectdetectie

Het objectdetectiemodel retourneert meerdere vakken met hun geschaalde coördinaten linksboven en rechtsonder, samen met vaklabel en betrouwbaarheidsscore.

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

Instantiesegmentatie

Bij exemplaarsegmentatie bestaat de uitvoer uit meerdere vakken met hun geschaalde coördinaten linksboven en rechtsonder, labels, betrouwbaarheidsscores en veelhoeken (geen maskers). Hier hebben de veelhoekwaarden dezelfde indeling die we in de sectie schema hebben besproken.

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

Gegevensindeling voor onlinescore en uitlegbaarheid (XAI)

Belangrijk

Deze instellingen zijn momenteel beschikbaar als openbare preview. Ze worden geleverd zonder service level agreement. Misschien worden bepaalde functies niet ondersteund of zijn de mogelijkheden ervan beperkt. Zie Supplemental Terms of Use for Microsoft Azure Previews (Aanvullende gebruiksvoorwaarden voor Microsoft Azure-previews) voor meer informatie.

Waarschuwing

Uitlegbaarheid wordt alleen ondersteund voor classificatie met meerdere klassen en classificatie met meerdere labels. Als u tijdens het genereren van uitleg over een online-eindpunt time-outproblemen ondervindt, gebruikt u batch scoring notebook (SDK v1) om uitleg te genereren.

In deze sectie documenteren we de invoergegevensindeling die nodig is om voorspellingen te doen en verklaringen te genereren voor de voorspelde klasse/klassen met behulp van een geïmplementeerd model. Er is geen afzonderlijke implementatie nodig voor uitlegbaarheid. Hetzelfde eindpunt voor online scoren kan worden gebruikt om uitleg te genereren. We hoeven alleen wat extra parameters met betrekking tot uitleg door te geven in het invoerschema en visualisaties van verklaringen en/of matrices voor toeschrijvingsscores (uitleg op pixelniveau) te krijgen.

Ondersteunde methoden voor uitleg:

Invoerindeling (XAI)

De volgende invoerindelingen worden ondersteund voor het genereren van voorspellingen en uitleg over een classificatietaak met behulp van een taakspecifiek modeleindpunt. Nadat we het model hebben geïmplementeerd, kunnen we het volgende schema gebruiken om voorspellingen en uitleg op te halen.

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

Naast de afbeelding zijn er twee extra parameters (model_explainability en xai_parameters) vereist in het invoerschema om uitleg te genereren.

Sleutel Beschrijving Standaardwaarde
image_base64 invoerafbeelding in base64-indeling
Required, String
-
model_explainability Of u nu uitleg wilt genereren of alleen de score
Optional, Bool
False
xai_parameters Als model_explainability waar is, is er xai_parameters een woordenlijst met parameters die betrekking hebben op het uitlegbaarheidsalgoritmen met xai_algorithm, visualizationsen attributions vraagsleutels.
Optional, Dictionary
Als xai_parameters niet wordt doorgegeven, wordt het algoritme voor uitleg gebruikt met de xrai standaardwaarde
{"xai_algorithm": "xrai", "visualizations": True, "attributions": False}
xai_algorithm Naam van het uitlegbaarheids-algoritme dat moet worden gebruikt. Ondersteunde XAI-algoritmen zijn {xrai, integrated_gradients, , guided_gradcam} guided_backprop
Optional, String
xrai
visualizations Of visualisaties van uitleg moeten worden geretourneerd.
Optional, Bool
True
attributions Of functiekenmerken moeten worden geretourneerd.
Optional, Bool
False
confidence_score_threshold_multilabel Drempelwaarde voor betrouwbaarheidsscore om topklassen te selecteren om uitleg te genereren in classificatie met meerdere labels.
Optional, Float
0.5

De volgende tabel beschrijft de ondersteunde schema's voor uitlegbaarheid.

Type Schema
Deductie op één afbeelding in base64-indeling Woordenlijst met image_base64 als sleutel en waarde is base64 gecodeerde afbeelding,
model_explainability sleutel met Waar of Onwaar en xai_parameters woordenlijst met XAI-algoritmespecifieke parameters
Required, Json String
Works for one or more images

Elke invoerafbeelding in de request_json, gedefinieerd in de onderstaande code, is een met base64 gecodeerde tekenreeks die wordt toegevoegd aan de lijst 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)

Uitvoerindeling (XAI)

Voorspellingen op modeleindpunten volgen een ander schema, afhankelijk van het taaktype. In deze sectie worden de uitvoergegevensindelingen voor afbeeldingsclassificatietaken met meerdere klassen en meerdere labels beschreven.

De volgende schema's zijn gedefinieerd voor het geval van twee invoerafbeeldingen.

Afbeeldingsclassificatie (binair/meerdere klassen)

Het uitvoerschema is hetzelfde als hierboven wordt beschreven , behalve dat visualizations en attributions sleutelwaarden worden opgenomen, als deze sleutels in de aanvraag zijn ingesteld op True .

Als model_explainability, visualizationsattributions zijn ingesteld op True in de invoeraanvraag, heeft visualizations de uitvoer en attributions. Meer informatie over deze parameters wordt uitgelegd in de volgende tabel. Visualisaties en toeschrijvingen worden gegenereerd op basis van een klasse met de hoogste waarschijnlijkheidsscore.

Uitvoersleutel Description
visualizations Enkele afbeelding in base64-tekenreeksindeling met type
Optional, String
attributions multidimensionale matrix met pixelgewijze toeschrijvingsscores van vorm [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]]]
    }
]

Afbeeldingsclassificatie met meerdere labels

Het enige verschil in het uitvoerschema van classificatie met meerdere labels ten opzichte van classificatie met meerdere klassen is dat er meerdere klassen in elke afbeelding kunnen zijn waarvoor uitleg kan worden gegenereerd. visualizations Is dus de lijst met tekenreeksen voor base64-afbeeldingen en attributions is de lijst met toewijzingsscores voor elke geselecteerde klasse op basis van de confidence_score_threshold_multilabel (de standaardwaarde is 0,5).

Als model_explainability, visualizationsattributions zijn ingesteld op True in de invoeraanvraag, heeft visualizations de uitvoer en attributions. Meer informatie over deze parameters wordt uitgelegd in de volgende tabel. Visualisaties en toeschrijvingen worden gegenereerd op basis van alle klassen met een waarschijnlijkheidsscore die groter is dan of gelijk is aan confidence_score_threshold_multilabel.

Uitvoersleutel Description
visualizations Lijst met afbeeldingen in base64-tekenreeksindeling met type
Optional, String
attributions Lijst met multidimensionale matrices met pixelgewijze toeschrijvingsscores ten opzichte van elke klasse, waarbij elke multidimensionale matrix van vorm is [3, valid_crop_size, valid_crop_size]
Optional, List

Waarschuwing

Zorg er tijdens het genereren van uitleg over het online-eindpunt voor dat u slechts enkele klassen selecteert op basis van de betrouwbaarheidsscore om time-outproblemen op het eindpunt te voorkomen of het eindpunt te gebruiken met het type GPU-exemplaar. Raadpleeg Notebook voor batchscores (SDK v1) als u uitleg wilt genereren voor een groot aantal klassen in classificatie met meerdere labels.

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

Objectdetectie

Waarschuwing

XAI wordt niet ondersteund. Er worden dus alleen scores geretourneerd. Raadpleeg de sectie Online scoren voor een scorevoorbeeld.

Instantiesegmentatie

Waarschuwing

XAI wordt niet ondersteund. Er worden dus alleen scores geretourneerd. Raadpleeg de sectie Online scoren voor een scorevoorbeeld.

Notitie

De afbeeldingen die in dit artikel worden gebruikt, zijn afkomstig uit de gegevensset Koelkastobjecten, copyright © van Microsoft Corporation en beschikbaar op computervision-recipes/01_training_introduction.ipynb onder de MIT-licentie.

Volgende stappen