Schemi di dati per eseguire il training di modelli di visione artificiale con Machine Learning automatizzato

SI APPLICA A:Estensione ml dell'interfaccia della riga di comando di Azure v2 (corrente)Python SDK azure-ai-ml v2 (corrente)

Informazioni su come formattare i file JSONL per l'utilizzo dei dati negli 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 la preparazione dei dati dell'immagine di input in formato JSONL (JSON Lines). Questa sezione descrive i formati di dati di input o lo schema per la classificazione delle immagini multiclasse, la classificazione delle immagini con più etichette, il rilevamento degli oggetti e la segmentazione dell'istanza. Verrà anche fornito un esempio di file JSON Lines di training o convalida finale.

Classificazione delle immagini (binary/multiclasse)

Formato/schema dei dati di input in ogni riga JSON:

{
   "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",
}
Chiave Descrizione Esempio
image_url Percorso dell'immagine nell'archivio dati di Azure Machine Learning.
my-subscription-id deve essere sostituito dalla sottoscrizione di Azure in cui si trovano le immagini. Altre informazioni sulle sottoscrizioni di Azure sono disponibili qui. Analogamente my-resource-group, my-workspace, my-datastore deve essere sostituito rispettivamente dal nome del gruppo di risorse, dal nome dell'area di lavoro e dall'archivio dati .
path_to_image deve essere il percorso completo dell'immagine nell'archivio dati.
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 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 )
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": "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"}

Esempio di immagine per la classificazione delle immagini multiclasse.

Classificazione delle immagini con più etichette

Di seguito è riportato un esempio di formato/schema dei dati di input in ogni riga JSON per la classificazione delle immagini.

{
   "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"
        
   ]
}
Chiave Descrizione Esempio
image_url Percorso dell'immagine nell'archivio dati di Azure Machine Learning.
my-subscription-id deve essere sostituito dalla sottoscrizione di Azure in cui si trovano le immagini. Altre informazioni sulle sottoscrizioni di Azure sono disponibili qui. Analogamente my-resource-group, my-workspace, my-datastore deve essere sostituito rispettivamente dal nome del gruppo di risorse, dal nome dell'area di lavoro e dall'archivio dati .
path_to_image deve essere il percorso completo dell'immagine nell'archivio dati.
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 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 )
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": "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"]}

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

Rilevamento di oggetti

Di seguito è riportato un file JSONL di esempio per il rilevamento degli oggetti.

{
   "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"
      },
      "..."
   ]
}

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.
my-subscription-id deve essere sostituito dalla sottoscrizione di Azure in cui si trovano le immagini. Altre informazioni sulle sottoscrizioni di Azure sono disponibili qui. Analogamente my-resource-group, my-workspace, my-datastore deve essere sostituito rispettivamente dal nome del gruppo di risorse, dal nome dell'area di lavoro e dall'archivio dati .
path_to_image deve essere il percorso completo dell'immagine nell'archivio dati.
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 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 di selezione, dove ogni casella è un dizionario delle label, topX, topY, bottomX, bottomY, isCrowd 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 della coordinata x dell'angolo superiore sinistro del rettangolo di selezione e larghezza dell'immagine
Required, Float in the range [0,1]
0.260
topY Rapporto tra coordinate y dell'angolo superiore sinistro del rettangolo di selezione e 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 tra coordinate 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, si ignora questo rettangolo di selezione specifico durante il calcolo della metrica.
Optional, Bool
0

Esempio di file JSONL per il rilevamento degli oggetti:

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

Esempio di immagine per il rilevamento degli oggetti.

Segmentazione delle istanze

Ad esempio la segmentazione, machine learning automatizzato supporta solo il poligono come input e output, senza maschere.

Di seguito è riportato un file JSONL di esempio, ad esempio la segmentazione.

{
   "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"]]
      }
   ]
}
Chiave Descrizione Esempio
image_url Percorso dell'immagine nell'archivio dati di Azure Machine Learning.
my-subscription-id deve essere sostituito dalla sottoscrizione di Azure in cui si trovano le immagini. Altre informazioni sulle sottoscrizioni di Azure sono disponibili qui. Analogamente my-resource-group, my-workspace, my-datastore deve essere sostituito rispettivamente dal nome del gruppo di risorse, dal nome dell'area di lavoro e dall'archivio dati .
path_to_image deve essere il percorso completo dell'immagine nell'archivio dati.
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 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 file JSONL per segmentazione dell'istanza:

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

Esempio di immagine per la segmentazione dell'istanza.

Schema dei dati per l'assegnazione dei punteggi online

In questa sezione viene illustrato il formato dei dati di input necessario per eseguire stime usando un modello distribuito.

Formato di input

Il codice JSON seguente è il formato di input necessario per generare stime su qualsiasi attività usando un endpoint del modello specifico dell'attività.

