Datenschemas zum Trainieren von Modellen für maschinelles Sehen mit automatisiertem maschinellem Lernen

GILT FÜR:Azure CLI ML-Erweiterung v2 (aktuell)Python SDK azure-ai-ml v2 (aktuell)

Hier erfahren Sie, wie Sie Ihre JSONL-Dateien in den Trainings- und Rückschlussphasen für die Datennutzung in automatisierten ML-Experimenten für Aufgaben des maschinellen Sehens formatieren.

Datenschema für das Training

Das automatisierte maschinelle Lernen von Azure Machine Learning für Bilder erfordert, dass Eingabebilddaten im JSONL-Format (JSON Lines) vorbereitet werden. In diesem Abschnitt werden Eingabedatenformate bzw. -schemas für die Bildklassifizierung mit mehreren Klassen, die Bildklassifizierung mit mehreren Beschriftungen, die Objekterkennung und die Instanzsegmentierung beschrieben. Wir stellen auch eine JSON Lines-Beispieldatei für das abschließende Training bzw. die Validierung zur Verfügung.

Bildklassifizierung (binär/mehrere Klassen)

Eingabedatenformat/-schema in jeder JSON Lines-Datei:

{
   "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",
}
Schlüssel BESCHREIBUNG Beispiel
image_url Bildspeicherort im Azure Machine Learning-Datenspeicher
my-subscription-id muss durch das Azure-Abonnement ersetzt werden, in dem sich die Bilder befinden. Weitere Informationen zu Azure-Abonnements finden Sie hier. Ähnlich sollten my-resource-group, my-workspace, my-datastore durch den Ressourcengruppennamen, den Arbeitsbereichsnamen und den Datenspeichernamen ersetzt werden.
path_to_image sollte der vollständige Pfad zum Bild im Datenspeicher sein.
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 Bilddetails
Optional, Dictionary
"image_details":{"format": "jpg", "width": "400px", "height": "258px"}
format Bildtyp (alle verfügbaren Bildformate in der Pillow-Bibliothek werden unterstützt)
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 Bildbreite
Optional, String or Positive Integer
"400px" or 400
height Bildhöhe
Optional, String or Positive Integer
"200px" or 200
label Klasse/Beschriftung des Bilds
Required, String
"cat"

Beispiel einer JSONL-Datei für die Bildklassifizierung mit mehreren 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"}

Bildbeispiel für die Bildklassifizierung mit mehreren Klassen.

Bildklassifizierung mit mehreren Beschriftungen

Im Folgenden finden Sie ein Beispiel für das Eingabedatenformat/-schema in jeder JSON Lines-Datei für die Bildklassifizierung.

{
   "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"
        
   ]
}
Schlüssel BESCHREIBUNG Beispiel
image_url Bildspeicherort im Azure Machine Learning-Datenspeicher
my-subscription-id muss durch das Azure-Abonnement ersetzt werden, in dem sich die Bilder befinden. Weitere Informationen zu Azure-Abonnements finden Sie hier. Ähnlich sollten my-resource-group, my-workspace, my-datastore durch den Ressourcengruppennamen, den Arbeitsbereichsnamen und den Datenspeichernamen ersetzt werden.
path_to_image sollte der vollständige Pfad zum Bild im Datenspeicher sein.
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 Bilddetails
Optional, Dictionary
"image_details":{"format": "jpg", "width": "400px", "height": "258px"}
format Bildtyp (alle verfügbaren Bildformate in der Pillow-Bibliothek werden unterstützt)
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 Bildbreite
Optional, String or Positive Integer
"400px" or 400
height Bildhöhe
Optional, String or Positive Integer
"200px" or 200
label Liste der Klassen/Beschriftungen im Bild
Required, List of Strings
["cat","dog"]

Beispiel für eine JSONL-Datei für die Bildklassifizierung mit mehreren Beschriftungen:

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

Bildbeispiel für die Bildklassifizierung mit mehreren Beschriftungen.

Objekterkennung

Im Folgenden finden Sie eine JSONL-Beispieldatei für die Objekterkennung.

