Gegevensschema's voor het trainen van Computer Vision-modellen met geautomatiseerde machine learning
VAN TOEPASSING OP:Azure CLI ml-extensie v2 (huidig)Python SDK azure-ai-ml v2 (huidig)
Meer informatie over het formatteren van uw JSONL-bestanden voor gegevensverbruik in geautomatiseerde ML-experimenten voor Computer Vision-taken tijdens training en deductie.
Gegevensschema voor training
Voor Azure Machine Learning AutoML voor installatiekopieën moeten invoerafbeeldingsgegevens worden voorbereid in JSONL-indeling (JSONL-lijnen ). In deze sectie worden invoergegevensindelingen of -schema's voor afbeeldingsclassificatie met meerdere klassen, afbeeldingsclassificatie met meerdere labels, objectdetectie en exemplaarsegmentatie beschreven. We geven ook een voorbeeld van het JSON-regelbestand voor de laatste training of validatie.
Afbeeldingsclassificatie (binair/meerdere klassen)
Invoergegevensindeling/-schema in elke JSON-regel:
{
"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",
}
Sleutel | Beschrijving | Voorbeeld |
---|---|---|
image_url |
Locatie van installatiekopieën in Azure Machine Learning-gegevensarchief. my-subscription-id moet worden vervangen door het Azure-abonnement waarin de installatiekopieën zich bevinden. Meer informatie over Azure-abonnementen vindt u hier. Op my-resource-group dezelfde manier moet , my-workspace my-datastore worden vervangen door respectievelijk de naam van de resourcegroep, de naam van de werkruimte en de naam van het gegevensarchief. path_to_image moet het volledige pad naar de afbeelding in het gegevensarchief zijn.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 |
Details van afbeeldingOptional, Dictionary |
"image_details":{"format": "jpg", "width": "400px", "height": "258px"} |
format |
Afbeeldingstype (alle beschikbare afbeeldingsindelingen in de Pillow-bibliotheek worden ondersteund)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 |
Breedte van de afbeeldingOptional, String or Positive Integer |
"400px" or 400 |
height |
Hoogte van de afbeeldingOptional, String or Positive Integer |
"200px" or 200 |
label |
Klasse/label van de afbeeldingRequired, String |
"cat" |
Voorbeeld van een JSONL-bestand voor afbeeldingsclassificatie met meerdere klassen:
{"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"}
Afbeeldingsclassificatie met meerdere labels
Hier volgt een voorbeeld van invoergegevensindeling/-schema in elke JSON-lijn voor afbeeldingsclassificatie.
{
"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"
]
}
Sleutel | Beschrijving | Voorbeeld |
---|---|---|
image_url |
Locatie van installatiekopieën in Azure Machine Learning-gegevensarchief. my-subscription-id moet worden vervangen door het Azure-abonnement waarin de installatiekopieën zich bevinden. Meer informatie over Azure-abonnementen vindt u hier. Op my-resource-group dezelfde manier moet , my-workspace my-datastore worden vervangen door respectievelijk de naam van de resourcegroep, de naam van de werkruimte en de naam van het gegevensarchief. path_to_image moet het volledige pad naar de afbeelding in het gegevensarchief zijn.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 |
Details van afbeeldingOptional, Dictionary |
"image_details":{"format": "jpg", "width": "400px", "height": "258px"} |
format |
Afbeeldingstype (alle afbeeldingsindelingen die beschikbaar zijn in de Pillow-bibliotheek worden ondersteund)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 |
Breedte van de afbeeldingOptional, String or Positive Integer |
"400px" or 400 |
height |
Hoogte van de afbeeldingOptional, String or Positive Integer |
"200px" or 200 |
label |
Lijst met klassen/labels in de afbeeldingRequired, List of Strings |
["cat","dog"] |
Voorbeeld van een JSONL-bestand voor afbeeldingsclassificatie met meerdere labels:
{"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"]}
Objectdetectie
Hier volgt een voorbeeld van een JSONL-bestand voor objectdetectie.
{
"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"
},
"..."
]
}
Hier
xmin
= x coördinaat van de linkerbovenhoek van het begrenzingsvakymin
= y coördinaat van de linkerbovenhoek van het begrenzingsvakxmax
= x coördinaat van de rechterbenedenhoek van het begrenzingsvakymax
= y coördinaat van de rechterbenedenhoek van het begrenzingsvak
Sleutel | Beschrijving | Voorbeeld |
---|---|---|
image_url |
Locatie van installatiekopieën in Azure Machine Learning-gegevensarchief. my-subscription-id moet worden vervangen door het Azure-abonnement waarin de installatiekopieën zich bevinden. Meer informatie over Azure-abonnementen vindt u hier. Op my-resource-group dezelfde manier moet , my-workspace my-datastore worden vervangen door respectievelijk de naam van de resourcegroep, de naam van de werkruimte en de naam van het gegevensarchief. path_to_image moet het volledige pad naar de afbeelding in het gegevensarchief zijn.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 |
Details van afbeeldingOptional, Dictionary |
"image_details":{"format": "jpg", "width": "400px", "height": "258px"} |
format |
Afbeeldingstype (alle afbeeldingsindelingen die beschikbaar zijn in de Pillow-bibliotheek worden ondersteund. Maar voor YOLO worden alleen afbeeldingsindelingen ondersteund die zijn toegestaan door 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 |
Breedte van de afbeeldingOptional, String or Positive Integer |
"499px" or 499 |
height |
Hoogte van de afbeeldingOptional, String or Positive Integer |
"665px" or 665 |
label (buitenste sleutel) |
Lijst met begrenzingsvakken, waarbij elk vak een woordenlijst is met label, topX, topY, bottomX, bottomY, isCrowd de coördinaten linksboven en rechtsonderRequired, List of dictionaries |
[{"label": "cat", "topX": 0.260, "topY": 0.406, "bottomX": 0.735, "bottomY": 0.701, "isCrowd": 0}] |
label (binnenste toets) |
Klasse/label van het object in het begrenzingsvakRequired, String |
"cat" |
topX |
Verhouding van x coördinaat van de linkerbovenhoek van het begrenzingsvak en de breedte van de afbeeldingRequired, Float in the range [0,1] |
0.260 |
topY |
Verhouding van y-coördinaat van de linkerbovenhoek van het begrenzingsvak en de hoogte van de afbeeldingRequired, Float in the range [0,1] |
0.406 |
bottomX |
Verhouding van x coördinaat van de rechterbenedenhoek van het begrenzingsvak en de breedte van de afbeeldingRequired, Float in the range [0,1] |
0.735 |
bottomY |
Verhouding van y-coördinaat van de rechterbenedenhoek van het begrenzingsvak en de hoogte van de afbeeldingRequired, Float in the range [0,1] |
0.701 |
isCrowd |
Hiermee wordt aangegeven of het begrenzingsvak zich rond de massa objecten bevindt. Als deze speciale vlag is ingesteld, slaan we dit specifieke begrenzingsvak over bij het berekenen van de metrische waarde.Optional, Bool |
0 |
Voorbeeld van een JSONL-bestand voor objectdetectie:
{"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}]}
Instantiesegmentatie
Bijvoorbeeld segmentatie, geautomatiseerde ML ondersteunt alleen polygoon als invoer en uitvoer, geen maskers.
Hier volgt een voorbeeld van een JSONL-bestand, bijvoorbeeld segmentatie.
{
"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"]]
}
]
}
Sleutel | Beschrijving | Voorbeeld |
---|---|---|
image_url |
Locatie van installatiekopieën in Azure Machine Learning-gegevensarchief. my-subscription-id moet worden vervangen door het Azure-abonnement waarin de installatiekopieën zich bevinden. Meer informatie over Azure-abonnementen vindt u hier. Op my-resource-group dezelfde manier moet , my-workspace my-datastore worden vervangen door respectievelijk de naam van de resourcegroep, de naam van de werkruimte en de naam van het gegevensarchief. path_to_image moet het volledige pad naar de afbeelding in het gegevensarchief zijn.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 |
Details van afbeeldingOptional, Dictionary |
"image_details":{"format": "jpg", "width": "400px", "height": "258px"} |
format |
Type installatiekopieOptional, 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 |
Breedte van de afbeeldingOptional, String or Positive Integer |
"499px" or 499 |
height |
Hoogte van de afbeeldingOptional, String or Positive Integer |
"665px" or 665 |
label (buitenste sleutel) |
Lijst met maskers, waarbij elk masker een woordenlijst is van 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 (binnenste toets) |
Klasse/label van het object in het maskerRequired, String |
"cat" |
isCrowd |
Geeft aan of het masker zich rond de menigte objecten bevindtOptional, Bool |
0 |
polygon |
Veelhoekcoördinaten voor het objectRequired, 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]] |
Voorbeeld van een JSONL-bestand voor exemplaarsegmentatie:
{"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 ]]}]}
Gegevensschema voor online scoren
In deze sectie documenteren we de invoergegevensindeling die nodig is om voorspellingen te doen met behulp van een geïmplementeerd model.
Invoerindeling
De volgende JSON is de invoerindeling die nodig is om voorspellingen te genereren voor elke taak met behulp van een taakspecifiek modeleindpunt.
{
"input_data": {
"columns": [
"image"
],
"data": [
"image_in_base64_string_format"
]
}
}
Deze json is een woordenlijst met de buitenste sleutel input_data
en de binnenste sleutels columns
, data
zoals beschreven in de volgende tabel. Het eindpunt accepteert een JSON-tekenreeks in de bovenstaande indeling en converteert deze naar een gegevensframe met voorbeelden die vereist zijn voor het scorescript. Elke invoerafbeelding in de request_json["input_data"]["data"]
sectie van de json is een met base64 gecodeerde tekenreeks.
Sleutel | Beschrijving |
---|---|
input_data (buitenste sleutel) |
Het is een externe sleutel in de JSON-aanvraag. input_data is een woordenlijst die voorbeelden van invoerafbeeldingen accepteertRequired, Dictionary |
columns (binnenste toets) |
Kolomnamen die moeten worden gebruikt om een dataframe te maken. Er wordt slechts één kolom geaccepteerd met image als kolomnaam.Required, List |
data (binnenste toets) |
Lijst met met base64 gecodeerde afbeeldingenRequired, List |
Nadat we het mlflow-model hebben geïmplementeerd, kunnen we het volgende codefragment gebruiken om voorspellingen voor alle taken op te halen.
# 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,
)
Uitvoerindeling
Voorspellingen op modeleindpunten hebben een andere structuur, afhankelijk van het taaktype. In deze sectie worden de uitvoergegevensindelingen verkend voor afbeeldingsclassificatie met meerdere klassen, met meerdere labels, objectdetectie en segmentatietaken van exemplaren.
De volgende schema's zijn van toepassing wanneer de invoeraanvraag één afbeelding bevat.
Afbeeldingsclassificatie (binair/meerdere klassen)
Eindpunt voor afbeeldingsclassificatie retourneert alle labels in de gegevensset en hun waarschijnlijkheidsscores voor de invoerafbeelding in de volgende indeling. visualizations
en attributions
zijn gerelateerd aan verklaarbaarheid en wanneer de aanvraag alleen voor scoren is, worden deze sleutels niet opgenomen in de uitvoer. Zie de sectie Uitlegbaarheid voor afbeeldingsclassificatie voor meer informatie over het invoer- en uitvoerschema voor uitlegbaarheid voor afbeeldingsclassificatie.
[
{
"probs": [
2.098e-06,
4.783e-08,
0.999,
8.637e-06
],
"labels": [
"can",
"carton",
"milk_bottle",
"water_bottle"
]
}
]
Afbeeldingsclassificatie met meerdere labels
Voor afbeeldingsclassificatie met meerdere labels retourneert het modeleindpunt labels en hun waarschijnlijkheden. visualizations
en attributions
zijn gerelateerd aan verklaarbaarheid en wanneer de aanvraag alleen voor scoren is, worden deze sleutels niet opgenomen in de uitvoer. Zie de sectie Uitlegbaarheid voor afbeeldingsclassificatie met meerdere labels voor meer informatie over het invoer- en uitvoerschema voor uitlegbaarheid voor classificatie van meerdere labels.
[
{
"probs": [
0.997,
0.960,
0.982,
0.025
],
"labels": [
"can",
"carton",
"milk_bottle",
"water_bottle"
]
}
]
Objectdetectie
Het objectdetectiemodel retourneert meerdere vakken met hun geschaalde coördinaten linksboven en rechtsonder, samen met vaklabel en betrouwbaarheidsscore.
[
{
"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
}
]
}
]
Instantiesegmentatie
Bij exemplaarsegmentatie bestaat de uitvoer uit meerdere vakken met hun geschaalde coördinaten linksboven en rechtsonder, labels, betrouwbaarheidsscores en veelhoeken (geen maskers). Hier hebben de veelhoekwaarden dezelfde indeling die we in de sectie schema hebben besproken.
[
{
"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
]
]
}
]
}
]
Gegevensindeling voor onlinescore en uitlegbaarheid (XAI)
Belangrijk
Deze instellingen zijn momenteel beschikbaar als openbare preview. Ze worden geleverd zonder service level agreement. Misschien worden bepaalde functies niet ondersteund of zijn de mogelijkheden ervan beperkt. Zie Supplemental Terms of Use for Microsoft Azure Previews (Aanvullende gebruiksvoorwaarden voor Microsoft Azure-previews) voor meer informatie.
Waarschuwing
Uitlegbaarheid wordt alleen ondersteund voor classificatie met meerdere klassen en classificatie met meerdere labels. Als u tijdens het genereren van uitleg over een online-eindpunt time-outproblemen ondervindt, gebruikt u batch scoring notebook (SDK v1) om uitleg te genereren.
In deze sectie documenteren we de invoergegevensindeling die nodig is om voorspellingen te doen en verklaringen te genereren voor de voorspelde klasse/klassen met behulp van een geïmplementeerd model. Er is geen afzonderlijke implementatie nodig voor uitlegbaarheid. Hetzelfde eindpunt voor online scoren kan worden gebruikt om uitleg te genereren. We hoeven alleen wat extra parameters met betrekking tot uitleg door te geven in het invoerschema en visualisaties van verklaringen en/of matrices voor toeschrijvingsscores (uitleg op pixelniveau) te krijgen.
Ondersteunde methoden voor uitleg:
- XRAI (xrai)
- Geïntegreerde kleurovergangen (integrated_gradients)
- Begeleide GradCAM (guided_gradcam)
- Begeleide BackPropagation (guided_backprop)
Invoerindeling (XAI)
De volgende invoerindelingen worden ondersteund voor het genereren van voorspellingen en uitleg over een classificatietaak met behulp van een taakspecifiek modeleindpunt. Nadat we het model hebben geïmplementeerd, kunnen we het volgende schema gebruiken om voorspellingen en uitleg op te halen.
{
"input_data": {
"columns": ["image"],
"data": [json.dumps({"image_base64": "image_in_base64_string_format",
"model_explainability": True,
"xai_parameters": {}
})
]
}
}
Naast de afbeelding zijn er twee extra parameters (model_explainability
en xai_parameters
) vereist in het invoerschema om uitleg te genereren.
Sleutel | Beschrijving | Standaardwaarde |
---|---|---|
image_base64 |
invoerafbeelding in base64-indelingRequired, String |
- |
model_explainability |
Of u nu uitleg wilt genereren of alleen de scoreOptional, Bool |
False |
xai_parameters |
Als model_explainability waar is, is er xai_parameters een woordenlijst met parameters die betrekking hebben op het uitlegbaarheidsalgoritmen met xai_algorithm , visualizations en attributions vraagsleutels. Optional, Dictionary Als xai_parameters niet wordt doorgegeven, wordt het algoritme voor uitleg gebruikt met de xrai standaardwaarde |
{"xai_algorithm": "xrai", "visualizations": True, "attributions": False} |
xai_algorithm |
Naam van het uitlegbaarheids-algoritme dat moet worden gebruikt. Ondersteunde XAI-algoritmen zijn {xrai , integrated_gradients , , guided_gradcam } guided_backprop Optional, String |
xrai |
visualizations |
Of visualisaties van uitleg moeten worden geretourneerd. Optional, Bool |
True |
attributions |
Of functiekenmerken moeten worden geretourneerd. Optional, Bool |
False |
confidence_score_threshold_multilabel |
Drempelwaarde voor betrouwbaarheidsscore om topklassen te selecteren om uitleg te genereren in classificatie met meerdere labels. Optional, Float |
0.5 |
De volgende tabel beschrijft de ondersteunde schema's voor uitlegbaarheid.
Type | Schema |
---|---|
Deductie op één afbeelding in base64-indeling | Woordenlijst met image_base64 als sleutel en waarde is base64 gecodeerde afbeelding,model_explainability sleutel met Waar of Onwaar en xai_parameters woordenlijst met XAI-algoritmespecifieke parametersRequired, Json String Works for one or more images |
Elke invoerafbeelding in de request_json
, gedefinieerd in de onderstaande code, is een met base64 gecodeerde tekenreeks die wordt toegevoegd aan de lijst 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)
Uitvoerindeling (XAI)
Voorspellingen op modeleindpunten volgen een ander schema, afhankelijk van het taaktype. In deze sectie worden de uitvoergegevensindelingen voor afbeeldingsclassificatietaken met meerdere klassen en meerdere labels beschreven.
De volgende schema's zijn gedefinieerd voor het geval van twee invoerafbeeldingen.
Afbeeldingsclassificatie (binair/meerdere klassen)
Het uitvoerschema is hetzelfde als hierboven wordt beschreven , behalve dat visualizations
en attributions
sleutelwaarden worden opgenomen, als deze sleutels in de aanvraag zijn ingesteld op True
.
Als model_explainability
, visualizations
attributions
zijn ingesteld op True
in de invoeraanvraag, heeft visualizations
de uitvoer en attributions
. Meer informatie over deze parameters wordt uitgelegd in de volgende tabel. Visualisaties en toeschrijvingen worden gegenereerd op basis van een klasse met de hoogste waarschijnlijkheidsscore.
Uitvoersleutel | Description |
---|---|
visualizations |
Enkele afbeelding in base64-tekenreeksindeling met typeOptional, String |
attributions |
multidimensionale matrix met pixelgewijze toeschrijvingsscores van vorm [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]]]
}
]
Afbeeldingsclassificatie met meerdere labels
Het enige verschil in het uitvoerschema van classificatie met meerdere labels ten opzichte van classificatie met meerdere klassen is dat er meerdere klassen in elke afbeelding kunnen zijn waarvoor uitleg kan worden gegenereerd. visualizations
Is dus de lijst met tekenreeksen voor base64-afbeeldingen en attributions
is de lijst met toewijzingsscores voor elke geselecteerde klasse op basis van de confidence_score_threshold_multilabel
(de standaardwaarde is 0,5).
Als model_explainability
, visualizations
attributions
zijn ingesteld op True
in de invoeraanvraag, heeft visualizations
de uitvoer en attributions
. Meer informatie over deze parameters wordt uitgelegd in de volgende tabel. Visualisaties en toeschrijvingen worden gegenereerd op basis van alle klassen met een waarschijnlijkheidsscore die groter is dan of gelijk is aan confidence_score_threshold_multilabel
.
Uitvoersleutel | Description |
---|---|
visualizations |
Lijst met afbeeldingen in base64-tekenreeksindeling met typeOptional, String |
attributions |
Lijst met multidimensionale matrices met pixelgewijze toeschrijvingsscores ten opzichte van elke klasse, waarbij elke multidimensionale matrix van vorm is [3, valid_crop_size, valid_crop_size] Optional, List |
Waarschuwing
Zorg er tijdens het genereren van uitleg over het online-eindpunt voor dat u slechts enkele klassen selecteert op basis van de betrouwbaarheidsscore om time-outproblemen op het eindpunt te voorkomen of het eindpunt te gebruiken met het type GPU-exemplaar. Raadpleeg Notebook voor batchscores (SDK v1) als u uitleg wilt genereren voor een groot aantal klassen in classificatie met meerdere labels.
[
{
"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]]],
.
.
.
]
}
]
Objectdetectie
Waarschuwing
XAI wordt niet ondersteund. Er worden dus alleen scores geretourneerd. Raadpleeg de sectie Online scoren voor een scorevoorbeeld.
Instantiesegmentatie
Waarschuwing
XAI wordt niet ondersteund. Er worden dus alleen scores geretourneerd. Raadpleeg de sectie Online scoren voor een scorevoorbeeld.
Notitie
De afbeeldingen die in dit artikel worden gebruikt, zijn afkomstig uit de gegevensset Koelkastobjecten, copyright © van Microsoft Corporation en beschikbaar op computervision-recipes/01_training_introduction.ipynb onder de MIT-licentie.