Leggere in inglese

Condividi tramite


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.

Schema dei dati per il training

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.

Classificazione delle immagini (binary/multiclasse)

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 Learning
Required, String
"AmlDatastore://data_directory/Image_01.jpg"
image_details Dettagli immagine
Optional, 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'immagine
Optional, String or Positive Integer
"400px" or 400
height Altezza dell'immagine
Optional, String or Positive Integer
"200px" or 200
label Classe/etichetta dell'immagine
Required, 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"}

Esempio di immagine per la classificazione delle immagini multiclasse.

Classificazione delle immagini con più etichette

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 Learning
Required, String
"AmlDatastore://data_directory/Image_01.jpg"
image_details Dettagli immagine
Optional, 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'immagine
Optional, String or Positive Integer
"400px" or 400
height Altezza dell'immagine
Optional, String or Positive Integer
"200px" or 200
label Elenco di classi/etichette nell'immagine
Required, 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"]}

Esempio di immagine per la classificazione di immagini con più etichette.

Rilevamento oggetti

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 selezione
  • ymin = coordinata y dell'angolo superiore sinistro del rettangolo di selezione
  • xmax = x coordinata dell'angolo inferiore destro del rettangolo di selezione
  • ymax = coordinata y dell'angolo inferiore destro del rettangolo di selezione
Chiave Descrizione Esempio
image_url Percorso dell'immagine nell'archivio dati di Azure Machine Learning
Required, String
"AmlDatastore://data_directory/Image_01.jpg"
image_details Dettagli immagine
Optional, 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'immagine
Optional, String or Positive Integer
"499px" or 499
height Altezza dell'immagine
Optional, 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 destra
Required, 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 selezione
Required, String
"cat"
topX Rapporto di x coordinate dell'angolo superiore sinistro del rettangolo di selezione e larghezza dell'immagine
Required, 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'immagine
Required, Float in the range [0,1]
0.406
bottomX Rapporto delle coordinate x dell'angolo inferiore destro del rettangolo di selezione e larghezza dell'immagine
Required, Float in the range [0,1]
0.735
bottomY Rapporto di coordinata y dell'angolo inferiore destro del rettangolo di selezione e altezza dell'immagine
Required, 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}]}

Esempio di immagine per il rilevamento degli oggetti.

Segmentazione istanza

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 Learning
Required, String
"AmlDatastore://data_directory/Image_01.jpg"
image_details Dettagli immagine
Optional, Dictionary
"image_details":{"format": "jpg", "width": "400px", "height": "258px"}
format Tipo di immagine
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'immagine
Optional, String or Positive Integer
"499px" or 499
height Altezza dell'immagine
Optional, 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 maschera
Required, String
"cat"
isCrowd Indica se la maschera è intorno alla folla di oggetti
Optional, Bool
0
polygon Coordinate poligono per l'oggetto
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]]

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

Esempio di immagine per la segmentazione dell'istanza.

Formato dei dati per l'inferenza

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-streamcontenuto .

Formato di input

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)

Formato di output

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.

Classificazione immagini

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

Classificazione delle immagini con più etichette

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

Rilevamento oggetti

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

Segmentazione istanza

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.

Passaggi successivi