自動機械学習を使用してコンピューター ビジョン モデルをトレーニングするためのデータ スキーマ

適用対象:Azure CLI ml extension v2 (現行)Python SDK azure-ai-ml v2 (現行)

コンピューター ビジョン タスクの自動 ML 実験で、トレーニングおよび推論時のデータ利用のために JSONL ファイルを書式設定する方法について説明します。

トレーニング用のデータ スキーマ

Azure Machine Learning AutoML for Images では、入力画像データを JSONL (JSON Lines) 形式で準備する必要があります。 このセクションでは、画像分類複数クラス、画像分類複数ラベル、物体検出、インスタンスのセグメント化のための入力データ形式またはスキーマについて説明します。 また、最終的なトレーニングまたは検証の JSON Lines ファイルのサンプルも示します。

画像分類 (バイナリまたは複数クラス)

各 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 説明
image_url Azure Machine Learning データストア内の画像の場所。
my-subscription-id は、画像が配置されている Azure サブスクリプションに置き換える必要があります。 Azure サブスクリプションの詳細については、こちらを参照してください。 同様に、my-resource-groupmy-workspacemy-datastore は、リソース グループ名ワークスペース名データストア名にそれぞれ置き換える必要があります。
path_to_image は、データストア上の画像への完全なパスである必要があります。
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 画像詳細
Optional, Dictionary
"image_details":{"format": "jpg", "width": "400px", "height": "258px"}
format 画像の種類 (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 画像の幅
Optional, String or Positive Integer
"400px" or 400
height 画像の高さ
Optional, String or Positive Integer
"200px" or 200
label 画像のクラスまたはラベル
Required, String
"cat"

複数クラス画像分類用の JSONL ファイルの例:

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

複数クラス画像分類の画像の例。

画像分類複数ラベル

画像分類の各 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_1",
      "class_name_2",
      "class_name_3",
      "...",
      "class_name_n"
        
   ]
}
Key 説明
image_url Azure Machine Learning データストア内の画像の場所。
my-subscription-id は、画像が配置されている Azure サブスクリプションに置き換える必要があります。 Azure サブスクリプションの詳細については、こちらを参照してください。 同様に、my-resource-groupmy-workspacemy-datastore は、リソース グループ名ワークスペース名データストア名にそれぞれ置き換える必要があります。
path_to_image は、データストア上の画像への完全なパスである必要があります。
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 画像詳細
Optional, Dictionary
"image_details":{"format": "jpg", "width": "400px", "height": "258px"}
format 画像の種類 (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 画像の幅
Optional, String or Positive Integer
"400px" or 400
height 画像の高さ
Optional, String or Positive Integer
"200px" or 200
label 画像のクラスまたはラベルの一覧
Required, List of Strings
["cat","dog"]

画像分類複数ラベル用の JSONL ファイルの例:

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

画像分類複数ラベルの画像の例。

オブジェクトの検出

物体検出用の JSONL ファイルの例を次に示します。

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

ここでは、

  • xmin = 境界ボックスの左上隅の x 座標
  • ymin = 境界ボックスの左上隅の y 座標
  • xmax = 境界ボックスの右下隅の x 座標
  • ymax = 境界ボックスの右下隅の y 座標
Key 説明
image_url Azure Machine Learning データストア内の画像の場所。
my-subscription-id は、画像が配置されている Azure サブスクリプションに置き換える必要があります。 Azure サブスクリプションの詳細については、こちらを参照してください。 同様に、my-resource-groupmy-workspacemy-datastore は、リソース グループ名ワークスペース名データストア名にそれぞれ置き換える必要があります。
path_to_image は、データストア上の画像への完全なパスである必要があります。
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 画像詳細
Optional, Dictionary
"image_details":{"format": "jpg", "width": "400px", "height": "258px"}
format 画像の種類 (Pillow ライブラリで使用可能なすべての画像形式がサポートされています。ただし、YOLO の場合は、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 画像の幅
Optional, String or Positive Integer
"499px" or 499
height 画像の高さ
Optional, String or Positive Integer
"665px" or 665
label (外部キー) 境界ボックスの一覧。各ボックスは左上と右下の座標 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 (内部キー) 境界ボックス内の物体のクラスまたはラベル
Required, String
"cat"
topX 境界ボックスの左上隅の x 座標と画像の幅の比率
Required, Float in the range [0,1]
0.260
topY 境界ボックスの左上隅の y 座標と画像の高さの比率
Required, Float in the range [0,1]
0.406
bottomX 境界ボックスの右下隅の x 座標と画像の幅の比率
Required, Float in the range [0,1]
0.735
bottomY 境界ボックスの右下隅の y 座標と画像の高さの比率
Required, Float in the range [0,1]
0.701
isCrowd 境界ボックスが物体群の周りにあるかどうかを示します。 この特別なフラグが設定されている場合は、メトリックを計算するときにこの特定の境界ボックスをスキップします。
Optional, Bool
0

物体検出用の JSONL ファイルの例:

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

物体検出の画像の例。

インスタンスのセグメント化

インスタンスのセグメント化については、自動 ML で入力および出力としてサポートされるのは多角形のみであり、マスクはサポートされません。

インスタンスのセグメント化用の JSONL ファイルの例を次に示します。

{
   "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"]]
      }
   ]
}
キー 説明
image_url Azure Machine Learning データストア内の画像の場所。
my-subscription-id は、画像が配置されている Azure サブスクリプションに置き換える必要があります。 Azure サブスクリプションの詳細については、こちらを参照してください。 同様に、my-resource-groupmy-workspacemy-datastore は、リソース グループ名ワークスペース名データストア名にそれぞれ置き換える必要があります。
path_to_image は、データストア上の画像への完全なパスである必要があります。
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 画像詳細
Optional, Dictionary
"image_details":{"format": "jpg", "width": "400px", "height": "258px"}
format イメージの種類
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 画像の幅
Optional, String or Positive Integer
"499px" or 499
height 画像の高さ
Optional, String or Positive Integer
"665px" or 665
label (外部キー) マスクの一覧。各マスクは 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 (内部キー) マスク内の物体のクラスとラベル
Required, String
"cat"
isCrowd マスクが物体群の周りにあるかどうかを示します
Optional, Bool
0
polygon 物体を表す多角形の座標
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]]

