Share via


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

VAN TOEPASSING OP:Azure CLI ml extension v2 (current)Python SDK azure-ai-ml v2 (current)

Leer hoe u uw JSONL-bestanden opmaakt voor gegevensverbruik in geautomatiseerde ML-experimenten voor computer vision-taken tijdens de training en deductie.

Gegevensschema voor training

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

Afbeeldingsclassificatie (binair/multiklasse)

Indeling/schema voor invoergegevens 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",
}
Toets Beschrijving Voorbeeld
image_url Locatie van installatiekopieën in azure Machine Learning-gegevensopslag.
my-subscription-id moet worden vervangen door het Azure-abonnement waarin installatiekopieën zich bevinden. Meer informatie over Azure-abonnementen vindt u hier. Op dezelfde manier my-resource-groupmy-workspacemy-datastore moet 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 Afbeeldingsdetails
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"
        
   ]
}
Toets Beschrijving Voorbeeld
image_url Locatie van installatiekopieën in azure Machine Learning-gegevensopslag.
my-subscription-id moet worden vervangen door het Azure-abonnement waarin installatiekopieën zich bevinden. Meer informatie over Azure-abonnementen vindt u hier. Op dezelfde manier my-resource-groupmy-workspacemy-datastore moet 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 Afbeeldingsdetails
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 linkerbovenhoek van begrenzingsvak
  • ymin = y-coördinaat van linkerbovenhoek van begrenzingsvak
  • xmax = x coördinaat van rechterbenedenhoek van begrenzingsvak
  • ymax = y coördinaat van rechterbenedenhoek van begrenzingsvak
Toets Beschrijving Voorbeeld
image_url Locatie van installatiekopieën in azure Machine Learning-gegevensopslag.
my-subscription-id moet worden vervangen door het Azure-abonnement waarin installatiekopieën zich bevinden. Meer informatie over Azure-abonnementen vindt u hier. Op dezelfde manier my-resource-groupmy-workspacemy-datastore moet 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 Afbeeldingsdetails
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 van 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 sleutel) Klasse/label van het object in het begrenzingsvak
Required, String
"cat"
topX Verhouding van x-coördinaat van 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 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 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 rechterbenedenhoek van het begrenzingsvak en de hoogte van de afbeelding
Required, Float in the range [0,1]
0.701
isCrowd Geeft aan of het begrenzingsvak zich rond de menigte 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

Segmentatie ondersteunt geautomatiseerde ML bijvoorbeeld alleen veelhoek als invoer en uitvoer, zonder 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"]]
      }
   ]
}
Toets Beschrijving Voorbeeld
image_url Locatie van installatiekopieën in azure Machine Learning-gegevensopslag.
my-subscription-id moet worden vervangen door het Azure-abonnement waarin installatiekopieën zich bevinden. Meer informatie over Azure-abonnementen vindt u hier. Op dezelfde manier my-resource-groupmy-workspacemy-datastore moet 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 Afbeeldingsdetails
Optional, Dictionary
"image_details":{"format": "jpg", "width": "400px", "height": "258px"}
format Afbeeldingstype
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 sleutel) 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 exemplaarsegmentatie.

Gegevensschema voor online scoren

In deze sectie documenteren we de invoergegevensindeling die is vereist voor het maken van voorspellingen met behulp van een geïmplementeerd model.

Invoerindeling

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

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

Deze json is een woordenlijst met buitenste sleutel input_data en binnenste toetsen columns, data zoals beschreven in de volgende tabel. Het eindpunt accepteert een json-tekenreeks in de bovenstaande indeling en converteert deze naar een dataframe 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.

Toets Beschrijving
input_data
(buitenste sleutel)
Het is een externe sleutel in json-aanvraag. input_data is een woordenlijst die voorbeelden van invoerafbeeldingen accepteert
Required, Dictionary
columns
(binnenste sleutel)
Kolomnamen die moeten worden gebruikt om een dataframe te maken. Er wordt slechts één kolom met image als kolomnaam geaccepteerd.
Required, List
data
(binnenste sleutel)
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 volgen verschillende structuur, afhankelijk van het taaktype. In deze sectie worden de uitvoergegevensindelingen verkend voor afbeeldingsclassificatie met meerdere klassen, classificatie van meerdere labels, objectdetectie en segmentatietaken van exemplaren.

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

Afbeeldingsclassificatie (binair/multiklasse)

Eindpunt voor afbeeldingsclassificatie retourneert alle labels in de gegevensset en de waarschijnlijkheidsscores voor de invoerafbeelding in de volgende indeling. visualizations en attributions zijn gerelateerd aan uitleg en wanneer de aanvraag alleen voor scoren is, worden deze sleutels niet opgenomen in de uitvoer. Zie de sectie Uitleg over afbeeldingsclassificatie voor meer informatie over 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 uitleg en wanneer de aanvraag alleen voor scoren is, worden deze sleutels niet opgenomen in de uitvoer. Zie de sectie Uitleg voor afbeeldingsclassificatie met meerdere labels voor meer informatie over het invoer- en uitvoerschema voor uitlegbaarheid voor classificatie met meerdere labels.

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