{
   "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 gilt Folgendes:

  • xmin = x-Koordinate der oberen linken Ecke des Begrenzungsrahmens
  • ymin = y-Koordinate der oberen linken Ecke des Begrenzungsrahmens
  • xmax = x-Koordinate der rechten unteren Ecke des Begrenzungsrahmens
  • ymax = y-Koordinate der rechten unteren Ecke des Begrenzungsrahmens
Key BESCHREIBUNG Beispiel
image_url Bildspeicherort im Azure Machine Learning-Datenspeicher
my-subscription-id muss durch das Azure-Abonnement ersetzt werden, in dem sich die Bilder befinden. Weitere Informationen zu Azure-Abonnements finden Sie hier. Ähnlich sollten my-resource-group, my-workspace, my-datastore durch den Ressourcengruppennamen, den Arbeitsbereichsnamen und den Datenspeichernamen ersetzt werden.
path_to_image sollte der vollständige Pfad zum Bild im Datenspeicher sein.
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 Bilddetails
Optional, Dictionary
"image_details":{"format": "jpg", "width": "400px", "height": "258px"}
format Bildtyp (alle Bildformate, die in der Pillow-Bibliothek verfügbar sind, werden unterstützt. Für YOLO werden jedoch nur von opencv zulässige Bildformate unterstützt.)
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 Bildbreite
Optional, String or Positive Integer
"499px" or 499
height Bildhöhe
Optional, String or Positive Integer
"665px" or 665
label (äußerer Schlüssel) Liste der Begrenzungsrahmen, wobei jeder Rahmen ein label, topX, topY, bottomX, bottomY, isCrowd-Wörterbuch der Koordinaten für die obere linke und die untere rechte Ecke ist
Required, List of dictionaries
[{"label": "cat", "topX": 0.260, "topY": 0.406, "bottomX": 0.735, "bottomY": 0.701, "isCrowd": 0}]
label (innerer Schlüssel) Klasse/Beschriftung des Objekts im Begrenzungsrahmen
Required, String
"cat"
topX Verhältnis zwischen der x-Koordinate der oberen linken Ecke des Begrenzungsrahmens und der Breite des Bilds
Required, Float in the range [0,1]
0.260
topY Verhältnis zwischen der y-Koordinate der oberen linken Ecke des Begrenzungsrahmens und der Höhe des Bilds
Required, Float in the range [0,1]
0.406
bottomX Verhältnis zwischen der x-Koordinate der unteren rechten Ecke des Begrenzungsrahmens und der Breite des Bilds
Required, Float in the range [0,1]
0.735
bottomY Verhältnis zwischen der y-Koordinate der unteren rechten Ecke des Begrenzungsrahmens und der Höhe des Bilds
Required, Float in the range [0,1]
0.701
isCrowd Gibt an, ob sich der Begrenzungsrahmen um die Hauptmenge an Objekten befindet; Wenn dieses spezielle Flag festgelegt ist, wird dieser Begrenzungsrahmen beim Berechnen der Metrik übersprungen
Optional, Bool
0

Beispiel für eine JSONL-Datei für die Objekterkennung:

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

Bildbeispiel für die Objekterkennung.

Instanzsegmentierung

Zur Segmentierung von Instanzen unterstützt das automatisierte maschinelle Lernen nur Polygone als Ein- und Ausgabe, keine Masken.

Im Folgenden finden Sie eine JSONL-Beispieldatei für die Instanzsegmentierung:

{
   "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"]]
      }
   ]
}
Schlüssel BESCHREIBUNG Beispiel
image_url Bildspeicherort im Azure Machine Learning-Datenspeicher
my-subscription-id muss durch das Azure-Abonnement ersetzt werden, in dem sich die Bilder befinden. Weitere Informationen zu Azure-Abonnements finden Sie hier. Ähnlich sollten my-resource-group, my-workspace, my-datastore durch den Ressourcengruppennamen, den Arbeitsbereichsnamen und den Datenspeichernamen ersetzt werden.
path_to_image sollte der vollständige Pfad zum Bild im Datenspeicher sein.
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 Bilddetails
Optional, Dictionary
"image_details":{"format": "jpg", "width": "400px", "height": "258px"}
format Imagetyp
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 Bildbreite
Optional, String or Positive Integer
"499px" or 499
height Bildhöhe
Optional, String or Positive Integer
"665px" or 665
label (äußerer Schlüssel) Liste der Masken, wobei jede Maske ein Wörterbuch aus label, isCrowd, polygon coordinates ist
Required, List of dictionaries
[{"label": "can", "isCrowd": 0, "polygon": [[0.577, 0.689,
0.562, 0.681,
0.559, 0.686]]}]
label (innerer Schlüssel) Klasse/Beschriftung des Objekts in der Maske
Required, String
"cat"
isCrowd Gibt an, ob sich die Maske um die Hauptmenge an Objekten befindet
Optional, Bool
0
polygon Polygonkoordinaten für das Objekt
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]]