インスタンス セグメント化用の JSONL ファイルの例:

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

インスタンス セグメント化の画像の例。

オンライン スコアリングのデータ スキーマ

このセクションでは、デプロイされたモデルの使用時に予測を行うために必要とされる入力データ形式について説明します。

入力形式

次の JSON は、タスク固有のモデル エンドポイントを使って、任意のタスクの予測を生成するために必要な入力形式です。

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

この JSON は、次の表で説明するように、外部キー input_data と内部キー columnsdata を持つディクショナリです。 エンドポイントは、上記の形式で JSON 文字列を受け取り、スコアリング スクリプトで必要なサンプルのデータフレームに変換します。 JSON の request_json["input_data"]["data"] セクションの各入力画像は、base64 でエンコードされた文字列です。

キー 説明
input_data
(外部キー)
これは json 要求の外部キーです。 input_data は、入力画像サンプルを受け入れるディクショナリです
Required, Dictionary
columns
(内部キー)
データフレームの作成に使用する列名。 列名が image である 1 つの列だけを受け付けます。
Required, List
data
(内部キー)
base64 でエンコードされた画像のリスト
Required, List

MLflow モデルをデプロイした後、次のコード スニペットを使って、すべてのタスクの予測を取得できます。

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

出力形式

モデル エンドポイントで行われた予測は、タスクの種類に応じて異なる構造に従います。 このセクションでは、複数クラス、複数ラベルの画像分類、物体検出、インスタンスのセグメント化タスクの出力データ形式について説明します。

入力要求に 1 つの画像が含まれている場合は、次のスキーマを適用できます。

画像分類 (バイナリまたは複数クラス)

画像分類のエンドポイントからは、データセット内のすべてのラベルと、入力画像の確率スコアが次の形式で返されます。 visualizationsattributions は説明可能性に関するもので、要求がスコアリングのみの場合、これらのキーは出力には含められません。 画像分類のための説明可能性の入出力スキーマの詳細については、画像分類のための説明可能性のセクションを参照してください。

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

画像分類複数ラベル

画像分類複数ラベルの場合、モデル エンドポイントからはラベルとその確率が返されます。 visualizationsattributions は説明可能性に関するもので、要求がスコアリングのみの場合、これらのキーは出力には含まれません。 複数ラベル分類のための説明可能性の入出力スキーマの詳細については、画像分類の複数ラベルのための説明可能性のセクションを参照してください。

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

オブジェクトの検出

物体検出モデルを使用すると、ボックス ラベルおよび信頼度スコアと共に、スケーリングされた左上および右下の座標を持つ複数のボックスが返されます。

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

インスタンスのセグメント化

インスタンスのセグメント化では、出力は、スケーリングされた左上と右下の座標、ラベル、信頼度スコア、多角形 (マスクではない) を持つ複数のボックスで構成されます。 ここでは、多角形の値は、スキーマ セクションで説明したのと同じ形式です。

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

オンライン スコアリングと説明可能性 (XAI) のデータ形式

重要

これらの設定は、現在、パブリック プレビューの段階にあります。 それらは、サービス レベル アグリーメントなしで提供されます。 特定の機能はサポート対象ではなく、機能が制限されることがあります。 詳しくは、Microsoft Azure プレビューの追加使用条件に関するページをご覧ください。

警告

説明可能性は、複数クラス分類複数ラベル分類でのみサポートされます。 オンライン エンドポイントで説明を生成中にタイムアウトの問題が発生した場合は、バッチ スコアリング ノートブック (SDK v1) を使って説明を生成します。

このセクションでは、デプロイされたモデルを使って予測を行い、予測されたクラスに対する説明を生成するために必要な入力データ形式について説明します。 説明可能性のために個別にデプロイを行う必要はありません。 オンライン スコアリングの同じエンドポイントを利用して説明を生成できます。 入力スキーマに説明可能性に関連するいくつかの追加パラメーターを渡すだけで、説明の視覚化や属性スコア マトリックス (ピクセル レベルの説明) を得ることができます。

