Sdílet prostřednictvím


Schémata dat pro trénování modelů počítačového zpracování obrazu pomocí automatizovaného strojového učení

PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)Python SDK azure-ai-ml v2 (aktuální)

Naučte se formátovat soubory JSONL pro spotřebu dat v automatizovaných experimentech ML pro úlohy počítačového zpracování obrazu během trénování a odvozování.

Schéma dat pro trénování

Azure Machine Learning AutoML pro obrázky vyžaduje přípravu vstupních dat obrázků ve formátu JSONL (Řádky JSON). Tato část popisuje vstupní formáty dat nebo schéma pro klasifikaci obrázků ve více třídách, klasifikaci obrázků s více popisky, detekci objektů a segmentaci instancí. Poskytneme také ukázku konečného trénovacího nebo ověřovacího souboru JSON Lines.

Klasifikace obrázků (binární/více tříd)

Vstupní formát a schéma dat na každém řádku 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 Popis Příklad
image_url Umístění image v úložišti dat služby Azure Machine Learning
my-subscription-id musí být nahrazeno předplatným Azure, kde se nacházejí image. Další informace o předplatných Azure najdete tady. my-resource-groupmy-workspacemy-datastore Podobně by měl být nahrazen názvem skupiny prostředků, názvem pracovního prostoru a názvem úložiště dat.
path_to_image by měla být úplná cesta k obrázku v úložišti dat.
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 Podrobnosti o obrázku
Optional, Dictionary
"image_details":{"format": "jpg", "width": "400px", "height": "258px"}
format Typ obrázku (podporují se všechny dostupné formáty obrázků v knihovně Pillow ).
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 Šířka obrázku
Optional, String or Positive Integer
"400px" or 400
height Výška obrázku
Optional, String or Positive Integer
"200px" or 200
label Třída nebo popisek obrázku
Required, String
"cat"

Příklad souboru JSONL pro klasifikaci obrázků s více třídami:

{"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"}

Příklad obrázku pro více tříd klasifikace obrázků

Více popisků klasifikace obrázků

Následuje příklad formátu a schématu vstupních dat v každém řádku JSON pro klasifikaci obrázků.

{
   "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 Popis Příklad
image_url Umístění image v úložišti dat služby Azure Machine Learning
my-subscription-id musí být nahrazeno předplatným Azure, kde se nacházejí image. Další informace o předplatných Azure najdete tady. my-resource-groupmy-workspacemy-datastore Podobně by měl být nahrazen názvem skupiny prostředků, názvem pracovního prostoru a názvem úložiště dat.
path_to_image by měla být úplná cesta k obrázku v úložišti dat.
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 Podrobnosti o obrázku
Optional, Dictionary
"image_details":{"format": "jpg", "width": "400px", "height": "258px"}
format Typ obrázku (podporují se všechny formáty obrázků dostupné v knihovně Pillow ).
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 Šířka obrázku
Optional, String or Positive Integer
"400px" or 400
height Výška obrázku
Optional, String or Positive Integer
"200px" or 200
label Seznam tříd a popisků na obrázku
Required, List of Strings
["cat","dog"]

Příklad souboru JSONL pro více popisků klasifikace obrázků:

{"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"]}

Příklad obrázku pro více popisků klasifikace obrázků

Detekce objektů

Následuje příklad souboru JSONL pro detekci objektů.

{
   "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"
      },
      "..."
   ]
}

Tady

  • xmin = x souřadnice levého horního rohu ohraničujícího rámečku
  • ymin = souřadnice y levého horního rohu ohraničujícího rámečku
  • xmax = x souřadnice pravého dolního rohu ohraničujícího rámečku
  • ymax = souřadnice y pravého dolního rohu ohraničujícího rámečku
