自動機械学習を使用してコンピューター ビジョン モデルをトレーニングするためのデータ スキーマ
適用対象: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-group 、my-workspace 、my-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-group 、my-workspace 、my-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-group 、my-workspace 、my-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-group 、my-workspace 、my-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
と内部キー columns
、data
を持つディクショナリです。 エンドポイントは、上記の形式で 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 つの画像が含まれている場合は、次のスキーマを適用できます。
画像分類 (バイナリまたは複数クラス)
画像分類のエンドポイントからは、データセット内のすべてのラベルと、入力画像の確率スコアが次の形式で返されます。 visualizations
と attributions
は説明可能性に関するもので、要求がスコアリングのみの場合、これらのキーは出力には含められません。 画像分類のための説明可能性の入出力スキーマの詳細については、画像分類のための説明可能性のセクションを参照してください。
[
{
"probs": [
2.098e-06,
4.783e-08,
0.999,
8.637e-06
],
"labels": [
"can",
"carton",
"milk_bottle",
"water_bottle"
]
}
]
画像分類複数ラベル
画像分類複数ラベルの場合、モデル エンドポイントからはラベルとその確率が返されます。 visualizations
と attributions
は説明可能性に関するもので、要求がスコアリングのみの場合、これらのキーは出力には含まれません。 複数ラベル分類のための説明可能性の入出力スキーマの詳細については、画像分類の複数ラベルのための説明可能性のセクションを参照してください。
[
{
"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) を使って説明を生成します。
このセクションでは、デプロイされたモデルを使って予測を行い、予測されたクラスに対する説明を生成するために必要な入力データ形式について説明します。 説明可能性のために個別にデプロイを行う必要はありません。 オンライン スコアリングの同じエンドポイントを利用して説明を生成できます。 入力スキーマに説明可能性に関連するいくつかの追加パラメーターを渡すだけで、説明の視覚化や属性スコア マトリックス (ピクセル レベルの説明) を得ることができます。
サポートされている説明可能性のメソッド:
- XRAI (xrai)
- 統合グラデーション (integrated_gradients)
- ガイド付き GradCAM (guided_gradcam)
- ガイド付き BackPropagation (guided_backprop)
入力形式 (XAI)
タスク固有のモデル エンドポイントを使って、任意の分類タスクの予測と説明を生成するために、次の入力形式がサポートされています。 モデルのデプロイ後、次のスキーマで予測や説明を取得できます。
{
"input_data": {
"columns": ["image"],
"data": [json.dumps({"image_base64": "image_in_base64_string_format",
"model_explainability": True,
"xai_parameters": {}
})
]
}
}
画像と共に、説明を生成するために入力スキーマには 2 つの追加パラメーター (model_explainability
と xai_parameters
) が必要です。
キー | 説明 | 既定値 |
---|---|---|
image_base64 |
base64 形式の入力画像Required, String |
- |
model_explainability |
説明を生成するか、スコアリングだけを生成するかOptional, Bool |
False |
xai_parameters |
model_explainability が True の場合、xai_parameters は xai_algorithm 、visualizations 、attributions をキーとする説明可能性アルゴリズム関連パラメーターを含む辞書です。 Optional, Dictionary xai_parameters が渡されない場合、xrai の説明可能性アルゴリズムがその既定値で使われます |
{"xai_algorithm": "xrai", "visualizations": True, "attributions": False} |
xai_algorithm |
使われる説明可能性アルゴリズムの名前。 サポートされている XAI アルゴリズムは {xrai 、integrated_gradients 、guided_gradcam 、guided_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 XAI アルゴリズム固有のパラメーターを持つ True または False と xai_parameters ディクショナリを持つキー 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 つの場合、次のスキーマが定義されています。
画像分類 (バイナリまたは複数クラス)
出力スキーマは上記と同じですが、visualizations
と attributions
キーが要求で True
に設定されている場合、これらのキー値は含まれます。
入力要求で model_explainability
、visualizations
、attributions
が True
に設定されている場合、出力には visualizations
と attributions
が含まれます。 これらのパラメーターの詳細については、次の表を参照してください。 視覚化と属性は、最も高い確率のスコアを持つクラスに対して生成されます。
出力キー | 説明 |
---|---|
visualizations |
型を持つ base64 文字列形式の 1 つの画像 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 画像文字列の一覧で、attributions
は confidence_score_threshold_multilabel
(既定値は 0.5) に基づいて選ばれた各クラスに対する属性スコアの一覧です。
入力要求で model_explainability
、visualizations
、attributions
が True
に設定されている場合、出力には visualizations
と attributions
が含まれます。 これらのパラメーターの詳細については、次の表を参照してください。 視覚化と属性は、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 から入手できます。