{
   "input_data": {
      "columns": [
         "image"
      ],
      "data": [
         "image_in_base64_string_format"
      ]
   }
}

Questo json è un dizionario con chiavi input_data esterne e chiavi columnsinterne, data come descritto nella tabella seguente. L'endpoint accetta una stringa JSON nel formato precedente e la converte in un dataframe di esempi richiesti dallo script di assegnazione dei punteggi. Ogni immagine di input nella request_json["input_data"]["data"] sezione del json è una stringa con codifica Base64.

Chiave Descrizione
input_data
(chiave esterna)
Si tratta di una chiave esterna nella richiesta JSON. input_data è un dizionario che accetta esempi di immagine di input
Required, Dictionary
columns
(chiave interna)
Nomi di colonna da usare per creare il dataframe. Accetta una sola colonna con image come nome di colonna.
Required, List
data
(chiave interna)
Elenco di immagini con codifica Base64
Required, List

Dopo aver distribuito il modello mlflow, è possibile usare il frammento di codice seguente per ottenere stime per tutte le attività.

# 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,
)

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 di istanze.

Gli schemi seguenti sono applicabili quando la richiesta di input contiene un'immagine.

Classificazione delle immagini (binary/multiclasse)

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. visualizations e attributions sono correlati alla spiegazione e quando la richiesta è solo per l'assegnazione dei punteggi, queste chiavi non verranno incluse nell'output. Per altre informazioni sull'input di spiegazione e sullo schema di output per la classificazione delle immagini, vedere la sezione spiegazione per la classificazione delle immagini.

[
   {
      "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 etichette e le relative probabilità. visualizations e attributions sono correlati alla spiegazione e quando la richiesta è solo per l'assegnazione dei punteggi, queste chiavi non verranno incluse nell'output. Per altre informazioni sull'input di spiegazione e sullo schema di output per la classificazione con più etichette, vedere la sezione spiegazione per la classificazione delle immagini con più etichette.

[
   {
      "probs": [
         0.997,
         0.960,
         0.982,
         0.025
      ],
      "labels": [
         "can",
         "carton",
         "milk_bottle",
         "water_bottle"
      ]
   }
]

Rilevamento di oggetti

Il modello di rilevamento oggetti restituisce più caselle con le relative coordinate in alto a sinistra e in basso a destra insieme all'etichetta della casella e al punteggio di attendibilità.

[
   {
      "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 delle istanze

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 sono nello stesso formato illustrato nella sezione schema.

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

Formato dei dati per l'assegnazione dei punteggi online e la spiegazione (XAI)

Importante

Queste impostazioni sono attualmente in anteprima pubblica. Vengono forniti senza un contratto di servizio. Alcune funzionalità potrebbero non essere supportate o potrebbero presentare funzionalità limitate. Per altre informazioni, vedere Condizioni supplementari per l'utilizzo delle anteprime di Microsoft Azure.

Avviso

La spiegazione è supportata solo per la classificazione multiclasse e la classificazione con più etichette. Durante la generazione di spiegazioni sull'endpoint online, se si verificano problemi di timeout, usare il notebook di assegnazione dei punteggi batch (SDK v1) per generare spiegazioni.

In questa sezione viene illustrato il formato dei dati di input necessario per eseguire stime e generare spiegazioni per la classe/le classi stimate usando un modello distribuito. Non è necessaria alcuna distribuzione separata per la spiegazione. Lo stesso endpoint per l'assegnazione dei punteggi online può essere utilizzato per generare spiegazioni. È sufficiente passare alcuni parametri aggiuntivi correlati alla spiegazione nello schema di input e ottenere visualizzazioni di spiegazioni e/o matrici di punteggio di attribuzione (spiegazioni a livello di pixel).

Metodi di spiegazione supportati:

Formato di input (XAI)

I formati di input seguenti sono supportati per generare stime e spiegazioni su qualsiasi attività di classificazione usando un endpoint modello specifico dell'attività. Dopo aver distribuito il modello, è possibile usare lo schema seguente per ottenere stime e spiegazioni.

{
   "input_data": {
      "columns": ["image"],
      "data": [json.dumps({"image_base64": "image_in_base64_string_format", 
                           "model_explainability": True,
                           "xai_parameters": {}
                         })
      ]
   }
}

Insieme all'immagine, sono necessari due parametri aggiuntivi (model_explainability e xai_parameters) nello schema di input per generare spiegazioni.

Chiave Descrizione Valore predefinito
image_base64 immagine di input in formato base64
Required, String
-
model_explainability Se generare spiegazioni o semplicemente l'assegnazione dei punteggi
Optional, Bool
False
xai_parameters Se model_explainability è True, è xai_parameters un dizionario contenente parametri correlati all'algoritmo di spiegazione con xai_algorithm, visualizations, attributions chiedere le chiavi.
Optional, Dictionary
Se xai_parameters non viene passato, l'algoritmo xrai di spiegazione viene usato con il relativo valore predefinito
{"xai_algorithm": "xrai", "visualizations": True, "attributions": False}
xai_algorithm Nome dell'algoritmo Explainability da utilizzare. Gli algoritmi XAI supportati sono {xrai, integrated_gradients, guided_gradcam, guided_backprop}
Optional, String
xrai
visualizations Indica se restituire visualizzazioni di spiegazioni.
Optional, Bool
True
attributions Indica se restituire le attribuzioni delle caratteristiche.
Optional, Bool
False
confidence_score_threshold_multilabel Soglia del punteggio di attendibilità per selezionare le classi principali per generare spiegazioni nella classificazione con più etichette.
Optional, Float
0.5

Nella tabella seguente vengono descritti gli schemi supportati per la spiegazione.

Tipo SCHEMA
Inferenza su una singola immagine in formato Base64 Il dizionario con image_base64 come chiave e valore è un'immagine con codifica Base64,
model_explainability key con True o False e xai_parameters dizionario con parametri specifici dell'algoritmo XAI
Required, Json String
Works for one or more images

Ogni immagine di input in request_json, definita nel codice seguente, è una stringa con codifica Base64 aggiunta all'elenco request_json["input_data"]["data"]:

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)

Formato di output (XAI)

Le stime effettuate sugli endpoint del modello seguono uno schema diverso a seconda del tipo di attività. In questa sezione vengono descritti i formati di dati di output per le attività di classificazione delle immagini multiclasse e con più etichette.

Gli schemi seguenti sono definiti per il caso di due immagini di input.

Classificazione delle immagini (binary/multiclasse)

Lo schema di output è uguale a quello descritto in precedenza , ad eccezione del fatto che visualizations e attributions i valori delle chiavi sono inclusi, se queste chiavi sono state impostate True su nella richiesta.

Se model_explainability, visualizations, attributions sono impostati su True nella richiesta di input, l'output avrà visualizations e attributions. Altre informazioni su questi parametri sono illustrate nella tabella seguente. Le visualizzazioni e le attribuzioni vengono generate in base a una classe con il punteggio di probabilità più alto.

Chiave di output Descrizione
visualizations Singola immagine in formato stringa base64 con tipo
Optional, String
attributions matrice multidimensionale con punteggi di attribuzione per pixel della forma [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]]]
    }
]