Key Popis Příklad
image_url Umístění image v úložišti dat služby Azure Machine Learning
my-subscription-id musí být nahrazeno předplatným Azure, kde se nacházejí image. Další informace o předplatných Azure najdete tady. my-resource-groupmy-workspacemy-datastore Podobně by měl být nahrazen názvem skupiny prostředků, názvem pracovního prostoru a názvem úložiště dat.
path_to_image by měla být úplná cesta k obrázku v úložišti dat.
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 Podrobnosti o obrázku
Optional, Dictionary
"image_details":{"format": "jpg", "width": "400px", "height": "258px"}
format Typ obrázku (podporují se všechny formáty obrázků dostupné v knihovně Pillow . Ale pro YOLO jsou podporovány pouze formáty obrázků povolené 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 Šířka obrázku
Optional, String or Positive Integer
"499px" or 499
height Výška obrázku
Optional, String or Positive Integer
"665px" or 665
label (vnější klíč) Seznamoch label, topX, topY, bottomX, bottomY, isCrowd
Required, List of dictionaries
[{"label": "cat", "topX": 0.260, "topY": 0.406, "bottomX": 0.735, "bottomY": 0.701, "isCrowd": 0}]
label (vnitřní klíč) Třída/popisek objektu v ohraničujícím rámečku
Required, String
"cat"
topX Poměr souřadnic x levého horního rohu ohraničujícího rámečku a šířky obrázku
Required, Float in the range [0,1]
0.260
topY Poměr souřadnice y levého horního rohu ohraničujícího rámečku a výšky obrázku
Required, Float in the range [0,1]
0.406
bottomX Poměr souřadnic x pravého dolního rohu ohraničujícího rámečku a šířky obrázku
Required, Float in the range [0,1]
0.735
bottomY Poměr souřadnic y pravého dolního rohu ohraničujícího rámečku a výšky obrázku
Required, Float in the range [0,1]
0.701
isCrowd Určuje, jestli je ohraničující rámeček kolem davu objektů. Pokud je nastaven tento speciální příznak, při výpočtu metriky přeskočíme tento konkrétní ohraničující rámeček.
Optional, Bool
0

Příklad souboru JSONL pro detekci objektů:

{"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}]}

Příklad obrázku pro detekci objektů

Segmentace instancí

Například segmentace automatizovaného strojového učení podporuje jako vstup a výstup pouze mnohoúhelník, žádné masky.

Následuje příklad souboru JSONL, například segmentace.

{
   "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 Popis Příklad
image_url Umístění image v úložišti dat služby Azure Machine Learning
my-subscription-id musí být nahrazeno předplatným Azure, kde se nacházejí image. Další informace o předplatných Azure najdete tady. my-resource-groupmy-workspacemy-datastore Podobně by měl být nahrazen názvem skupiny prostředků, názvem pracovního prostoru a názvem úložiště dat.
path_to_image by měla být úplná cesta k obrázku v úložišti dat.
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 Podrobnosti o obrázku
Optional, Dictionary
"image_details":{"format": "jpg", "width": "400px", "height": "258px"}
format Typ obrázku
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 Šířka obrázku
Optional, String or Positive Integer
"499px" or 499
height Výška obrázku
Optional, String or Positive Integer
"665px" or 665
label (vnější klíč) Seznam masek, kde každá maska je slovníkem 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 (vnitřní klíč) Třída/popisek objektu v masce
Required, String
"cat"
isCrowd Určuje, jestli je maska kolem davu objektů.
Optional, Bool
0
polygon Souřadnice mnohoúhelníku pro objekt
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]]

Příklad souboru JSONL pro segmentaci instancí:

{"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 ]]}]}

Příklad segmentace instance

Schéma dat pro online bodování

V této části dokumentujeme formát vstupních dat potřebný k předpovědím pomocí nasazeného modelu.

Vstupní formát

Následující formát JSON je vstupní formát potřebný ke generování předpovědí u libovolné úlohy pomocí koncového bodu modelu specifického pro úkol.

{
   "input_data": {
      "columns": [
         "image"
      ],
      "data": [
         "image_in_base64_string_format"
      ]
   }
}

Tento kód JSON je slovník s vnějším klíčem input_data a vnitřními klíči columns, data jak je popsáno v následující tabulce. Koncový bod přijímá řetězec JSON ve výše uvedeném formátu a převede ho na datový rámec ukázek požadovaných skriptem bodování. Každý vstupní obrázek v oddílu request_json["input_data"]["data"] json je řetězec kódovaný v base64.

Key Popis
input_data
(vnější klíč)
Jedná se o vnější klíč v požadavku JSON. input_data je slovník, který přijímá vstupní ukázky obrázků.
Required, Dictionary
columns
(vnitřní klíč)
Názvy sloupců, které se mají použít k vytvoření datového rámce. Přijímá pouze jeden sloupec s image názvem sloupce.
Required, List
data
(vnitřní klíč)
Seznam obrázků s kódováním Base64
Required, List

Po nasazení modelu mlflow můžeme pomocí následujícího fragmentu kódu získat předpovědi pro všechny úlohy.

# 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,
)

Výstupní formát

Předpovědi vytvořené na koncových bodech modelu se řídí odlišnou strukturou v závislosti na typu úlohy. Tato část zkoumá formáty výstupních dat pro více tříd, klasifikaci obrázků s více popisky, detekci objektů a úlohy segmentace instancí.

Následující schémata platí, když vstupní požadavek obsahuje jednu image.

Klasifikace obrázků (binární/více tříd)

Koncový bod pro klasifikaci obrázků vrátí všechny popisky v datové sadě a skóre pravděpodobnosti pro vstupní obrázek v následujícím formátu. visualizations a attributions souvisí s vysvětlitelností a pokud je požadavek určen pouze pro bodování, nebudou tyto klíče zahrnuty do výstupu. Další informace o vysvětlitelnosti vstupního a výstupního schématu klasifikace obrázků najdete v části vysvětlení klasifikace obrázků.

[
   {
      "probs": [
         2.098e-06,
         4.783e-08,
         0.999,
         8.637e-06
      ],
      "labels": [
         "can",
         "carton",
         "milk_bottle",
         "water_bottle"
      ]
   }
]

Více popisků klasifikace obrázků

U více popisků klasifikace obrázků vrátí koncový bod modelu popisky a jejich pravděpodobnosti. visualizations a attributions souvisí s vysvětlitelností a pokud je požadavek určen pouze pro bodování, nebudou tyto klíče zahrnuty do výstupu. Další informace o vysvětlitelnosti vstupního a výstupního schématu pro klasifikaci více popisků najdete v části vysvětlení klasifikace obrázků s více popisky.

[
   {
      "probs": [
         0.997,
         0.960,
         0.982,
         0.025
      ],
      "labels": [
         "can",
         "carton",
         "milk_bottle",
         "water_bottle"
      ]
   }
]

Detekce objektů

Model rozpoznávání objektů vrací několik polí s jejich souřadnicemi vlevo nahoře a vpravo dole spolu s popiskem pole a skóre spolehlivosti.

[
   {
      "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
         }
      ]
   }
]