Beispiel für eine JSONL-Datei für Instanzsegmentierung:

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

Bildbeispiel für die Instanzsegmentierung.

Datenschema für die Onlinebewertung

In diesem Abschnitt wird das Eingabedatenformat dokumentiert, das für Vorhersagen mithilfe eines bereitgestellten Modells erforderlich ist.

Eingabeformat

Der folgende JSON-Code zeigt das Eingabeformat, das zum Generieren von Vorhersagen für eine beliebige Aufgabe mithilfe eines aufgabenspezifischen Modellendpunkts erforderlich ist:

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

Dieser JSON-Code ist ein Wörterbuch mit input_data für äußere Schlüssel und columns, data für innere Schlüssel wie in der folgenden Tabelle beschrieben. Der Endpunkt akzeptiert eine JSON-Zeichenfolge im oben genannten Format und konvertiert sie in einen Datenrahmen mit Beispielen, die vom Bewertungsskript benötigt werden. Jedes Eingabebild im Abschnitt request_json["input_data"]["data"] des JSON-Codes ist eine Base64-codierte Zeichenfolge.

Schlüssel BESCHREIBUNG
input_data
(äußerer Schlüssel)
Es handelt sich um einen äußeren Schlüssel in der JSON-Anforderung. input_data ist ein Wörterbuch, das Eingabebildbeispiele akzeptiert.
Required, Dictionary
columns
(innerer Schlüssel)
Spaltennamen, die zum Erstellen von Datenrahmen verwendet werden sollen. Es wird nur eine Spalte mit dem Spaltennamen image akzeptiert.
Required, List
data
(innerer Schlüssel)
Liste der Base64-codierten Bilder
Required, List

Nach dem Bereitstellen des mlflow-Modells können wir den folgenden Codeausschnitt verwenden, um Vorhersagen für alle Aufgaben abzurufen:

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

Ausgabeformat

Vorhersagen für Modellendpunkte folgen je nach Aufgabentyp einer unterschiedlichen Struktur. In diesem Abschnitt werden die Ausgabedatenformate für folgende Aufgaben erläutert: Bildklassifizierungen mit mehreren Klassen, Bildklassifizierungen mit mehreren Beschriftungen, Objekterkennung und Instanzsegmentierung.

Die folgenden Schemas gelten, wenn die Eingabeanforderung ein Bild enthält.

Bildklassifizierung (binär/mehrere Klassen)

Der Endpunkt für die Bildklassifizierung gibt alle Beschriftungen im Dataset und deren Wahrscheinlichkeitsbewertungen für das Eingabebild im folgenden Format zurück. visualizations und attributions beziehen sich auf die Erklärbarkeit, und wenn die Anforderung nur für die Bewertung verwendet wird, werden diese Schlüssel nicht in der Ausgabe enthalten sein. Weitere Informationen zum Ein- und Ausgabeschema zur Erklärbarkeit für die Bildklassifizierung finden Sie im Abschnitt zur Erklärbarkeit für die Bildklassifizierung.

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

Bildklassifizierung mit mehreren Beschriftungen

Für die Bildklassifizierung mit mehreren Beschriftungen gibt der Modellendpunkt Beschriftungen und deren Wahrscheinlichkeiten zurück. visualizations und attributions beziehen sich auf die Erklärbarkeit, und wenn die Anforderung nur für die Bewertung verwendet wird, werden diese Schlüssel nicht in der Ausgabe enthalten sein. Weitere Informationen zum Ein- und Ausgabeschema zur Erklärbarkeit für die Klassifizierung mit mehreren Bezeichnungen finden Sie im Abschnitt zur Erklärbarkeit für die Bildklassifizierung mit mehreren Bezeichnungen.

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

Objekterkennung

Das Objekterkennungsmodell gibt mehrere Rahmen mit ihren skalierten Koordinaten für die obere linke und die untere rechte Ecke zusammen mit der Rahmenbeschriftung und einer Konfidenzbewertung zurück.

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

Instanzsegmentierung

