Schematy danych do trenowania modeli przetwarzania obrazów za pomocą zautomatyzowanego uczenia maszynowego
DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure w wersji 2 (current)
Zestaw PYTHON SDK azure-ai-ml v2 (bieżąca)
Dowiedz się, jak formatować pliki JSONL na potrzeby użycia danych w eksperymentach zautomatyzowanego uczenia maszynowego na potrzeby zadań przetwarzania obrazów podczas trenowania i wnioskowania.
Schemat danych do trenowania
Rozwiązanie AutoML usługi Azure Machine Learning dla obrazów wymaga przygotowania danych wejściowych obrazu w formacie JSONL (JSON Lines). W tej sekcji opisano formaty danych wejściowych lub schemat dla wieloklasowej klasyfikacji obrazów, klasyfikacji obrazów, wykrywania obiektów i segmentacji wystąpień. Udostępnimy również próbkę końcowego pliku trenowania lub walidacji wierszy JSON.
Klasyfikacja obrazów (binarne/wieloklasowe)
Format/schemat danych wejściowych w każdym wierszu 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",
}
Key | opis | Przykład |
---|---|---|
image_url |
Lokalizacja obrazu w magazynie danych usługi Azure Machine Learning. my-subscription-id należy zastąpić subskrypcją platformy Azure, w której znajdują się obrazy. Więcej informacji na temat subskrypcji platformy Azure można znaleźć tutaj. Podobnie , należy zastąpić odpowiednio nazwą grupy zasobów, nazwą obszaru roboczego i nazwą magazynu danych.my-resource-group my-workspace my-datastore path_to_image powinna być pełną ścieżką do obrazu w magazynie danych.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 |
Szczegóły obrazuOptional, Dictionary |
"image_details":{"format": "jpg", "width": "400px", "height": "258px"} |
format |
Typ obrazu (obsługiwane są wszystkie dostępne formaty obrazów w bibliotece Poduszka )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 |
Szerokość obrazuOptional, String or Positive Integer |
"400px" or 400 |
height |
Wysokość obrazuOptional, String or Positive Integer |
"200px" or 200 |
label |
Klasa/etykieta obrazuRequired, String |
"cat" |
Przykład pliku JSONL dla klasyfikacji obrazów wieloklasowych:
{"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"}
Klasyfikacja obrazów — wiele etykiet
Poniżej przedstawiono przykładowy format/schemat danych wejściowych w każdym wierszu JSON na potrzeby klasyfikacji obrazów.
{
"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"
]
}
Key | opis | Przykład |
---|---|---|
image_url |
Lokalizacja obrazu w magazynie danych usługi Azure Machine Learning. my-subscription-id należy zastąpić subskrypcją platformy Azure, w której znajdują się obrazy. Więcej informacji na temat subskrypcji platformy Azure można znaleźć tutaj. Podobnie , należy zastąpić odpowiednio nazwą grupy zasobów, nazwą obszaru roboczego i nazwą magazynu danych.my-resource-group my-workspace my-datastore path_to_image powinna być pełną ścieżką do obrazu w magazynie danych.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 |
Szczegóły obrazuOptional, Dictionary |
"image_details":{"format": "jpg", "width": "400px", "height": "258px"} |
format |
Typ obrazu (obsługiwane są wszystkie formaty obrazów dostępne w bibliotece Poduszka )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 |
Szerokość obrazuOptional, String or Positive Integer |
"400px" or 400 |
height |
Wysokość obrazuOptional, String or Positive Integer |
"200px" or 200 |
label |
Lista klas/etykiet na obrazieRequired, List of Strings |
["cat","dog"] |
Przykład pliku JSONL dla wielu etykiet klasyfikacji obrazów:
{"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"]}
Wykrywanie obiektów
Poniżej przedstawiono przykładowy plik JSONL na potrzeby wykrywania obiektów.
{
"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"
},
"..."
]
}
Tu
xmin
= x współrzędnych lewego górnego rogu pola ograniczeniaymin
= współrzędna y lewego górnego rogu pola ograniczeniaxmax
= x współrzędna prawego dolnego rogu pola ograniczeniaymax
= współrzędna y prawego dolnego rogu pola ograniczenia
Key | opis | Przykład |
---|---|---|
image_url |
Lokalizacja obrazu w magazynie danych usługi Azure Machine Learning. my-subscription-id należy zastąpić subskrypcją platformy Azure, w której znajdują się obrazy. Więcej informacji na temat subskrypcji platformy Azure można znaleźć tutaj. Podobnie , należy zastąpić odpowiednio nazwą grupy zasobów, nazwą obszaru roboczego i nazwą magazynu danych.my-resource-group my-workspace my-datastore path_to_image powinna być pełną ścieżką do obrazu w magazynie danych.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 |
Szczegóły obrazuOptional, Dictionary |
"image_details":{"format": "jpg", "width": "400px", "height": "258px"} |
format |
Typ obrazu (obsługiwane są wszystkie formaty obrazów dostępne w bibliotece Poduszka . Jednak w przypadku formatów obrazów YOLO dozwolonych przez opencv są obsługiwane)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 |
Szerokość obrazuOptional, String or Positive Integer |
"499px" or 499 |
height |
Wysokość obrazuOptional, String or Positive Integer |
"665px" or 665 |
label (klucz zewnętrzny) |
Lista pól ograniczenia, w których każde pole jest słownikiem label, topX, topY, bottomX, bottomY, isCrowd współrzędnych w lewym górnym i dolnym roguRequired, List of dictionaries |
[{"label": "cat", "topX": 0.260, "topY": 0.406, "bottomX": 0.735, "bottomY": 0.701, "isCrowd": 0}] |
label (klucz wewnętrzny) |
Klasa/etykieta obiektu w polu ograniczeniaRequired, String |
"cat" |
topX |
Współczynnik współrzędnych x lewego górnego rogu pola ograniczenia i szerokości obrazuRequired, Float in the range [0,1] |
0.260 |
topY |
Współczynnik współrzędnych y lewego górnego rogu pola ograniczenia i wysokości obrazuRequired, Float in the range [0,1] |
0.406 |
bottomX |
Współczynnik współrzędnych x prawego dolnego rogu pola ograniczenia i szerokości obrazuRequired, Float in the range [0,1] |
0.735 |
bottomY |
Współczynnik współrzędnych y prawego dolnego rogu pola ograniczenia i wysokości obrazuRequired, Float in the range [0,1] |
0.701 |
isCrowd |
Wskazuje, czy pole ograniczenia znajduje się wokół tłumu obiektów. Jeśli ta flaga specjalna jest ustawiona, pominiemy to konkretne pole ograniczenia podczas obliczania metryki.Optional, Bool |
0 |
Przykład pliku JSONL na potrzeby wykrywania obiektów:
{"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}]}
Segmentacja wystąpień
Na przykład segmentacja zautomatyzowanego uczenia maszynowego obsługuje tylko wielokąt jako dane wejściowe i wyjściowe, bez masek.
Poniżej przedstawiono przykładowy plik JSONL, na przykład segmentacja.
{
"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"]]
}
]
}
Key | opis | Przykład |
---|---|---|
image_url |
Lokalizacja obrazu w magazynie danych usługi Azure Machine Learning. my-subscription-id należy zastąpić subskrypcją platformy Azure, w której znajdują się obrazy. Więcej informacji na temat subskrypcji platformy Azure można znaleźć tutaj. Podobnie , należy zastąpić odpowiednio nazwą grupy zasobów, nazwą obszaru roboczego i nazwą magazynu danych.my-resource-group my-workspace my-datastore path_to_image powinna być pełną ścieżką do obrazu w magazynie danych.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 |
Szczegóły obrazuOptional, Dictionary |
"image_details":{"format": "jpg", "width": "400px", "height": "258px"} |
format |
Typ obrazuOptional, 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 |
Szerokość obrazuOptional, String or Positive Integer |
"499px" or 499 |
height |
Wysokość obrazuOptional, String or Positive Integer |
"665px" or 665 |
label (klucz zewnętrzny) |
Lista masek, w których każda maska jest słownikiem 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 (klucz wewnętrzny) |
Klasa/etykieta obiektu w masceRequired, String |
"cat" |
isCrowd |
Wskazuje, czy maska znajduje się wokół tłumu obiektówOptional, Bool |
0 |
polygon |
Współrzędne wielokątne dla obiektuRequired, 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]] |
Przykład pliku JSONL dla segmentacji wystąpienia:
{"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 ]]}]}
Schemat danych dla oceniania online
W tej sekcji dokumentujemy format danych wejściowych wymaganych do przewidywania przy użyciu wdrożonego modelu.
Format danych wejściowych
Poniższy kod JSON jest formatem wejściowym wymaganym do generowania przewidywań dla dowolnego zadania przy użyciu punktu końcowego modelu specyficznego dla zadania.
{
"input_data": {
"columns": [
"image"
],
"data": [
"image_in_base64_string_format"
]
}
}
Ten kod json jest słownikiem z kluczem zewnętrznym i kluczami input_data
columns
wewnętrznymi, data
zgodnie z opisem w poniższej tabeli. Punkt końcowy akceptuje ciąg json w powyższym formacie i konwertuje go na ramkę danych próbek wymaganych przez skrypt oceniania. Każdy obraz wejściowy w request_json["input_data"]["data"]
sekcji json jest ciągiem zakodowanym w formacie base64.
Key | opis |
---|---|
input_data (klucz zewnętrzny) |
Jest to klucz zewnętrzny w żądaniu json. input_data to słownik, który akceptuje przykłady obrazów wejściowych Required, Dictionary |
columns (klucz wewnętrzny) |
Nazwy kolumn do użycia w celu utworzenia ramki danych. Akceptuje tylko jedną kolumnę z image nazwą kolumny.Required, List |
data (klucz wewnętrzny) |
Lista obrazów zakodowanych w formacie base64 Required, List |
Po wdrożeniu modelu mlflow możemy użyć następującego fragmentu kodu, aby uzyskać przewidywania dla wszystkich zadań.
# 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,
)
Format wyjściowy
Przewidywania na podstawie punktów końcowych modelu są zgodne z inną strukturą w zależności od typu zadania. W tej sekcji omówiono formaty danych wyjściowych dla wieloklasowej klasyfikacji obrazów z wieloma etykietami, wykrywania obiektów i zadań segmentacji wystąpień.
Poniższe schematy mają zastosowanie, gdy żądanie wejściowe zawiera jeden obraz.
Klasyfikacja obrazów (binarne/wieloklasowe)
Punkt końcowy klasyfikacji obrazów zwraca wszystkie etykiety w zestawie danych i ich wyniki prawdopodobieństwa dla obrazu wejściowego w następującym formacie. visualizations
i są związane z wyjaśnieniem, attributions
a jeśli żądanie dotyczy tylko oceniania, te klucze nie zostaną uwzględnione w danych wyjściowych. Aby uzyskać więcej informacji na temat schematu danych wejściowych i wyjściowych możliwości wyjaśnienia klasyfikacji obrazów, zobacz sekcję Objaśnienie klasyfikacji obrazów.
[
{
"probs": [
2.098e-06,
4.783e-08,
0.999,
8.637e-06
],
"labels": [
"can",
"carton",
"milk_bottle",
"water_bottle"
]
}
]
Klasyfikacja obrazów — wiele etykiet
W przypadku klasyfikacji obrazów z wieloma etykietami punkt końcowy modelu zwraca etykiety i ich prawdopodobieństwa. visualizations
i są związane z wyjaśnieniem, attributions
a jeśli żądanie dotyczy tylko oceniania, te klucze nie zostaną uwzględnione w danych wyjściowych. Aby uzyskać więcej informacji na temat schematu danych wejściowych i wyjściowych objaśnienia dla klasyfikacji wielu etykiet, zobacz sekcję objaśnienia klasyfikacji obrazów z wieloma etykietami.
[
{
"probs": [
0.997,
0.960,
0.982,
0.025
],
"labels": [
"can",
"carton",
"milk_bottle",
"water_bottle"
]
}
]
Wykrywanie obiektów
Model wykrywania obiektów zwraca wiele pól ze skalowanymi współrzędnymi w lewym górnym i dolnym rogu wraz z etykietą pola i współczynnikiem ufności.
[
{
"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
}
]
}
]
Segmentacja wystąpień
W przypadku segmentacji wystąpień dane wyjściowe składają się z wielu pól ze skalowanymi współrzędnymi w lewym górnym i dolnym rogu, etykietami, współczynnikami ufności i wielokątami (nie maskami). W tym miejscu wartości wielokątne są w tym samym formacie, który omówiliśmy w sekcji schematu.
[
{
"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
]
]
}
]
}
]
Format danych dla oceniania i objaśnienia online (XAI)
Ważne
Te ustawienia są obecnie dostępne w publicznej wersji zapoznawczej. Są one dostarczane bez umowy dotyczącej poziomu usług. Niektóre funkcje mogą być nieobsługiwane lub ograniczone. Aby uzyskać więcej informacji, zobacz Uzupełniające warunki korzystania z wersji zapoznawczych platformy Microsoft Azure.
Ostrzeżenie
Wyjaśnienie jest obsługiwane tylko w przypadku klasyfikacji wieloklasowej i klasyfikacji wielu etykiet. Podczas generowania wyjaśnień w punkcie końcowym online, jeśli wystąpią problemy z przekroczeniem limitu czasu, użyj notesu oceniania wsadowego (SDK w wersji 1), aby wygenerować wyjaśnienia.
W tej sekcji dokumentujemy format danych wejściowych wymaganych do przewidywania i generujemy wyjaśnienia dla przewidywanej klasy/klas przy użyciu wdrożonego modelu. Nie jest wymagane oddzielne wdrożenie w celu wyjaśnienia. Ten sam punkt końcowy oceniania online może służyć do generowania wyjaśnień. Wystarczy przekazać kilka dodatkowych parametrów związanych z wyjaśnieniem w schemacie wejściowym i uzyskać wizualizacje objaśnień i/lub macierzy wyników autorstwa (wyjaśnienia na poziomie pikseli).
Obsługiwane metody objaśnienia:
- XRAI (xrai)
- Gradienty zintegrowane (integrated_gradients)
- Przewodnik GradCAM (guided_gradcam)
- BackPropagation z przewodnikiem (guided_backprop)
Format danych wejściowych (XAI)
Następujące formaty danych wejściowych są obsługiwane w celu generowania przewidywań i wyjaśnień dotyczących dowolnego zadania klasyfikacji przy użyciu punktu końcowego modelu specyficznego dla zadania. Po wdrożeniu modelu możemy użyć następującego schematu, aby uzyskać przewidywania i wyjaśnienia.
{
"input_data": {
"columns": ["image"],
"data": [json.dumps({"image_base64": "image_in_base64_string_format",
"model_explainability": True,
"xai_parameters": {}
})
]
}
}
Wraz z obrazem istnieją dwa dodatkowe parametry (model_explainability
i xai_parameters
) wymagane w schemacie wejściowym w celu wygenerowania wyjaśnień.
Key | opis | Wartość domyślna |
---|---|---|
image_base64 |
obraz wejściowy w formacie base64Required, String |
- |
model_explainability |
Czy należy wygenerować wyjaśnienia, czy tylko ocenianieOptional, Bool |
False |
xai_parameters |
Jeśli model_explainability ma wartość True, to xai_parameters jest słownik zawierający parametry związane z algorytmem objaśniania z parametrami xai_algorithm , visualizations attributions , pytaj klucze. Optional, Dictionary Jeśli xai_parameters nie zostanie przekazany, xrai algorytm objaśnienia jest używany z jego wartością domyślną |
{"xai_algorithm": "xrai", "visualizations": True, "attributions": False} |
xai_algorithm |
Nazwa algorytmu objaśnienia, który ma być używany. Obsługiwane algorytmy XAI to {xrai , integrated_gradients , guided_gradcam , guided_backprop }Optional, String |
xrai |
visualizations |
Czy zwrócić wizualizacje wyjaśnień. Optional, Bool |
True |
attributions |
Czy zwracać przypisania funkcji. Optional, Bool |
False |
confidence_score_threshold_multilabel |
Próg współczynnika ufności w celu wybrania najlepszych klas w celu wygenerowania wyjaśnień w klasyfikacji z wieloma etykietami. Optional, Float |
0.5 |
W poniższej tabeli opisano obsługiwane schematy w celu wyjaśnienia.
Typ | Schemat |
---|---|
Wnioskowanie na pojedynczym obrazie w formacie base64 | Słownik z kluczem i wartością image_base64 jest obrazem zakodowanym w formacie base64, model_explainability klucz z wartościami True lub False i xai_parameters słownikiem z parametrami specyficznymi dla algorytmu XAI Required, Json String Works for one or more images |
Każdy obraz wejściowy w pliku request_json
zdefiniowanym w poniższym kodzie jest ciągiem zakodowanym w formacie base64 dołączonym do listy 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)
Format danych wyjściowych (XAI)
Przewidywania wykonywane na punktach końcowych modelu są zgodne z różnymi schematami w zależności od typu zadania. W tej sekcji opisano formaty danych wyjściowych dla wieloklasowych zadań klasyfikacji obrazów z wieloma etykietami.
Następujące schematy są definiowane dla przypadku dwóch obrazów wejściowych.
Klasyfikacja obrazów (binarne/wieloklasowe)
Schemat danych wyjściowych jest taki sam jak opisany powyżej , z tą różnicą, że visualizations
i attributions
wartości klucza są uwzględniane, jeśli te klucze zostały ustawione na True
wartość w żądaniu.
Jeśli model_explainability
wartość , attributions
visualizations
jest ustawiona na True
wartość w żądaniu wejściowym, dane wyjściowe będą miały visualizations
wartość i attributions
. Więcej szczegółów na temat tych parametrów opisano w poniższej tabeli. Wizualizacje i przypisania są generowane względem klasy, która ma najwyższy wynik prawdopodobieństwa.
Klucz wyjściowy | opis |
---|---|
visualizations |
Pojedynczy obraz w formacie ciągu base64 z typem Optional, String |
attributions |
tablica wielowymiarowa z wynikami autorstwa mądry pikseli kształtu [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]]]
}
]
Klasyfikacja obrazów — wiele etykiet
Jedyną różnicą w schemacie danych wyjściowych klasyfikacji wielu etykiet w porównaniu z klasyfikacją wieloklasową jest to, że istnieje wiele klas na każdym obrazie, dla których można wygenerować wyjaśnienia. Tak więc jest visualizations
listą ciągów obrazów base64 i attributions
jest listą wyników autorstwa dla każdej wybranej klasy na confidence_score_threshold_multilabel
podstawie wartości (wartość domyślna to 0,5).
Jeśli model_explainability
wartość , attributions
visualizations
jest ustawiona na True
wartość w żądaniu wejściowym, dane wyjściowe będą miały visualizations
wartość i attributions
. Więcej szczegółów na temat tych parametrów opisano w poniższej tabeli. Wizualizacje i przypisania są generowane dla wszystkich klas, które mają wynik prawdopodobieństwa większy lub równy confidence_score_threshold_multilabel
.
Klucz wyjściowy | opis |
---|---|
visualizations |
Lista obrazów w formacie ciągu base64 z typem Optional, String |
attributions |
Lista tablic wielowymiarowych z wynikami autorstwa mądry pikseli dla każdej klasy, w której każda tablica wielowymiarowa ma kształt [3, valid_crop_size, valid_crop_size] Optional, List |
Ostrzeżenie
Podczas generowania wyjaśnień w punkcie końcowym online należy wybrać tylko kilka klas na podstawie wskaźnika ufności, aby uniknąć problemów z przekroczeniem limitu czasu w punkcie końcowym lub użyć punktu końcowego z typem wystąpienia procesora GPU. Aby wygenerować wyjaśnienia dla dużej liczby klas w klasyfikacji wielu etykiet, zapoznaj się z notesem oceniania wsadowego (SDK w wersji 1).
[
{
"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]]],
.
.
.
]
}
]
Wykrywanie obiektów
Ostrzeżenie
Interfejs XAI nie jest obsługiwany. Dlatego zwracane są tylko wyniki. Aby uzyskać przykład oceniania, zapoznaj się z sekcją oceniania online.
Segmentacja wystąpień
Ostrzeżenie
Interfejs XAI nie jest obsługiwany. Dlatego zwracane są tylko wyniki. Aby uzyskać przykład oceniania, zapoznaj się z sekcją oceniania online.
Uwaga
Obrazy używane w tym artykule pochodzą z zestawu danych Fridge Objects, prawa autorskie © Microsoft Corporation i dostępne w witrynie computervision-recipes/01_training_introduction.ipynb w ramach licencji MIT.