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 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":"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. Analogamentemy-resource-group , , my-datastore my-workspace deve essere sostituito rispettivamente dal nome del gruppo di risorse, dal nome dell'area di lavoro e dal nome dell'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 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": "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 di 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. Analogamentemy-resource-group , , my-datastore my-workspace deve essere sostituito rispettivamente dal nome del gruppo di risorse, dal nome dell'area di lavoro e dal nome dell'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 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": "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 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. Analogamentemy-resource-group , , my-datastore my-workspace deve essere sostituito rispettivamente dal nome del gruppo di risorse, dal nome dell'area di lavoro e dal nome dell'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 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": "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, 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. Analogamentemy-resource-group , , my-datastore my-workspace deve essere sostituito rispettivamente dal nome del gruppo di risorse, dal nome dell'area di lavoro e dal nome dell'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 un file JSONL per la 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 chiave input_data
esterna 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 immagini di input Required, Dictionary |
columns (chiave interna) |
Nomi di colonna da usare per creare il dataframe. Accetta solo una 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 dell'istanza.
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 spiegabilità 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 le 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 spiegabilità per la classificazione di immagini con più etichette.
[
{
"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à.
[
{
"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 si trovano 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 e la spiegazione online (XAI)
Importante
Queste impostazioni sono attualmente disponibili in anteprima pubblica. Vengono fornite 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.
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 o le classi stimate usando un modello distribuito. Non è necessaria una 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)
- Integrated Gradients (integrated_gradients)
- Guided GradCAM (guided_gradcam)
- Guided BackPropagation (guided_backprop)
Formato di input (XAI)
I formati di input seguenti sono supportati per generare stime e spiegazioni su qualsiasi attività di classificazione usando l'endpoint del 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 le chiavi ask. Optional, Dictionary Se xai_parameters non viene passato, l'algoritmo xrai di spiegazione viene usato con il valore predefinito |
{"xai_algorithm": "xrai", "visualizations": True, "attributions": False} |
xai_algorithm |
Nome dell'algoritmo Spiegabilità da usare. 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 di funzionalità. 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 |
La tabella seguente descrive gli schemi supportati per la spiegazione.
Type | Schema |
---|---|
Inferenza su 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 eseguite 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 di immagini multiclasse con più etichette.
Gli schemi seguenti vengono 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
. Per altre informazioni su questi parametri, vedere la 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 è che in ogni immagine possono essere presenti più classi per cui è possibile generare spiegazioni. Quindi, visualizations
è l'elenco delle stringhe di immagine base64 ed attributions
è l'elenco dei punteggi di attribuzione per ogni classe selezionata in base a confidence_score_threshold_multilabel
(il valore predefinito è 0,5).
Se model_explainability
, visualizations
, attributions
sono impostati su True
nella richiesta di input, l'output avrà visualizations
e attributions
. Per altre informazioni su questi parametri, vedere la 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 in 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 oggetti
Avviso
XAI non è supportato. Vengono quindi restituiti solo i punteggi. Per un esempio di punteggio, vedere la sezione assegnazione dei punteggi online.
Segmentazione delle istanze
Avviso
XAI non è supportato. Vengono quindi restituiti solo i punteggi. Per un esempio di punteggio, vedere la sezione assegnazione dei punteggi online.
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
- 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 con AutoML e Python.