Classificazione delle immagini con più etichette

L'unica differenza nello schema di output della classificazione con più etichette rispetto alla classificazione multiclasse consiste nel fatto che in ogni immagine possono essere generate più classi. Quindi, visualizations è l'elenco di stringhe di immagine base64 ed attributions è l'elenco di punteggi di attribuzione per ogni classe selezionata in base a (il confidence_score_threshold_multilabel valore predefinito è 0,5).

Se model_explainability, visualizations, attributions sono impostati su True nella richiesta di input, l'output avrà visualizations e attributions. Altre informazioni su questi parametri sono illustrate nella tabella seguente. Le visualizzazioni e le attribuzioni vengono generate su tutte le classi con il punteggio di probabilità maggiore o uguale a confidence_score_threshold_multilabel.

Chiave di output Descrizione
visualizations Elenco di immagini in formato stringa base64 con tipo
Optional, String
attributions Elenco di matrici multidimensionali con punteggi di attribuzione per pixel per ogni classe, in cui ogni matrice multidimensionale è di forma [3, valid_crop_size, valid_crop_size]
Optional, List

Avviso

Durante la generazione di spiegazioni sull'endpoint online, assicurarsi di selezionare solo poche classi in base al punteggio di attendibilità per evitare problemi di timeout nell'endpoint o usare l'endpoint con il tipo di istanza GPU. Per generare spiegazioni per un numero elevato di classi nella classificazione con più etichette, vedere notebook di assegnazione dei punteggi batch (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]]],
                        .
                        .
                        .
                       ]
    }
]

Rilevamento di oggetti

Avviso

XAI non è supportato. Quindi, vengono restituiti solo punteggi. Per l'esempio di assegnazione dei punteggi, vedere la sezione punteggio online.

Segmentazione delle istanze

Avviso

XAI non è supportato. Quindi, vengono restituiti solo punteggi. Per l'esempio di assegnazione dei punteggi, vedere la sezione punteggio online.

Nota

Le immagini usate in questo articolo provengono dal set di dati Oggetti frigoriferi, copyright © Microsoft Corporation e disponibili in computervision-recipes/01_training_introduction.ipynb sotto la licenza MIT.

Passaggi successivi