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 |
BilddetailsOptional, 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 |
BildbreiteOptional, String or Positive Integer |
"400px" or 400 |
height |
BildhöheOptional, String or Positive Integer |
"200px" or 200 |
label |
Klasse/Beschriftung des BildsRequired, 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"}
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 |
BilddetailsOptional, 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 |
BildbreiteOptional, String or Positive Integer |
"400px" or 400 |
height |
BildhöheOptional, String or Positive Integer |
"200px" or 200 |
label |
Liste der Klassen/Beschriftungen im BildRequired, 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"]}
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 Begrenzungsrahmensymin
= y-Koordinate der oberen linken Ecke des Begrenzungsrahmensxmax
= x-Koordinate der rechten unteren Ecke des Begrenzungsrahmensymax
= 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 |
BilddetailsOptional, 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 |
BildbreiteOptional, String or Positive Integer |
"499px" or 499 |
height |
BildhöheOptional, 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 istRequired, 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 BegrenzungsrahmenRequired, String |
"cat" |
topX |
Verhältnis zwischen der x-Koordinate der oberen linken Ecke des Begrenzungsrahmens und der Breite des BildsRequired, 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 BildsRequired, 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 BildsRequired, 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 BildsRequired, 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 übersprungenOptional, 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}]}
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 |
BilddetailsOptional, Dictionary |
"image_details":{"format": "jpg", "width": "400px", "height": "258px"} |
format |
ImagetypOptional, 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 |
BildbreiteOptional, String or Positive Integer |
"499px" or 499 |
height |
BildhöheOptional, 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 MaskeRequired, String |
"cat" |
isCrowd |
Gibt an, ob sich die Maske um die Hauptmenge an Objekten befindetOptional, Bool |
0 |
polygon |
Polygonkoordinaten für das ObjektRequired, 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 ]]}]}
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:
- XRAI (xrai)
- Integrierte Gradienten (integrated_gradients)
- Gesteuerte GradCAM (guided_gradcam)
- Gesteuerte BackPropagation (guided_backprop)
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-FormatRequired, 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 base64-codiertes Bild, model_explainability key with True or False and xai_parameters dictionary with XAI algorithm specific parameters 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 der Bilder 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.