Gegevensschema's voor het trainen van Computer Vision-modellen met geautomatiseerde machine learning
VAN TOEPASSING OP:Azure CLI ml extension v2 (current)Python SDK azure-ai-ml v2 (current)
Leer hoe u uw JSONL-bestanden opmaakt voor gegevensverbruik in geautomatiseerde ML-experimenten voor computer vision-taken tijdens de training en deductie.
Gegevensschema voor training
Voor Azure Machine Learning AutoML voor installatiekopieën moeten invoerafbeeldingsgegevens worden voorbereid in JSONL-indeling (JSON Lines ). In deze sectie worden invoergegevensindelingen of schema beschreven voor afbeeldingsclassificatie met meerdere klassen, afbeeldingsclassificatie met meerdere labels, objectdetectie en exemplaarsegmentatie. We geven ook een voorbeeld van het JSON Lines-bestand voor de laatste training of validatie.
Afbeeldingsclassificatie (binair/multiklasse)
Indeling/schema voor invoergegevens 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",
}
Toets | Beschrijving | Voorbeeld |
---|---|---|
image_url |
Locatie van installatiekopieën in azure Machine Learning-gegevensopslag. my-subscription-id moet worden vervangen door het Azure-abonnement waarin installatiekopieën zich bevinden. Meer informatie over Azure-abonnementen vindt u hier. Op dezelfde manier my-resource-group my-workspace my-datastore moet 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 |
AfbeeldingsdetailsOptional, 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"
]
}
Toets | Beschrijving | Voorbeeld |
---|---|---|
image_url |
Locatie van installatiekopieën in azure Machine Learning-gegevensopslag. my-subscription-id moet worden vervangen door het Azure-abonnement waarin installatiekopieën zich bevinden. Meer informatie over Azure-abonnementen vindt u hier. Op dezelfde manier my-resource-group my-workspace my-datastore moet 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 |
AfbeeldingsdetailsOptional, 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 linkerbovenhoek van begrenzingsvakymin
= y-coördinaat van linkerbovenhoek van begrenzingsvakxmax
= x coördinaat van rechterbenedenhoek van begrenzingsvakymax
= y coördinaat van rechterbenedenhoek van begrenzingsvak
Toets | Beschrijving | Voorbeeld |
---|---|---|
image_url |
Locatie van installatiekopieën in azure Machine Learning-gegevensopslag. my-subscription-id moet worden vervangen door het Azure-abonnement waarin installatiekopieën zich bevinden. Meer informatie over Azure-abonnementen vindt u hier. Op dezelfde manier my-resource-group my-workspace my-datastore moet 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 |
AfbeeldingsdetailsOptional, 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 van 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 sleutel) |
Klasse/label van het object in het begrenzingsvakRequired, String |
"cat" |
topX |
Verhouding van x-coördinaat van 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 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 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 rechterbenedenhoek van het begrenzingsvak en de hoogte van de afbeeldingRequired, Float in the range [0,1] |
0.701 |
isCrowd |
Geeft aan of het begrenzingsvak zich rond de menigte 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
Segmentatie ondersteunt geautomatiseerde ML bijvoorbeeld alleen veelhoek als invoer en uitvoer, zonder 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"]]
}
]
}
Toets | Beschrijving | Voorbeeld |
---|---|---|
image_url |
Locatie van installatiekopieën in azure Machine Learning-gegevensopslag. my-subscription-id moet worden vervangen door het Azure-abonnement waarin installatiekopieën zich bevinden. Meer informatie over Azure-abonnementen vindt u hier. Op dezelfde manier my-resource-group my-workspace my-datastore moet 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 |
AfbeeldingsdetailsOptional, Dictionary |
"image_details":{"format": "jpg", "width": "400px", "height": "258px"} |
format |
AfbeeldingstypeOptional, 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 sleutel) |
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 is vereist voor het maken van voorspellingen met behulp van een geïmplementeerd model.
Invoerindeling
De volgende JSON is de invoerindeling die nodig is voor het genereren van voorspellingen voor elke taak met behulp van taakspecifiek modeleindpunt.
{
"input_data": {
"columns": [
"image"
],
"data": [
"image_in_base64_string_format"
]
}
}
Deze json is een woordenlijst met buitenste sleutel input_data
en binnenste toetsen columns
, data
zoals beschreven in de volgende tabel. Het eindpunt accepteert een json-tekenreeks in de bovenstaande indeling en converteert deze naar een dataframe 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.
Toets | Beschrijving |
---|---|
input_data (buitenste sleutel) |
Het is een externe sleutel in json-aanvraag. input_data is een woordenlijst die voorbeelden van invoerafbeeldingen accepteert Required, Dictionary |
columns (binnenste sleutel) |
Kolomnamen die moeten worden gebruikt om een dataframe te maken. Er wordt slechts één kolom met image als kolomnaam geaccepteerd.Required, List |
data (binnenste sleutel) |
Lijst met met base64 gecodeerde afbeeldingen Required, 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 volgen verschillende structuur, afhankelijk van het taaktype. In deze sectie worden de uitvoergegevensindelingen verkend voor afbeeldingsclassificatie met meerdere klassen, classificatie van meerdere labels, objectdetectie en segmentatietaken van exemplaren.
De volgende schema's zijn van toepassing wanneer de invoeraanvraag één afbeelding bevat.
Afbeeldingsclassificatie (binair/multiklasse)
Eindpunt voor afbeeldingsclassificatie retourneert alle labels in de gegevensset en de waarschijnlijkheidsscores voor de invoerafbeelding in de volgende indeling. visualizations
en attributions
zijn gerelateerd aan uitleg en wanneer de aanvraag alleen voor scoren is, worden deze sleutels niet opgenomen in de uitvoer. Zie de sectie Uitleg over afbeeldingsclassificatie voor meer informatie over 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 uitleg en wanneer de aanvraag alleen voor scoren is, worden deze sleutels niet opgenomen in de uitvoer. Zie de sectie Uitleg voor afbeeldingsclassificatie met meerdere labels voor meer informatie over het invoer- en uitvoerschema voor uitlegbaarheid voor classificatie met meerdere labels.
[
{
"probs": [
0.997,
0.960,
0.982,
0.025
],
"labels": [
"can",
"carton",
"milk_bottle",
"water_bottle"
]
}
]
Objectdetectie
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
In instantiesegmentatie bestaat de uitvoer uit meerdere vakken met de geschaalde coördinaten linksboven en rechtsonder, labels, betrouwbaarheidsscores en veelhoeken (geen maskers). Hier hebben de veelhoekwaarden dezelfde indeling die we in de schemasectie 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 online scoren en verklarendheid (XAI)
Belangrijk
Deze instellingen zijn momenteel beschikbaar als openbare preview. Ze worden aangeboden zonder een service level agreement. Misschien worden bepaalde functies niet ondersteund of zijn de mogelijkheden ervan beperkt. Zie 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 time-outproblemen ondervindt bij het genereren van uitleg over online-eindpunten, gebruikt u batch scoring notebook (SDK v1) om uitleg te genereren.
In deze sectie documenteren we de indeling van de invoergegevens die nodig is om voorspellingen te doen en uitleg te genereren voor de voorspelde klasse/klassen met behulp van een geïmplementeerd model. Er is geen afzonderlijke implementatie nodig voor uitleg. Hetzelfde eindpunt voor online scoren kan worden gebruikt om uitleg te genereren. We moeten alleen enkele extra uitleggerelateerde parameters doorgeven in het invoerschema en visualisaties van uitleg en/of toeschrijvingsscorematrices (uitleg op pixelniveau) ophalen.
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 elke classificatietaak met behulp van 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.
Toets | 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 het xai_parameters een woordenlijst met parameters die gerelateerd zijn aan het uitlegbaarheidsalgoritmen met xai_algorithm , visualizations attributions vraag sleutels. Optional, Dictionary Als xai_parameters dit niet wordt doorgegeven, wordt het algoritme voor uitleg gebruikt met de xrai standaardwaarde |
{"xai_algorithm": "xrai", "visualizations": True, "attributions": False} |
xai_algorithm |
De naam van het uit te leggen algoritme. Ondersteunde XAI-algoritmen zijn {xrai , integrated_gradients , guided_gradcam , } guided_backprop Optional, String |
xrai |
visualizations |
Of er visualisaties van uitleg moeten worden geretourneerd. Optional, Bool |
True |
attributions |
Of u kenmerken wilt retourneren. 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 |
In de volgende tabel worden de ondersteunde schema's voor uitleg beschreven.
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 specifieke parameters voor XAI-algoritme Required, Json String Works for one or more images |
Elke invoerafbeelding in de request_json
, gedefinieerd in de onderstaande code, is een base64-gecodeerde tekenreeks die is 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 beschreven voor afbeeldingsclassificatietaken van meerdere klassen met meerdere labels.
De volgende schema's worden gedefinieerd voor het geval van twee invoerafbeeldingen.
Afbeeldingsclassificatie (binair/multiklasse)
Het uitvoerschema is hetzelfde als hierboven wordt beschreven, behalve dat visualizations
en attributions
sleutelwaarden zijn opgenomen als deze sleutels zijn ingesteld True
op in de aanvraag.
Als model_explainability
, visualizations
worden attributions
ingesteld True
op in de invoeraanvraag, dan zal de uitvoer hebben visualizations
en attributions
. Meer informatie over deze parameters vindt u in de volgende tabel. Visualisaties en toeschrijvingen worden gegenereerd op basis van een klasse met de hoogste waarschijnlijkheidsscore.
Uitvoersleutel | Beschrijving |
---|---|
visualizations |
Eén afbeelding in base64-tekenreeksindeling met type Optional, 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 in vergelijking met classificatie met meerdere klassen is dat er in elke afbeelding meerdere klassen kunnen zijn waarvoor uitleg kan worden gegenereerd. visualizations
Is dus de lijst met tekenreeksen voor base64-afbeeldingen en attributions
is de lijst met toeschrijvingsscores voor elke geselecteerde klasse op basis van de confidence_score_threshold_multilabel
(standaardwaarde is 0,5).
Als model_explainability
, visualizations
worden attributions
ingesteld True
op in de invoeraanvraag, dan zal de uitvoer hebben visualizations
en attributions
. Meer informatie over deze parameters vindt u in de volgende tabel. Visualisaties en toeschrijvingen worden gegenereerd op basis van alle klassen die de waarschijnlijkheidsscore groter dan of gelijk aan confidence_score_threshold_multilabel
hebben.
Uitvoersleutel | Beschrijving |
---|---|
visualizations |
Lijst met afbeeldingen in base64-tekenreeksindeling met type Optional, String |
attributions |
Lijst met multidimensionale matrices met pixelgewijze toeschrijvingsscores voor 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 betrouwbaarheidsscore om time-outproblemen op het eindpunt te voorkomen of gebruik het eindpunt met het GPU-exemplaartype. Als u uitleg wilt genereren voor een groot aantal klassen in classificatie met meerdere labels, raadpleegt u het notebook voor batchscores (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]]],
.
.
.
]
}
]
Objectdetectie
Waarschuwing
XAI wordt niet ondersteund. Er worden dus alleen scores geretourneerd. Raadpleeg bijvoorbeeld de sectie voor online scoren.
Instantiesegmentatie
Waarschuwing
XAI wordt niet ondersteund. Er worden dus alleen scores geretourneerd. Raadpleeg bijvoorbeeld de sectie voor online scoren.
Notitie
De afbeeldingen die in dit artikel worden gebruikt, zijn afkomstig uit de gegevensset Koelkastobjecten, copyright © Microsoft Corporation en beschikbaar op computervision-recipes/01_training_introduction.ipynb onder de MIT-licentie.