Datenschemas zum Trainieren von Modellen für maschinelles Sehen mit automatisiertem maschinellem Lernen (v1)
GILT FÜR: Python SDK azureml v1
Wichtig
Einige Azure CLI-Befehle in diesem Artikel verwenden die Erweiterung azure-cli-ml
oder v1 für Azure Machine Learning. Der Support für die v1-Erweiterung endet am 30. September 2025. Sie können die v1-Erweiterung bis zu diesem Datum installieren und verwenden.
Es wird empfohlen, vor dem 30. September 2025 zur ml
- oder v2-Erweiterung zu wechseln. Weitere Informationen zur v2-Erweiterung finden Sie unter Was sind die Azure Machine Learning CLI und das Python SDK v2?.
Wichtig
Dieses Feature ist zurzeit als öffentliche Preview verfügbar. Diese Vorschauversion wird 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.
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":"AmlDatastore://data_directory/../Image_name.image_format",
"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-DatenspeicherRequired, String |
"AmlDatastore://data_directory/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": "AmlDatastore://image_data/Image_01.jpg", "image_details":{"format": "jpg", "width": "400px", "height": "258px"}, "label": "can"}
{"image_url": "AmlDatastore://image_data/Image_02.jpg", "image_details": {"format": "jpg", "width": "397px", "height": "296px"}, "label": "milk_bottle"}
.
.
.
{"image_url": "AmlDatastore://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":"AmlDatastore://data_directory/../Image_name.image_format",
"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-DatenspeicherRequired, String |
"AmlDatastore://data_directory/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": "AmlDatastore://image_data/Image_01.jpg", "image_details":{"format": "jpg", "width": "400px", "height": "258px"}, "label": ["can"]}
{"image_url": "AmlDatastore://image_data/Image_02.jpg", "image_details": {"format": "jpg", "width": "397px", "height": "296px"}, "label": ["can","milk_bottle"]}
.
.
.
{"image_url": "AmlDatastore://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":"AmlDatastore://data_directory/../Image_name.image_format",
"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-DatenspeicherRequired, String |
"AmlDatastore://data_directory/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": "AmlDatastore://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": "AmlDatastore://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": "AmlDatastore://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":"AmlDatastore://data_directory/../Image_name.image_format",
"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-DatenspeicherRequired, String |
"AmlDatastore://data_directory/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": "AmlDatastore://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": "AmlDatastore://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": "AmlDatastore://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 ]]}]}
Datenformat für Rückschlüsse
In diesem Abschnitt wird das Eingabedatenformat dokumentiert, das bei Verwendung eines bereitgestellten Modells für Vorhersagen erforderlich ist. Alle oben genannten Bildformate werden mit dem Inhaltstyp application/octet-stream
akzeptiert.
Eingabeformat
Im Folgenden finden Sie das Eingabeformat, das zum Generieren von Vorhersagen für eine beliebige Aufgabe mithilfe eines aufgabenspezifischen Modellendpunkts erforderlich ist. Nach dem Bereitstellen des Modells können wir den folgenden Codeausschnitt verwenden, um Vorhersagen für alle Aufgaben abzurufen.
# input image for inference
sample_image = './test_image.jpg'
# load image data
data = open(sample_image, 'rb').read()
# set the content type
headers = {'Content-Type': 'application/octet-stream'}
# if authentication is enabled, set the authorization header
headers['Authorization'] = f'Bearer {key}'
# make the request and display the response
response = requests.post(scoring_uri, data, headers=headers)
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.
Bildklassifizierung
Der Endpunkt für die Bildklassifizierung gibt alle Beschriftungen im Dataset und deren Wahrscheinlichkeitsbewertungen für das Eingabebild im folgenden Format zurück.
{
"filename":"/tmp/tmppjr4et28",
"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.
{
"filename":"/tmp/tmpsdzxlmlm",
"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.
{
"filename":"/tmp/tmpdkg2wkdy",
"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.
{
"filename":"/tmp/tmpi8604s0h",
"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
]
]
}
]
}
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.