Datascheman för att träna modeller för visuellt innehåll med automatiserad maskininlärning (v1)
GÄLLER FÖR: Python SDK azureml v1
Viktigt!
Några av Azure CLI-kommandona i den här artikeln använder azure-cli-ml
tillägget , eller v1, för Azure Machine Learning. Stödet för v1-tillägget upphör den 30 september 2025. Du kan installera och använda v1-tillägget fram till det datumet.
Vi rekommenderar att du övergår till ml
tillägget , eller v2, före den 30 september 2025. Mer information om v2-tillägget finns i Azure Machine Learning CLI-tillägget och Python SDK v2.
Viktigt!
Den här funktionen är för närvarande i allmänt tillgänglig förhandsversion. Den här förhandsversionen tillhandahålls utan ett serviceavtal. Vissa funktioner kanske inte stöds eller kan vara begränsade. Mer information finns i Kompletterande villkor för användning av Microsoft Azure-förhandsversioner.
Lär dig hur du formaterar dina JSONL-filer för dataförbrukning i automatiserade ML-experiment för uppgifter med visuellt innehåll under träning och slutsatsdragning.
Dataschema för träning
Azure Machine Learning AutoML for Images kräver att indata från bilddata förbereds i JSONL-format (JSON Lines). I det här avsnittet beskrivs indataformat eller schema för bildklassificering i flera klasser, bildklassificering med flera etiketter, objektidentifiering och instanssegmentering. Vi tillhandahåller också ett exempel på den slutliga träningen eller valideringen av JSON Lines-filen.
Bildklassificering (binär/flera klasser)
Indataformat/schema på varje JSON-rad:
{
"image_url":"AmlDatastore://data_directory/../Image_name.image_format",
"image_details":{
"format":"image_format",
"width":"image_width",
"height":"image_height"
},
"label":"class_name",
}
Nyckel | beskrivning | Exempel |
---|---|---|
image_url |
Avbildningsplats i Azure Machine Learning-datalagerRequired, String |
"AmlDatastore://data_directory/Image_01.jpg" |
image_details |
BildinformationOptional, Dictionary |
"image_details":{"format": "jpg", "width": "400px", "height": "258px"} |
format |
Bildtyp (alla tillgängliga bildformat i Pillow-biblioteket stöds)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 |
Bredd på bildenOptional, String or Positive Integer |
"400px" or 400 |
height |
Bildens höjdOptional, String or Positive Integer |
"200px" or 200 |
label |
Klass/etikett för bildenRequired, String |
"cat" |
Exempel på en JSONL-fil för bildklassificering i flera klasser:
{"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"}
Fleretiketter för bildklassificering
Följande är ett exempel på indataformat/schema i varje JSON-rad för bildklassificering.
{
"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"
]
}
Nyckel | beskrivning | Exempel |
---|---|---|
image_url |
Avbildningsplats i Azure Machine Learning-datalagerRequired, String |
"AmlDatastore://data_directory/Image_01.jpg" |
image_details |
BildinformationOptional, Dictionary |
"image_details":{"format": "jpg", "width": "400px", "height": "258px"} |
format |
Bildtyp (alla bildformat som är tillgängliga i Pillow-biblioteket stöds)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 |
Bredd på bildenOptional, String or Positive Integer |
"400px" or 400 |
height |
Bildens höjdOptional, String or Positive Integer |
"200px" or 200 |
label |
Lista över klasser/etiketter i bildenRequired, List of Strings |
["cat","dog"] |
Exempel på en JSONL-fil för Multi-label för bildklassificering:
{"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"]}
Objektidentifiering
Följande är ett exempel på en JSONL-fil för objektidentifiering.
{
"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"
},
"..."
]
}
Här
-
xmin
= x koordinat för det övre vänstra hörnet av avgränsningsrutan -
ymin
= y koordinat för det övre vänstra hörnet av avgränsningsrutan -
xmax
= x koordinat för det nedre högra hörnet av avgränsningsrutan -
ymax
= y koordinat för det nedre högra hörnet av avgränsningsrutan
Nyckel | beskrivning | Exempel |
---|---|---|
image_url |
Avbildningsplats i Azure Machine Learning-datalagerRequired, String |
"AmlDatastore://data_directory/Image_01.jpg" |
image_details |
BildinformationOptional, Dictionary |
"image_details":{"format": "jpg", "width": "400px", "height": "258px"} |
format |
Bildtyp (alla bildformat som är tillgängliga i Pillow-biblioteket stöds. Men för YOLO stöds endast bildformat som tillåts av 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 |
Bredd på bildenOptional, String or Positive Integer |
"499px" or 499 |
height |
Bildens höjdOptional, String or Positive Integer |
"665px" or 665 |
label (yttre nyckel) |
Lista över avgränsningsrutor, där varje ruta är en ordlista över label, topX, topY, bottomX, bottomY, isCrowd deras koordinater överst till vänster och längst ned till högerRequired, List of dictionaries |
[{"label": "cat", "topX": 0.260, "topY": 0.406, "bottomX": 0.735, "bottomY": 0.701, "isCrowd": 0}] |
label (inre nyckel) |
Klass/etikett för objektet i avgränsningsrutanRequired, String |
"cat" |
topX |
Förhållandet mellan x koordinaten i det övre vänstra hörnet i avgränsningsrutan och bildens breddRequired, Float in the range [0,1] |
0.260 |
topY |
Förhållandet mellan y-koordinaten i det övre vänstra hörnet i avgränsningsrutan och bildens höjdRequired, Float in the range [0,1] |
0.406 |
bottomX |
Förhållandet mellan x koordinaten i det nedre högra hörnet i avgränsningsrutan och bildens breddRequired, Float in the range [0,1] |
0.735 |
bottomY |
Förhållandet mellan y-koordinaten i det nedre högra hörnet av avgränsningsrutan och bildens höjdRequired, Float in the range [0,1] |
0.701 |
isCrowd |
Anger om avgränsningsrutan är runt mängden objekt. Om den här särskilda flaggan har angetts hoppar vi över den här specifika avgränsningsrutan när måttet beräknas.Optional, Bool |
0 |
Exempel på en JSONL-fil för objektidentifiering:
{"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}]}
Instanssegmentering
Till exempel segmentering stöder automatiserad ML endast polygon som indata och utdata, inga masker.
Följande är en JSONL-exempelfil för instanssegmentering.
{
"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"]]
}
]
}
Nyckel | beskrivning | Exempel |
---|---|---|
image_url |
Avbildningsplats i Azure Machine Learning-datalagerRequired, String |
"AmlDatastore://data_directory/Image_01.jpg" |
image_details |
BildinformationOptional, Dictionary |
"image_details":{"format": "jpg", "width": "400px", "height": "258px"} |
format |
BildtypOptional, 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 |
Bredd på bildenOptional, String or Positive Integer |
"499px" or 499 |
height |
Bildens höjdOptional, String or Positive Integer |
"665px" or 665 |
label (yttre nyckel) |
Lista över masker, där varje mask är en ordlista med 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 (inre nyckel) |
Klass/etikett för objektet i maskenRequired, String |
"cat" |
isCrowd |
Anger om masken är runt mängden objektOptional, Bool |
0 |
polygon |
Polygonkoordinater för objektetRequired, 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]] |
Exempel på en JSONL-fil för instanssegmentering:
{"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 ]]}]}
Dataformat för slutsatsdragning
I det här avsnittet dokumenterar vi det indataformat som krävs för att göra förutsägelser när du använder en distribuerad modell. Alla ovan nämnda bildformat accepteras med innehållstypen application/octet-stream
.
Indataformat
Följande är det indataformat som behövs för att generera förutsägelser för alla aktiviteter med hjälp av en aktivitetsspecifik modellslutpunkt. När vi har distribuerat modellen kan vi använda följande kodfragment för att få förutsägelser för alla uppgifter.
# 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)
Utdataformat
Förutsägelser som görs på modellslutpunkter följer olika struktur beroende på aktivitetstyp. Det här avsnittet utforskar utdataformaten för bildklassificering med flera klasser, bildklassificering med flera etiketter, objektidentifiering och instanssegmenteringsuppgifter.
Bildklassificering
Slutpunkten för bildklassificering returnerar alla etiketter i datamängden och deras sannolikhetspoäng för indatabilden i följande format.
{
"filename":"/tmp/tmppjr4et28",
"probs":[
2.098e-06,
4.783e-08,
0.999,
8.637e-06
],
"labels":[
"can",
"carton",
"milk_bottle",
"water_bottle"
]
}
Fleretiketter för bildklassificering
För bildklassificering med flera etiketter returnerar modellslutpunkten etiketter och deras sannolikheter.
{
"filename":"/tmp/tmpsdzxlmlm",
"probs":[
0.997,
0.960,
0.982,
0.025
],
"labels":[
"can",
"carton",
"milk_bottle",
"water_bottle"
]
}
Objektidentifiering
Objektidentifieringsmodellen returnerar flera rutor med sina skalade koordinater uppe till vänster och längst ned till höger tillsammans med boxetikett och konfidenspoäng.
{
"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
}
]
}
Instanssegmentering
I instanssegmentering består utdata av flera rutor med sina skalade koordinater överst till vänster och längst ned till höger, etiketter, konfidenspoäng och polygoner (inte masker). Här är polygonvärdena i samma format som vi diskuterade i schemaavsnittet.
{
"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
]
]
}
]
}
Kommentar
Bilderna som används i den här artikeln kommer från datauppsättningen Fridge Objects, copyright © Microsoft Corporation och finns på computervision-recipes/01_training_introduction.ipynb under MIT-licensen.