Datascheman för att träna modeller för visuellt innehåll med automatiserad maskininlärning
GÄLLER FÖR:Azure CLI ml extension v2 (current)Python SDK azure-ai-ml v2 (aktuell)
Lär dig hur du formaterar dina JSONL-filer för dataförbrukning i automatiserade ML-experiment för uppgifter med visuellt innehåll under träning och slutsatsdragning.
Dataschema för träning
Azure Machine Learning AutoML for Images kräver att indata från bilddata förbereds i JSONL-format (JSON Lines). I det här avsnittet beskrivs indataformat eller schema för bildklassificering i flera klasser, bildklassificering med flera etiketter, objektidentifiering och instanssegmentering. Vi tillhandahåller också ett exempel på den slutliga träningen eller valideringen av JSON Lines-filen.
Bildklassificering (binär/flera klasser)
Indataformat/schema på varje JSON-rad:
{
"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",
}
Nyckel | beskrivning | Exempel |
---|---|---|
image_url |
Bildplats i Azure Machine Learning-datalager. my-subscription-id måste ersättas av Azure-prenumerationen där avbildningar finns. Mer information om Azure-prenumerationer finns här. my-resource-group På samma sätt bör , my-workspace my-datastore ersättas med resursgruppsnamn, arbetsytenamn respektive datalagernamn. path_to_image ska vara den fullständiga sökvägen till avbildningen i datalager.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 |
BildinformationOptional, Dictionary |
"image_details":{"format": "jpg", "width": "400px", "height": "258px"} |
format |
Bildtyp (alla tillgängliga bildformat i Pillow-biblioteket stöds)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 |
Bredd på bildenOptional, String or Positive Integer |
"400px" or 400 |
height |
Bildens höjdOptional, String or Positive Integer |
"200px" or 200 |
label |
Klass/etikett för bildenRequired, String |
"cat" |
Exempel på en JSONL-fil för bildklassificering i flera klasser:
{"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"}
Fleretiketter för bildklassificering
Följande är ett exempel på indataformat/schema i varje JSON-rad för bildklassificering.
{
"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"
]
}
Nyckel | beskrivning | Exempel |
---|---|---|
image_url |
Bildplats i Azure Machine Learning-datalager. my-subscription-id måste ersättas av Azure-prenumerationen där avbildningar finns. Mer information om Azure-prenumerationer finns här. my-resource-group På samma sätt bör , my-workspace my-datastore ersättas med resursgruppsnamn, arbetsytenamn respektive datalagernamn. path_to_image ska vara den fullständiga sökvägen till avbildningen i datalager.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 |
BildinformationOptional, Dictionary |
"image_details":{"format": "jpg", "width": "400px", "height": "258px"} |
format |
Bildtyp (alla bildformat som är tillgängliga i Pillow-biblioteket stöds)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 |
Bredd på bildenOptional, String or Positive Integer |
"400px" or 400 |
height |
Bildens höjdOptional, String or Positive Integer |
"200px" or 200 |
label |
Lista över klasser/etiketter i bildenRequired, List of Strings |
["cat","dog"] |
Exempel på en JSONL-fil för Multi-label för bildklassificering:
{"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"]}
Objektidentifiering
Följande är ett exempel på en JSONL-fil för objektidentifiering.
{
"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"
},
"..."
]
}
Här
xmin
= x koordinat för det övre vänstra hörnet av avgränsningsrutanymin
= y koordinat för det övre vänstra hörnet av avgränsningsrutanxmax
= x koordinat för det nedre högra hörnet av avgränsningsrutanymax
= y koordinat för det nedre högra hörnet av avgränsningsrutan
Nyckel | beskrivning | Exempel |
---|---|---|
image_url |
Bildplats i Azure Machine Learning-datalager. my-subscription-id måste ersättas av Azure-prenumerationen där avbildningar finns. Mer information om Azure-prenumerationer finns här. my-resource-group På samma sätt bör , my-workspace my-datastore ersättas med resursgruppsnamn, arbetsytenamn respektive datalagernamn. path_to_image ska vara den fullständiga sökvägen till avbildningen i datalager.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 |
BildinformationOptional, Dictionary |
"image_details":{"format": "jpg", "width": "400px", "height": "258px"} |
format |
Bildtyp (alla bildformat som är tillgängliga i Pillow-biblioteket stöds. Men för YOLO stöds endast bildformat som tillåts av 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 |
Bredd på bildenOptional, String or Positive Integer |
"499px" or 499 |
height |
Bildens höjdOptional, String or Positive Integer |
"665px" or 665 |
label (yttre nyckel) |
Lista över avgränsningsrutor, där varje ruta är en ordlista över label, topX, topY, bottomX, bottomY, isCrowd deras koordinater överst till vänster och längst ned till högerRequired, List of dictionaries |
[{"label": "cat", "topX": 0.260, "topY": 0.406, "bottomX": 0.735, "bottomY": 0.701, "isCrowd": 0}] |
label (inre nyckel) |
Klass/etikett för objektet i avgränsningsrutanRequired, String |
"cat" |
topX |
Förhållandet mellan x koordinaten i det övre vänstra hörnet i avgränsningsrutan och bildens breddRequired, Float in the range [0,1] |
0.260 |
topY |
Förhållandet mellan y-koordinaten i det övre vänstra hörnet i avgränsningsrutan och bildens höjdRequired, Float in the range [0,1] |
0.406 |
bottomX |
Förhållandet mellan x koordinaten i det nedre högra hörnet i avgränsningsrutan och bildens breddRequired, Float in the range [0,1] |
0.735 |
bottomY |
Förhållandet mellan y-koordinaten i det nedre högra hörnet av avgränsningsrutan och bildens höjdRequired, Float in the range [0,1] |
0.701 |
isCrowd |
Anger om avgränsningsrutan är runt mängden objekt. Om den här särskilda flaggan har angetts hoppar vi över den här specifika avgränsningsrutan när måttet beräknas.Optional, Bool |
0 |
Exempel på en JSONL-fil för objektidentifiering:
{"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}]}
Instanssegmentering
Till exempel segmentering stöder automatiserad ML endast polygon som indata och utdata, inga masker.
Följande är en JSONL-exempelfil, till exempel segmentering.
{
"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"]]
}
]
}
Nyckel | beskrivning | Exempel |
---|---|---|
image_url |
Bildplats i Azure Machine Learning-datalager. my-subscription-id måste ersättas av Azure-prenumerationen där avbildningar finns. Mer information om Azure-prenumerationer finns här. my-resource-group På samma sätt bör , my-workspace my-datastore ersättas med resursgruppsnamn, arbetsytenamn respektive datalagernamn. path_to_image ska vara den fullständiga sökvägen till avbildningen i datalager.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 |
BildinformationOptional, Dictionary |
"image_details":{"format": "jpg", "width": "400px", "height": "258px"} |
format |
BildtypOptional, 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 |
Bredd på bildenOptional, String or Positive Integer |
"499px" or 499 |
height |
Bildens höjdOptional, String or Positive Integer |
"665px" or 665 |
label (yttre nyckel) |
Lista över masker, där varje mask är en ordlista med 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 (inre nyckel) |
Klass/etikett för objektet i maskenRequired, String |
"cat" |
isCrowd |
Anger om masken är runt mängden objektOptional, Bool |
0 |
polygon |
Polygonkoordinater för objektetRequired, 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]] |
Exempel på en JSONL-fil för instanssegmentering:
{"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 ]]}]}
Dataschema för onlinebedömning
I det här avsnittet dokumenterar vi det indataformat som krävs för att göra förutsägelser med hjälp av en distribuerad modell.
Indataformat
Följande JSON är det indataformat som behövs för att generera förutsägelser för alla aktiviteter med hjälp av en aktivitetsspecifik modellslutpunkt.
{
"input_data": {
"columns": [
"image"
],
"data": [
"image_in_base64_string_format"
]
}
}
Denna json är en ordlista med yttre nyckel input_data
och inre nycklar columns
, data
enligt beskrivningen i följande tabell. Slutpunkten accepterar en json-sträng i ovanstående format och konverterar den till en dataram med exempel som krävs av bedömningsskriptet. Varje indatabild i request_json["input_data"]["data"]
avsnittet i json är en base64-kodad sträng.
Nyckel | beskrivning |
---|---|
input_data (yttre nyckel) |
Det är en yttre nyckel i json-begäran. input_data är en ordlista som accepterar indatabildexempel Required, Dictionary |
columns (inre nyckel) |
Kolumnnamn som ska användas för att skapa en dataram. Den accepterar bara en kolumn med image som kolumnnamn.Required, List |
data (inre nyckel) |
Lista över base64-kodade bilder Required, List |
När vi har distribuerat mlflow-modellen kan vi använda följande kodfragment för att hämta förutsägelser för alla uppgifter.
# 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,
)
Utdataformat
Förutsägelser som görs på modellslutpunkter följer olika struktur beroende på aktivitetstyp. Det här avsnittet utforskar utdataformaten för bildklassificering med flera klasser, bildklassificering med flera etiketter, objektidentifiering och instanssegmenteringsuppgifter.
Följande scheman gäller när indatabegäran innehåller en bild.
Bildklassificering (binär/flera klasser)
Slutpunkten för bildklassificering returnerar alla etiketter i datamängden och deras sannolikhetspoäng för indatabilden i följande format. visualizations
och attributions
är relaterade till förklaring och när begäran endast är för bedömning inkluderas inte dessa nycklar i utdata. Mer information om förklaringsdata och utdataschema för bildklassificering finns i avsnittet om förklaring för bildklassificering.
[
{
"probs": [
2.098e-06,
4.783e-08,
0.999,
8.637e-06
],
"labels": [
"can",
"carton",
"milk_bottle",
"water_bottle"
]
}
]
Fleretiketter för bildklassificering
För bildklassificering med flera etiketter returnerar modellslutpunkten etiketter och deras sannolikheter. visualizations
och attributions
är relaterade till förklaring och när begäran endast är för bedömning inkluderas inte dessa nycklar i utdata. Mer information om förklaringsdata och utdataschema för klassificering med flera etiketter finns i avsnittet förklarande för fleretiketter för bildklassificering.
[
{
"probs": [
0.997,
0.960,
0.982,
0.025
],
"labels": [
"can",
"carton",
"milk_bottle",
"water_bottle"
]
}
]
Objektidentifiering
Objektidentifieringsmodellen returnerar flera rutor med sina skalade koordinater uppe till vänster och längst ned till höger tillsammans med boxetikett och konfidenspoäng.
[
{
"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
}
]
}
]
Instanssegmentering
I instanssegmentering består utdata av flera rutor med sina skalade koordinater överst till vänster och längst ned till höger, etiketter, konfidenspoäng och polygoner (inte masker). Här är polygonvärdena i samma format som vi diskuterade i schemaavsnittet.
[
{
"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
]
]
}
]
}
]
Dataformat för Online Scoring and Explainability (XAI)
Viktigt!
De här inställningarna är för närvarande i offentlig förhandsversion. De tillhandahålls utan ett serviceavtal. Vissa funktioner kanske inte stöds eller kan vara begränsade. Mer information finns i Kompletterande villkor för användning av Microsoft Azure-förhandsversioner.
Varning
Förklaring stöds endast för klassificering av flera klasser och klassificering med flera etiketter. När du genererar förklaringar på onlineslutpunkten kan du använda notebook-filen för batchbedömning (SDK v1) för att generera förklaringar om du stöter på timeout-problem.
I det här avsnittet dokumenterar vi det indataformat som krävs för att göra förutsägelser och generera förklaringar för den förutsagda klassen/klasserna med hjälp av en distribuerad modell. Det behövs ingen separat distribution för att förklara. Samma slutpunkt för onlinebedömning kan användas för att generera förklaringar. Vi behöver bara skicka några extra förklaringsrelaterade parametrar i indataschemat och få antingen visualiseringar av förklaringar och/eller attributionspoängmatriser (förklaringar på pixelnivå).
Förklaringsmetoder som stöds:
- XRAI (xrai)
- Integrerade toningar (integrated_gradients)
- Guidad GradCAM (guided_gradcam)
- Guidad BackPropagation (guided_backprop)
Indataformat (XAI)
Följande indataformat stöds för att generera förutsägelser och förklaringar för alla klassificeringsuppgifter med hjälp av uppgiftsspecifik modellslutpunkt. När vi har distribuerat modellen kan vi använda följande schema för att hämta förutsägelser och förklaringar.
{
"input_data": {
"columns": ["image"],
"data": [json.dumps({"image_base64": "image_in_base64_string_format",
"model_explainability": True,
"xai_parameters": {}
})
]
}
}
Tillsammans med bilden finns det två extra parametrar (model_explainability
och xai_parameters
) som krävs i indataschemat för att generera förklaringar.
Nyckel | beskrivning | Standardvärde |
---|---|---|
image_base64 |
indatabild i base64-formatRequired, String |
- |
model_explainability |
Om du vill generera förklaringar eller bara bedömningOptional, Bool |
False |
xai_parameters |
Om model_explainability är Sant är en xai_parameters ordlista som innehåller förklaringsalgoritmrelaterade parametrar med xai_algorithm , visualizations , attributions fråga nycklar. Optional, Dictionary Om xai_parameters inte skickas används förklaringsalgoritmen xrai med dess standardvärde |
{"xai_algorithm": "xrai", "visualizations": True, "attributions": False} |
xai_algorithm |
Namnet på förklaringsalgoritmen som ska användas. XAI-algoritmer som stöds är {xrai , integrated_gradients , guided_gradcam , guided_backprop }Optional, String |
xrai |
visualizations |
Om du vill returnera visualiseringar av förklaringar. Optional, Bool |
True |
attributions |
Om funktions-attribut ska returneras. Optional, Bool |
False |
confidence_score_threshold_multilabel |
Tröskelvärde för konfidenspoäng för att välja de översta klasserna för att generera förklaringar i klassificering med flera etiketter. Optional, Float |
0.5 |
I följande tabell beskrivs de scheman som stöds för förklaring.
Typ | Schema |
---|---|
Slutsatsdragning på en bild i base64-format | Ordlista med image_base64 som nyckel och värde är base64-kodad bild, model_explainability nyckel med Sant eller Falskt och xai_parameters ordlista med XAI-algoritmspecifika parametrar Required, Json String Works for one or more images |
Varje indatabild i request_json
, som definieras i koden nedan, är en base64-kodad sträng som läggs till i listan 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)
Utdataformat (XAI)
Förutsägelser som görs på modellslutpunkter följer olika scheman beroende på aktivitetstyp. I det här avsnittet beskrivs utdataformat för bildklassificeringsuppgifter med flera klasser.
Följande scheman definieras för två indatabilder.
Bildklassificering (binär/flera klasser)
Utdataschemat är detsamma som beskrivs ovan förutom att visualizations
och attributions
nyckelvärden ingår, om dessa nycklar har angetts till True
i begäran.
Om model_explainability
, visualizations
anges attributions
till True
i indatabegäran, kommer utdata att ha visualizations
och attributions
. Mer information om dessa parametrar beskrivs i följande tabell. Visualiseringar och attribut genereras mot en klass som har den högsta sannolikhetspoängen.
Utdatanyckel | beskrivning |
---|---|
visualizations |
En bild i base64-strängformat med typ Optional, String |
attributions |
flerdimensionell matris med pixelvis attributionspoäng för form [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]]]
}
]
Fleretiketter för bildklassificering
Den enda skillnaden i utdataschemat för klassificering med flera etiketter jämfört med klassificering med flera klasser är att det kan finnas flera klasser i varje bild som förklaringar kan genereras för. visualizations
Så är listan över base64-bildsträngar och attributions
är listan över attributionspoäng mot varje vald klass baserat på confidence_score_threshold_multilabel
(standardvärdet är 0,5).
Om model_explainability
, visualizations
anges attributions
till True
i indatabegäran, kommer utdata att ha visualizations
och attributions
. Mer information om dessa parametrar beskrivs i följande tabell. Visualiseringar och attribut genereras mot alla klasser som har sannolikhetspoängen större än eller lika med confidence_score_threshold_multilabel
.
Utdatanyckel | beskrivning |
---|---|
visualizations |
Lista över bilder i base64-strängformat med typ Optional, String |
attributions |
Lista över flerdimensionella matriser med pixelvis attributionspoäng mot varje klass, där varje flerdimensionell matris är i form [3, valid_crop_size, valid_crop_size] Optional, List |
Varning
När du genererar förklaringar på onlineslutpunkten bör du bara välja några klasser baserat på konfidenspoäng för att undvika timeout-problem på slutpunkten eller använda slutpunkten med GPU-instanstypen. Information om hur du genererar förklaringar för ett stort antal klasser i klassificering med flera etiketter finns i notebook-filen för batchbedömning (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]]],
.
.
.
]
}
]
Objektidentifiering
Varning
XAI stöds inte. Därför returneras bara poäng. Exempel på bedömning finns i avsnittet om onlinebedömning.
Instanssegmentering
Varning
XAI stöds inte. Därför returneras bara poäng. Exempel på bedömning finns i avsnittet om onlinebedömning.
Kommentar
Bilderna som används i den här artikeln kommer från datauppsättningen Fridge Objects, copyright © Microsoft Corporation och finns på computervision-recipes/01_training_introduction.ipynb under MIT-licensen.