Segmentace instancí

V segmentaci instancí se výstup skládá z několika polí s jejich souřadnicemi vlevo nahoře a vpravo dole, popisky, skóre spolehlivosti a mnohoúhelníky (ne masky). Tady jsou hodnoty mnohoúhelníku ve stejném formátu, který jsme probírali v části schématu.

[
    {
       "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
                ]
             ]
          }
       ]
    }
]

Formát dat pro online bodování a vysvětlení (XAI)

Důležité

Tato nastavení jsou aktuálně ve verzi Public Preview. Poskytují se bez smlouvy o úrovni služeb. Některé funkce se nemusí podporovat nebo mohou mít omezené možnosti. Další informace najdete v dodatečných podmínkách použití pro verze Preview v Microsoft Azure.

Upozorňující

Vysvětlení je podporováno pouze pro klasifikaci s více třídami a klasifikaci více popisků. Pokud při generování vysvětlení online koncového bodu narazíte na problémy s vypršením časového limitu, vygenerujte vysvětlení pomocí dávkového bodovacího poznámkového bloku (SDK v1 ).

V této části dokumentujeme formát vstupních dat potřebný k předpovědím a vygenerujeme vysvětlení predikovaných tříd nebo tříd pomocí nasazeného modelu. Pro vysvětlení není potřeba žádné samostatné nasazení. Ke generování vysvětlení je možné využít stejný koncový bod pro online bodování. Stačí předat některé další vysvětlující parametry související se vstupním schématem a získat vizualizace vysvětlení a/nebo matice skóre přisuzování (vysvětlení na úrovni pixelů).

Podporované metody vysvětlení:

Vstupní formát (XAI)

Následující vstupní formáty jsou podporovány pro generování předpovědí a vysvětlení pro všechny úlohy klasifikace pomocí koncového bodu modelu specifického pro jednotlivé úlohy. Po nasazení modelu můžeme pomocí následujícího schématu získat předpovědi a vysvětlení.

{
   "input_data": {
      "columns": ["image"],
      "data": [json.dumps({"image_base64": "image_in_base64_string_format", 
                           "model_explainability": True,
                           "xai_parameters": {}
                         })
      ]
   }
}

Spolu s obrázkem jsou ve vstupním schématu vyžadovány dva další parametry (model_explainability a xai_parameters) k vygenerování vysvětlení.