Bei der Instanzsegmentierung besteht die Ausgabe aus mehreren Rahmen mit skalierten Koordinaten für die obere linke und die untere rechte Ecke, Beschriftungen, Konfidenzbewertungen und Polygonen (keine Masken). Hier haben die Polygonwerte das gleiche Format, das im Abschnitt Schema erläutert wurde.

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

Datenformat für Onlinebewertung und Erklärbarkeit (XAI)

Wichtig

Diese Einstellungen sind derzeit in der öffentlichen Vorschau. Sie werden ohne Vereinbarung zum Servicelevel bereitgestellt. Manche Features werden möglicherweise nicht unterstützt oder sind nur eingeschränkt verwendbar. Weitere Informationen finden Sie unter Zusätzliche Nutzungsbestimmungen für Microsoft Azure-Vorschauen.

Warnung

Die Erklärbarkeit wird nur für die Klassifizierung mit mehreren Klassen und die Klassifizierung mit mehreren Bezeichnungen unterstützt. Wenn beim Generieren von Erklärungen für Onlineendpunkte Timeoutprobleme auftreten, verwenden Sie das Batchbewertungs-Notebook (SDK v1), um Erklärungen zu generieren.

In diesem Abschnitt wird das Eingabedatenformat dokumentiert, das für Vorhersagen und das Generieren von Erklärungen für die vorhergesagten Klassen mithilfe eines bereitgestellten Modells erforderlich ist. Für Erklärbarkeit ist keine separate Bereitstellung erforderlich. Derselbe Endpunkt, der bei der Onlinebewertung zum Einsatz kommt, kann auch zum Generieren von Erklärungen verwendet werden. Wir müssen nur einige zusätzliche Erklärbarkeitsparameter im Eingabeschema übergeben und entweder Visualisierungen von Erklärungen und/oder Zuordnungsbewertungsmatrizen (Erklärungen auf Pixelebene) abrufen.

Unterstützte Erklärbarkeitsmethoden:

Eingabeformat (XAI)

Die folgenden Eingabeformate werden unterstützt, um Vorhersagen und Erklärungen für jede Klassifizierungsaufgabe mithilfe des aufgabenspezifischen Modellendpunkts zu generieren. Nach dem Bereitstellen des Modells können wir das folgende Schema verwenden, um Vorhersagen und Erklärungen abzurufen.

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

Zusammen mit dem Bild sind zwei zusätzliche Parameter (model_explainability und xai_parameters) im Eingabeschema erforderlich, um Erklärungen zu generieren.

Schlüssel BESCHREIBUNG Standardwert
image_base64 Eingabebild im Base64-Format
Required, String
-
model_explainability Gibt an, ob Erklärungen oder nur die Bewertung generiert werden soll(en)
Optional, Bool
False
xai_parameters Wenn model_explainability auf „True“ festgelegt ist, dann ist xai_parameters ein Wörterbuch mit auf den Erklärbarkeitsalgorithmus bezogenen Parametern mit xai_algorithm, visualizations, attributions als Schlüssel.
Optional, Dictionary
Wenn xai_parameters nicht übergeben wird, wird der xrai-Erklärbarkeitsalgorithmus mit seinem Standardwert verwendet.
{"xai_algorithm": "xrai", "visualizations": True, "attributions": False}
xai_algorithm Name des zu verwendenden Erklärbarkeitsalgorithmus. Unterstützte XAI-Algorithmen: {xrai, integrated_gradients, guided_gradcam, guided_backprop}
Optional, String
xrai
visualizations Gibt an, ob Visualisierungen von Erklärungen zurückgegeben werden sollen.
Optional, Bool
True
attributions Gibt an, ob Featurezuordnungen zurückgegeben werden sollen.
Optional, Bool
False
confidence_score_threshold_multilabel Schwellenwert für die Konfidenzbewertung, um die obersten Klassen auszuwählen und Erklärungen in der Klassifizierung mit mehreren Bezeichnungen zu generieren.
Optional, Float
0.5

In der folgenden Tabelle werden die unterstützten Schemas zur Erklärbarkeit beschrieben.

type Schema
Rückschluss für ein einzelnes Bild im Base64-Format Wörterbuch mit image_base64 als Schlüssel und Wert ist ein Base64-codiertes Bild,
Schlüssel model_explainability mit „True“ oder „False“ und xai_parameters-Wörterbuch mit für den XAI-Algorithmus spezifischen Parametern
Required, Json String
Works for one or more images