サポートされている説明可能性のメソッド:

入力形式 (XAI)

タスク固有のモデル エンドポイントを使って、任意の分類タスクの予測と説明を生成するために、次の入力形式がサポートされています。 モデルのデプロイ後、次のスキーマで予測や説明を取得できます。

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

画像と共に、説明を生成するために入力スキーマには 2 つの追加パラメーター (model_explainabilityxai_parameters) が必要です。

キー 説明 既定値
image_base64 base64 形式の入力画像
Required, String
-
model_explainability 説明を生成するか、スコアリングだけを生成するか
Optional, Bool
False
xai_parameters model_explainability が True の場合、xai_parametersxai_algorithmvisualizationsattributions をキーとする説明可能性アルゴリズム関連パラメーターを含む辞書です。
Optional, Dictionary
xai_parameters が渡されない場合、xrai の説明可能性アルゴリズムがその既定値で使われます
{"xai_algorithm": "xrai", "visualizations": True, "attributions": False}
xai_algorithm 使われる説明可能性アルゴリズムの名前。 サポートされている XAI アルゴリズムは {xraiintegrated_gradientsguided_gradcamguided_backprop} です
Optional, String
xrai
visualizations 説明の視覚化を返すかどうか。
Optional, Bool
True
attributions 特徴量の属性を返すかどうか。
Optional, Bool
False
confidence_score_threshold_multilabel 複数ラベル分類で、説明を生成する上位クラスを選ぶための信頼度スコアのしきい値。
Optional, Float
0.5

次の表では、サポートされている説明可能性のスキーマについて説明します。

種類 スキーマ
base64 形式の単一画像に対する推論 image_base64 をキーとする辞書で、値は base64 で符号化された画像、
model_explainability キーは True または False、xai_parameters のディクショナリは XAI アルゴリズム固有のパラメーター
Required, Json String
Works for one or more images

以下のコードで定義されている request_json 内の各入力画像は、リスト request_json["input_data"]["data"] に追加された base64 エンコード文字列です。

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)

出力形式 (XAI)

モデル エンドポイントで行われた予測は、タスクの種類に応じてさまざまなスキーマに従います。 このセクションでは、複数クラス、複数ラベルの画像分類タスクの出力データ形式について説明します。

入力画像が 2 つの場合、次のスキーマが定義されています。

画像分類 (バイナリまたは複数クラス)

出力スキーマは上記と同じですが、visualizationsattributions キーが要求で True に設定されている場合、これらのキー値は含まれます。

入力要求で model_explainabilityvisualizationsattributionsTrue に設定されている場合、出力には visualizationsattributions が含まれます。 これらのパラメーターの詳細については、次の表を参照してください。 視覚化と属性は、最も高い確率のスコアを持つクラスに対して生成されます。

出力キー 説明
visualizations base64 文字列形式の単一画像
Optional, String
attributions 形状 [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]]]
    }
]

画像分類複数ラベル

複数ラベル分類の出力スキーマを複数クラス分類と比較したときの唯一の違いは、説明を生成できる各画像に複数のクラスが存在する可能性があることです。 つまり、visualizations は base64 画像文字列の一覧で、attributionsconfidence_score_threshold_multilabel (既定値は 0.5) に基づいて選ばれた各クラスに対する属性スコアの一覧です。

入力要求で model_explainabilityvisualizationsattributionsTrue に設定されている場合、出力には visualizationsattributions が含まれます。 これらのパラメーターの詳細については、次の表を参照してください。 視覚化と属性は、confidence_score_threshold_multilabel 以上の確率スコアを持つすべてのクラスに対して生成されます。

出力キー 説明
visualizations base64 文字列形式の画像の一覧 (型付き)
Optional, String
attributions 各クラスに対するピクセル単位の属性スコアを持つ多次元配列の一覧 (各多次元配列は形状 [3, valid_crop_size, valid_crop_size] を持つ)
Optional, List

警告

オンライン エンドポイントで説明を生成する場合、エンドポイントでのタイムアウト問題を回避するために、信頼度スコアに基づいて少数のクラスのみを選ぶようにするか、GPU インスタンスの種類でエンドポイントを使うようにしてください。 複数ラベル分類で大量のクラスに対する説明を生成する場合は、バッチ スコアリング ノートブック (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]]],
                        .
                        .
                        .
                       ]
    }
]

オブジェクトの検出

警告

XAI はサポートされていません。 そのため、スコアのみが返されます。 スコアリングの例については、オンライン スコアリングのセクションを参照してください。

インスタンスのセグメント化

警告

XAI はサポートされていません。 そのため、スコアのみが返されます。 スコアリングの例については、オンライン スコアリングのセクションを参照してください。

注意

この記事で使用されている画像は Fridge Objects データセットのもので、著作権は © Microsoft Corporation に帰属します。MIT ライセンスの下で computervision-recipes/01_training_introduction.ipynb から入手できます。

次のステップ