Objectdetectie

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

In instantiesegmentatie bestaat de uitvoer uit meerdere vakken met de geschaalde coördinaten linksboven en rechtsonder, labels, betrouwbaarheidsscores en veelhoeken (geen maskers). Hier hebben de veelhoekwaarden dezelfde indeling die we in de schemasectie 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 online scoren en verklarendheid (XAI)

Belangrijk

Deze instellingen zijn momenteel beschikbaar als openbare preview. Ze worden aangeboden zonder een service level agreement. Misschien worden bepaalde functies niet ondersteund of zijn de mogelijkheden ervan beperkt. Zie 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 time-outproblemen ondervindt bij het genereren van uitleg over online-eindpunten, gebruikt u batch scoring notebook (SDK v1) om uitleg te genereren.

In deze sectie documenteren we de indeling van de invoergegevens die nodig is om voorspellingen te doen en uitleg te genereren voor de voorspelde klasse/klassen met behulp van een geïmplementeerd model. Er is geen afzonderlijke implementatie nodig voor uitleg. Hetzelfde eindpunt voor online scoren kan worden gebruikt om uitleg te genereren. We moeten alleen enkele extra uitleggerelateerde parameters doorgeven in het invoerschema en visualisaties van uitleg en/of toeschrijvingsscorematrices (uitleg op pixelniveau) ophalen.

Ondersteunde methoden voor uitleg:

Invoerindeling (XAI)

De volgende invoerindelingen worden ondersteund voor het genereren van voorspellingen en uitleg over elke classificatietaak met behulp van 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.

Toets 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 het xai_parameters een woordenlijst met parameters die gerelateerd zijn aan het uitlegbaarheidsalgoritmen met xai_algorithm, visualizationsattributions vraag sleutels.
Optional, Dictionary
Als xai_parameters dit niet wordt doorgegeven, wordt het algoritme voor uitleg gebruikt met de xrai standaardwaarde
{"xai_algorithm": "xrai", "visualizations": True, "attributions": False}
xai_algorithm De naam van het uit te leggen algoritme. Ondersteunde XAI-algoritmen zijn {xrai, integrated_gradients, guided_gradcam, } guided_backprop
Optional, String
xrai
visualizations Of er visualisaties van uitleg moeten worden geretourneerd.
Optional, Bool
True
attributions Of u kenmerken wilt retourneren.
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

In de volgende tabel worden de ondersteunde schema's voor uitleg beschreven.

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 specifieke parameters voor XAI-algoritme
Required, Json String
Works for one or more images

Elke invoerafbeelding in de request_json, gedefinieerd in de onderstaande code, is een base64-gecodeerde tekenreeks die is 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 beschreven voor afbeeldingsclassificatietaken van meerdere klassen met meerdere labels.

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

Afbeeldingsclassificatie (binair/multiklasse)

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

Als model_explainability, visualizationsworden attributions ingesteld True op in de invoeraanvraag, dan zal de uitvoer hebben visualizations en attributions. Meer informatie over deze parameters vindt u in de volgende tabel. Visualisaties en toeschrijvingen worden gegenereerd op basis van een klasse met de hoogste waarschijnlijkheidsscore.

Uitvoersleutel Beschrijving
visualizations Eén 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 in vergelijking met classificatie met meerdere klassen is dat er in elke afbeelding meerdere klassen kunnen zijn waarvoor uitleg kan worden gegenereerd. visualizations Is dus de lijst met tekenreeksen voor base64-afbeeldingen en attributions is de lijst met toeschrijvingsscores voor elke geselecteerde klasse op basis van de confidence_score_threshold_multilabel (standaardwaarde is 0,5).

Als model_explainability, visualizationsworden attributions ingesteld True op in de invoeraanvraag, dan zal de uitvoer hebben visualizations en attributions. Meer informatie over deze parameters vindt u in de volgende tabel. Visualisaties en toeschrijvingen worden gegenereerd op basis van alle klassen die de waarschijnlijkheidsscore groter dan of gelijk aan confidence_score_threshold_multilabelhebben.

Uitvoersleutel Beschrijving
visualizations Lijst met afbeeldingen in base64-tekenreeksindeling met type
Optional, String
attributions Lijst met multidimensionale matrices met pixelgewijze toeschrijvingsscores voor 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 betrouwbaarheidsscore om time-outproblemen op het eindpunt te voorkomen of gebruik het eindpunt met het GPU-exemplaartype. Als u uitleg wilt genereren voor een groot aantal klassen in classificatie met meerdere labels, raadpleegt u het notebook voor batchscores (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]]],
                        .
                        .
                        .
                       ]
    }
]

Objectdetectie

Waarschuwing

XAI wordt niet ondersteund. Er worden dus alleen scores geretourneerd. Raadpleeg bijvoorbeeld de sectie voor online scoren.

Instantiesegmentatie

Waarschuwing

XAI wordt niet ondersteund. Er worden dus alleen scores geretourneerd. Raadpleeg bijvoorbeeld de sectie voor online scoren.

Notitie

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

Volgende stappen