Schemi di dati per eseguire il training di modelli di visione artificiale con Machine Learning automatizzato (v1)
SI APPLICA A: Python SDK azureml v1
Importante
Alcuni comandi dell'interfaccia della riga di comando (CLI) di Azure in questo articolo usano l'estensione azure-cli-ml
, o v1, per Azure Machine Learning. L'assistenza per l'estensione v1 terminerà il 30 settembre 2025. Sarà possibile installare e usare l'estensione v1 fino a tale data.
Consigliamo di passare all'estensione ml
, o v2, prima del 30 settembre 2025. Per ulteriori informazioni sull'estensione v2, consultare Estensione dell'interfaccia della riga di comando (CLI) di Azure Machine Learning e Python SDK v2.
Importante
Questa funzionalità è attualmente in anteprima pubblica. Questa versione di anteprima viene fornita senza un contratto di servizio. Alcune funzionalità potrebbero non essere supportate o potrebbero presentare funzionalità limitate. Per altre informazioni, vedere le Condizioni supplementari per l'uso delle anteprime di Microsoft Azure.
Informazioni su come formattare i file JSONL per l'utilizzo dei dati in esperimenti di Machine Learning automatizzati per le attività di visione artificiale durante il training e l'inferenza.
AutoML di Azure Machine Learning per le immagini richiede che i dati dell'immagine di input siano preparati in formato JSONL (righe JSON). In questa sezione vengono descritti i formati di dati di input o lo schema per la classificazione di immagini multiclasse, la classificazione di immagini multi-etichetta, il rilevamento degli oggetti e la segmentazione dell'istanza. Verrà inoltre fornito un esempio di file JSON Lines di training o convalida finale.
Formato/schema di dati di input in ogni riga JSON:
{
"image_url":"AmlDatastore://data_directory/../Image_name.image_format",
"image_details":{
"format":"image_format",
"width":"image_width",
"height":"image_height"
},
"label":"class_name",
}
Chiave | Descrizione | Esempio |
---|---|---|
image_url |
Percorso dell'immagine nell'archivio dati di Azure Machine LearningRequired, String |
"AmlDatastore://data_directory/Image_01.jpg" |
image_details |
Dettagli immagineOptional, Dictionary |
"image_details":{"format": "jpg", "width": "400px", "height": "258px"} |
format |
Tipo di immagine (sono supportati tutti i formati di immagine disponibili nella libreria Pillow )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 |
Larghezza dell'immagineOptional, String or Positive Integer |
"400px" or 400 |
height |
Altezza dell'immagineOptional, String or Positive Integer |
"200px" or 200 |
label |
Classe/etichetta dell'immagineRequired, String |
"cat" |
Esempio di file JSONL per la classificazione di immagini multiclasse:
{"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"}
Di seguito è riportato un esempio di formato/schema di dati di input in ogni riga JSON per la classificazione delle immagini.
{
"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"
]
}
Chiave | Descrizione | Esempio |
---|---|---|
image_url |
Percorso dell'immagine nell'archivio dati di Azure Machine LearningRequired, String |
"AmlDatastore://data_directory/Image_01.jpg" |
image_details |
Dettagli immagineOptional, Dictionary |
"image_details":{"format": "jpg", "width": "400px", "height": "258px"} |
format |
Tipo di immagine (sono supportati tutti i formati di immagine disponibili nella libreria Pillow )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 |
Larghezza dell'immagineOptional, String or Positive Integer |
"400px" or 400 |
height |
Altezza dell'immagineOptional, String or Positive Integer |
"200px" or 200 |
label |
Elenco di classi/etichette nell'immagineRequired, List of Strings |
["cat","dog"] |
Esempio di file JSONL per Classificazione immagini con più etichette:
{"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"]}
Di seguito è riportato un file JSONL di esempio per il rilevamento degli oggetti.
{
"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"
},
"..."
]
}
Qui
xmin
= x coordinata dell'angolo superiore sinistro del rettangolo di selezioneymin
= coordinata y dell'angolo superiore sinistro del rettangolo di selezionexmax
= x coordinata dell'angolo inferiore destro del rettangolo di selezioneymax
= coordinata y dell'angolo inferiore destro del rettangolo di selezione
Chiave | Descrizione | Esempio |
---|---|---|
image_url |
Percorso dell'immagine nell'archivio dati di Azure Machine LearningRequired, String |
"AmlDatastore://data_directory/Image_01.jpg" |
image_details |
Dettagli immagineOptional, Dictionary |
"image_details":{"format": "jpg", "width": "400px", "height": "258px"} |
format |
Tipo di immagine (sono supportati tutti i formati immagine disponibili nella libreria Pillow . Ma per YOLO sono supportati solo i formati di immagine consentiti da 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 |
Larghezza dell'immagineOptional, String or Positive Integer |
"499px" or 499 |
height |
Altezza dell'immagineOptional, String or Positive Integer |
"665px" or 665 |
label (chiave esterna) |
Elenco di rettangoli delimitatori, dove ogni casella è un dizionario delle label, topX, topY, bottomX, bottomY, isCrowd rispettive coordinate in alto a sinistra e in basso a destraRequired, List of dictionaries |
[{"label": "cat", "topX": 0.260, "topY": 0.406, "bottomX": 0.735, "bottomY": 0.701, "isCrowd": 0}] |
label (chiave interna) |
Classe/etichetta dell'oggetto nel rettangolo di selezioneRequired, String |
"cat" |
topX |
Rapporto di x coordinate dell'angolo superiore sinistro del rettangolo di selezione e larghezza dell'immagineRequired, Float in the range [0,1] |
0.260 |
topY |
Rapporto della coordinata y dell'angolo superiore sinistro del rettangolo di selezione e dell'altezza dell'immagineRequired, Float in the range [0,1] |
0.406 |
bottomX |
Rapporto delle coordinate x dell'angolo inferiore destro del rettangolo di selezione e larghezza dell'immagineRequired, Float in the range [0,1] |
0.735 |
bottomY |
Rapporto di coordinata y dell'angolo inferiore destro del rettangolo di selezione e altezza dell'immagineRequired, Float in the range [0,1] |
0.701 |
isCrowd |
Indica se il rettangolo di selezione è intorno alla folla di oggetti. Se questo flag speciale è impostato, ignorare questo particolare rettangolo di selezione quando si calcola la metrica.Optional, Bool |
0 |
Esempio di file JSONL per il rilevamento degli oggetti:
{"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}]}
Ad esempio, machine learning automatizzato supporta solo il poligono come input e output, senza maschere.
Di seguito è riportato un file JSONL di esempio per la segmentazione dell'istanza.
{
"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"]]
}
]
}
Chiave | Descrizione | Esempio |
---|---|---|
image_url |
Percorso dell'immagine nell'archivio dati di Azure Machine LearningRequired, String |
"AmlDatastore://data_directory/Image_01.jpg" |
image_details |
Dettagli immagineOptional, Dictionary |
"image_details":{"format": "jpg", "width": "400px", "height": "258px"} |
format |
Tipo di immagineOptional, 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 |
Larghezza dell'immagineOptional, String or Positive Integer |
"499px" or 499 |
height |
Altezza dell'immagineOptional, String or Positive Integer |
"665px" or 665 |
label (chiave esterna) |
Elenco di maschere, dove ogni maschera è un dizionario di 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 (chiave interna) |
Classe/etichetta dell'oggetto nella mascheraRequired, String |
"cat" |
isCrowd |
Indica se la maschera è intorno alla folla di oggettiOptional, Bool |
0 |
polygon |
Coordinate poligono per l'oggettoRequired, 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]] |
Esempio di un file JSONL per la segmentazione dell'istanza:
{"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 ]]}]}
In questa sezione viene illustrato il formato dei dati di input necessario per eseguire stime quando si usa un modello distribuito. Qualsiasi formato di immagine menzionato in precedenza viene accettato con il tipo di application/octet-stream
contenuto .
Di seguito è riportato il formato di input necessario per generare stime in qualsiasi attività usando un endpoint del modello specifico dell'attività. Dopo aver distribuito il modello, è possibile usare il frammento di codice seguente per ottenere stime per tutte le attività.
# 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)
Le stime effettuate sugli endpoint del modello seguono una struttura diversa a seconda del tipo di attività. In questa sezione vengono esaminati i formati di dati di output per attività di segmentazione di immagini multiclasse, classificazione di immagini con più etichette, rilevamento oggetti e segmentazione dell'istanza.
L'endpoint per la classificazione delle immagini restituisce tutte le etichette nel set di dati e i relativi punteggi di probabilità per l'immagine di input nel formato seguente.
{
"filename":"/tmp/tmppjr4et28",
"probs":[
2.098e-06,
4.783e-08,
0.999,
8.637e-06
],
"labels":[
"can",
"carton",
"milk_bottle",
"water_bottle"
]
}
Per la classificazione delle immagini con più etichette, l'endpoint del modello restituisce le etichette e le relative probabilità.
{
"filename":"/tmp/tmpsdzxlmlm",
"probs":[
0.997,
0.960,
0.982,
0.025
],
"labels":[
"can",
"carton",
"milk_bottle",
"water_bottle"
]
}
Il modello di rilevamento oggetti restituisce più caselle con le coordinate in alto a sinistra e in basso a destra insieme all'etichetta della casella e al punteggio di attendibilità.
{
"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
}
]
}
Nella segmentazione dell'istanza, l'output è costituito da più caselle con le relative coordinate in alto a sinistra e in basso a destra, etichette, punteggi di attendibilità e poligoni (non maschere). In questo caso, i valori del poligono si trovano nello stesso formato illustrato nella sezione schema.
{
"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
]
]
}
]
}
Nota
Le immagini usate in questo articolo provengono dal set di dati Refrigerator Objects, copyright © Microsoft Corporation e disponibili in computervision-recipes/01_training_introduction.ipynb con la licenza MIT.
- Informazioni su come preparare i dati per il training di modelli di visione artificiale con Machine Learning automatizzato.
- Configurare le attività di visione artificiale in AutoML
- Esercitazione: Eseguire il training di un modello di rilevamento oggetti (anteprima) con AutoML e Python.