Key Popis Výchozí hodnota
image_base64 vstupní obrázek ve formátu base64
Required, String
-
model_explainability Ať už chcete vygenerovat vysvětlení, nebo jenom bodování
Optional, Bool
False
xai_parameters Pokud model_explainability je true, pak xai_parameters je slovník obsahující vysvětlující algoritmus související parametry s xai_algorithm, visualizationsattributions zeptejte se klíčů.
Optional, Dictionary
Pokud xai_parameters se nepředá, xrai použije se algoritmus vysvětlitelnosti s výchozí hodnotou.
{"xai_algorithm": "xrai", "visualizations": True, "attributions": False}
xai_algorithm Název algoritmu vysvětlitelnosti, který se má použít. Podporované algoritmy XAI jsou {xrai, integrated_gradients, guided_gradcam, } guided_backprop
Optional, String
xrai
visualizations Zda se mají vrátit vizualizace vysvětlení.
Optional, Bool
True
attributions Určuje, jestli se mají vrátit přisuzování funkcí.
Optional, Bool
False
confidence_score_threshold_multilabel Prahová hodnota skóre spolehlivosti pro výběr hlavních tříd pro generování vysvětlení v klasifikaci s více popisky
Optional, Float
0.5

Následující tabulka popisuje podporovaná schémata pro vysvětlení.

Typ Schéma
Odvození jedné image ve formátu base64 Dictionary with image_base64 as key and value is base64 encoded image,
model_explainability key with True nebo False and xai_parameters dictionary with XAI algorithm specific parameters
Required, Json String
Works for one or more images

Každý vstupní obrázek v request_jsonníže definovaném kódu je řetězec s kódováním base64 připojený k seznamu 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)

Výstupní formát (XAI)

Předpovědi vytvořené v koncových bodech modelu se řídí různými schématy v závislosti na typu úlohy. Tato část popisuje formáty výstupních dat pro úlohy klasifikace obrázků s více třídami s více popisky.

Pro případ dvou vstupních obrázků jsou definována následující schémata.

Klasifikace obrázků (binární/více tříd)

Výstupní schéma je stejné jako výše popsané s tím rozdílem, že visualizations a attributions hodnoty klíčů jsou zahrnuty, pokud byly tyto klíče nastaveny v True požadavku.

Pokud model_explainabilityje v vstupním požadavku nastavena True hodnota , visualizationsattributions bude výstup obsahovat visualizations a attributions. Další podrobnosti o těchto parametrech jsou vysvětleny v následující tabulce. Vizualizace a přisuzování se generují vůči třídě, která má nejvyšší skóre pravděpodobnosti.

Výstupní klíč Popis
visualizations Jeden obrázek ve formátu řetězce base64 s typem
Optional, String
attributions multidimenzionální pole s skóre přisuzování pixelů obrazce [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]]]
    }
]

Více popisků klasifikace obrázků

Jediným rozdílem ve výstupním schématu klasifikace více popisků v porovnání s klasifikací s více třídami je, že na každém obrázku může být více tříd, pro které lze vygenerovat vysvětlení. visualizations Je tedy seznam řetězců obrázků base64 a attributions je seznam skóre přisuzování pro každou vybranou třídu na základě hodnoty confidence_score_threshold_multilabel (výchozí hodnota je 0,5).

Pokud model_explainabilityje v vstupním požadavku nastavena True hodnota , visualizationsattributions bude výstup obsahovat visualizations a attributions. Další podrobnosti o těchto parametrech jsou vysvětleny v následující tabulce. Vizualizace a atribuce jsou generovány pro všechny třídy, které mají skóre pravděpodobnosti větší nebo rovno confidence_score_threshold_multilabel.

Výstupní klíč Popis
visualizations Seznam imagí ve formátu řetězce base64 s typem
Optional, String
attributions Seznam multidimenzionálních polí s skóre přisuzování podle pixelů pro každou třídu, kde má každý multidimenzionální pole tvar [3, valid_crop_size, valid_crop_size]
Optional, List

Upozorňující

Při generování vysvětlení online koncového bodu nezapomeňte vybrat pouze několik tříd na základě skóre spolehlivosti, abyste se vyhnuli problémům s vypršením časového limitu koncového bodu nebo použili koncový bod s typem instance GPU. Pokud chcete vygenerovat vysvětlení pro velký počet tříd v klasifikaci více popisků, projděte si poznámkový blok dávkového bodování (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]]],
                        .
                        .
                        .
                       ]
    }
]

Detekce objektů

Upozorňující

XAI se nepodporuje. Takže se vrátí pouze skóre. Příklad bodování najdete v části online bodování.

Segmentace instancí

Upozorňující

XAI se nepodporuje. Takže se vrátí pouze skóre. Příklad bodování najdete v části online bodování.

Poznámka:

Obrázky použité v tomto článku pocházejí z datové sady Fridge Objects, copyright © Microsoft Corporation a k dispozici v computervision-recipes/01_training_introduction.ipynb v rámci licence MIT.

Další kroky