Jedes Eingabebild in request_json, das im folgenden Code definiert ist, ist eine Base64-codierte Zeichenfolge, die der Liste request_json["input_data"]["data"] angefügt wird:

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)

Ausgabeformat (XAI)

Vorhersagen für Modellendpunkte folgen je nach Aufgabentyp einem unterschiedlichen Schema. In diesem Abschnitt werden die Ausgabedatenformate für Aufgaben für Bildklassifizierungen mit mehreren Klassen und für Bildklassifizierungen mit mehreren Beschriftungen beschrieben.

Die folgenden Schemas werden für den Fall von zwei Eingabebildern definiert.

Bildklassifizierung (binär/mehrere Klassen)

Das Ausgabeschema entspricht dem oben beschriebenen, mit der Ausnahme, dass die Schlüsselwerte visualizations und attributions enthalten sind, wenn diese Schlüssel in der Anforderung auf True festgelegt wurden.

Wenn model_explainability, visualizations, attributions in der Eingabeanforderung auf True festgelegt sind, enthält die Ausgabe visualizations und attributions. Weitere Details zu diesen Parametern finden Sie in der folgenden Tabelle. Visualisierungen und Zuordnungen werden für eine Klasse mit der höchsten Wahrscheinlichkeitsbewertung generiert.

Ausgabeschlüssel BESCHREIBUNG
visualizations Einzelnes Bild im Base64-Zeichenfolgenformat mit Typ
Optional, String
attributions Mehrdimensionales Array mit pixelweisen Zuordnungswerten im Format [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]]]
    }
]

Bildklassifizierung mit mehreren Beschriftungen

Der einzige Unterschied im Ausgabeschema der Klassifizierung mit mehreren Bezeichnungen im Vergleich zur Klassifizierung mit mehreren Klassen besteht darin, dass in jedem Bild mehrere Klassen vorhanden sein können, für die Erklärungen generiert werden können. visualizations ist also die Liste der Base64-Bildzeichenfolgen und attributions die Liste der Zuordnungsbewertungen für jede ausgewählte Klasse basierend auf confidence_score_threshold_multilabel (Standardwert: 0,5).

Wenn model_explainability, visualizations, attributions in der Eingabeanforderung auf True festgelegt sind, enthält die Ausgabe visualizations und attributions. Weitere Details zu diesen Parametern finden Sie in der folgenden Tabelle. Visualisierungen und Zuordnungen werden für alle Klassen generiert, deren Wahrscheinlichkeitsbewertung größer oder gleich confidence_score_threshold_multilabel ist.

Ausgabeschlüssel BESCHREIBUNG
visualizations Liste von Bildern im Base64-Zeichenfolgenformat mit Typ
Optional, String
attributions Liste der mehrdimensionalen Arrays mit pixelweisen Zuordnungsbewertungen für jede Klasse, bei der jedes mehrdimensionale Array das Format [3, valid_crop_size, valid_crop_size] hat.
Optional, List

Warnung

Stellen Sie beim Generieren von Erklärungen für den Onlineendpunkt sicher, dass Sie nur wenige Klassen basierend auf der Konfidenzbewertung auswählen, um Timeoutprobleme für den Endpunkt zu vermeiden oder den Endpunkt mit dem GPU-Instanztyp zu verwenden. Informationen zum Generieren von Erklärungen für eine große Anzahl von Klassen in der Klassifizierung mit mehreren Bezeichnungen finden Sie im Batchbewertungs-Notebook (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]]],
                        .
                        .
                        .
                       ]
    }
]

Objekterkennung

Warnung

XAI wird nicht unterstützt. Daher werden nur Bewertungen zurückgegeben. Ein Bewertungsbeispiel finden Sie im Abschnitt zur Onlinebewertung.

Instanzsegmentierung

Warnung

XAI wird nicht unterstützt. Daher werden nur Bewertungen zurückgegeben. Ein Bewertungsbeispiel finden Sie im Abschnitt zur Onlinebewertung.

Hinweis

Die in diesem Artikel verwendeten Bilder stammen aus dem Dataset „Fridge Objects“ (Copyright © Microsoft Corporation) und stehen über computervision-recipes/01_training_introduction.ipynb unter der MIT-Lizenz zur Verfügung.

Nächste Schritte