Udostępnij za pośrednictwem


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-groupmy-workspacemy-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 obrazu
Optional, 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ść obrazu
Optional, String or Positive Integer
"400px" or 400
height Wysokość obrazu
Optional, String or Positive Integer
"200px" or 200
label Klasa/etykieta obrazu
Required, 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"}

Przykład obrazu dla wieloklasowej klasyfikacji obrazów.

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-groupmy-workspacemy-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 obrazu
Optional, 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ść obrazu
Optional, String or Positive Integer
"400px" or 400
height Wysokość obrazu
Optional, String or Positive Integer
"200px" or 200
label Lista klas/etykiet na obrazie
Required, 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"]}

Przykład obrazu dla klasyfikacji obrazów z wieloma etykietami.

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 ograniczenia
  • ymin = współrzędna y lewego górnego rogu pola ograniczenia
  • xmax = x współrzędna prawego dolnego rogu pola ograniczenia
  • ymax = 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-groupmy-workspacemy-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 obrazu
Optional, 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ść obrazu
Optional, String or Positive Integer
"499px" or 499
height Wysokość obrazu
Optional, 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 rogu
Required, 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 ograniczenia
Required, String
"cat"
topX Współczynnik współrzędnych x lewego górnego rogu pola ograniczenia i szerokości obrazu
Required, Float in the range [0,1]
0.260
topY Współczynnik współrzędnych y lewego górnego rogu pola ograniczenia i wysokości obrazu
Required, Float in the range [0,1]
0.406
bottomX Współczynnik współrzędnych x prawego dolnego rogu pola ograniczenia i szerokości obrazu
Required, Float in the range [0,1]
0.735
bottomY Współczynnik współrzędnych y prawego dolnego rogu pola ograniczenia i wysokości obrazu
Required, 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}]}

Przykład obrazu na potrzeby wykrywania obiektów.

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-groupmy-workspacemy-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 obrazu
Optional, Dictionary
"image_details":{"format": "jpg", "width": "400px", "height": "258px"}
format Typ obrazu
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ść obrazu
Optional, String or Positive Integer
"499px" or 499
height Wysokość obrazu
Optional, 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 masce
Required, String
"cat"
isCrowd Wskazuje, czy maska znajduje się wokół tłumu obiektów
Optional, Bool
0
polygon Współrzędne wielokątne dla obiektu
Required, 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 ]]}]}

Przykład obrazu dla segmentacji wystąpień.

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 columnswewnę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:

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 base64
Required, String
-
model_explainability Czy należy wygenerować wyjaśnienia, czy tylko ocenianie
Optional, 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, visualizationsattributions , 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_jsonzdefiniowanym 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_explainabilitywartość , attributions visualizationsjest 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_explainabilitywartość , attributions visualizationsjest 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.

Następne kroki