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 immagineOptional, 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'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": "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"}
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 immagineOptional, 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'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": "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"]}
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 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 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 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 di selezione, dove ogni casella è un dizionario delle label, topX, topY, bottomX, bottomY, isCrowd 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 della coordinata x dell'angolo superiore sinistro del rettangolo di selezione e larghezza dell'immagineRequired, Float in the range [0,1] |
0.260 |
topY |
Rapporto tra coordinate y dell'angolo superiore sinistro del rettangolo di selezione e 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 tra coordinate 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, 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}]}
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 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 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 ]]}]}
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 columns
interne, 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 inputRequired, 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 Base64Required, 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:
- XRAI (xrai)
- Sfumature integrate (integrated_gradients)
- GradCAM guidato (guided_gradcam)
- BackPropagation guidato (guided_backprop)
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 base64Required, String |
- |
model_explainability |
Se generare spiegazioni o semplicemente l'assegnazione dei punteggiOptional, 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 XAIRequired, 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 tipoOptional, 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 tipoOptional, 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.