Поделиться через


Схемы данных для обучения моделей компьютерного зрения с помощью автоматизированного машинного обучения

ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение машинного обучения Azure CLI версии 2 (current)Python SDK azure-ai-ml версии 2 (current)

Узнайте, как форматировать файлы JSON для использования данных в экспериментах автоматизированного машинного обучения для задач компьютерного зрения во время обучения и вывода.

Схема данных для обучения

Для работы компонента автоматизированного машинного обучения AML для изображений требуются входные данные изображений, которые должны быть подготовлены в формате JSON (строки JSON). В этом разделе описываются форматы входных данных или схема для классификации изображений по классам, по меткам, обнаружения объектов и сегментации экземпляров. Кроме того, мы предоставим образец окончательного файла со строками JSON для обучения или проверки.

Классификация изображений (двоичная/многоклассовая)

Формат входных данных/схема в каждой строке 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",
}
Ключ. Description Пример
image_url Расположение изображения в хранилище данных Машинное обучение Azure.
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"

Пример файла JSON для многоклассовой классификации изображений:

{"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"
        
   ]
}
Ключ. Description Пример
image_url Расположение изображения в хранилище данных Машинное обучение Azure.
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"]

Пример файла JSON для многометочной классификации изображений:

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

Пример изображения для многометочной классификации изображений.

Обнаружение объектов

Ниже приведен пример файла 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":[
      {
         "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 правого нижнего угла ограничивающего прямоугольника
Ключ. Description Пример
image_url Расположение изображения в хранилище данных Машинное обучение Azure.
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

Пример файла JSON для обнаружения объектов:

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

Пример изображения для обнаружения объектов.

Сегментация экземпляров

Для сегментирования экземпляров автоматизированное машинное обучение поддерживает в качестве входных и выходных данных только многоугольники, но не маски.

Ниже приведен пример 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"]]
      }
   ]
}
Ключ. Description Пример
image_url Расположение изображения в хранилище данных Машинное обучение Azure.
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]]

Пример файла JSON для сегментирования экземпляра:

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

Это словарь с внешним ключом input_data и внутренними ключами columns, data как описано в следующей таблице. Конечная точка принимает строку JSON в приведенном выше формате и преобразует ее в кадр данных примеров, необходимых скрипту оценки. Каждый входной образ в request_json["input_data"]["data"] разделе json представляет собой строку в кодировке Base64.

Ключ. Description
input_data
(внешний ключ)
Это внешний ключ в запросе json. input_data — это словарь, который принимает примеры входного изображения
Required, Dictionary
columns
(внутренний ключ)
Имена столбцов для создания кадра данных. Он принимает только один столбец с image именем столбца.
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,
)

Формат вывода

Прогнозы, выполненные в конечных точках модели, имеют разную структуру в зависимости от типа задачи. В этом разделе рассматриваются форматы выходных данных для многоклассовой и многометочной классификации изображений, обнаружения объектов и задач сегментации экземпляров.

Следующие схемы применимы, если входной запрос содержит один образ.

Классификация изображений (двоичная/многоклассовая)

Конечная точка для классификации изображений возвращает все метки в наборе данных и их оценки вероятности для входного изображения в следующем формате. 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 версии 1) для создания объяснений.

В этом разделе мы документируем формат входных данных, необходимый для прогнозирования и создания объяснений для прогнозируемых классов и классов с помощью развернутой модели. Для объяснимости не требуется отдельное развертывание. Для создания объяснений можно использовать ту же конечную точку для онлайн-оценки. Нам просто нужно передать некоторые дополнительные параметры, связанные с объясняемостью в входной схеме, и получить визуализации объяснений и (или) матрицы оценки атрибутов (пояснения на уровне пикселей).

Поддерживаемые методы объясняемости:

Формат ввода (XAI)

Следующие форматы входных данных поддерживаются для создания прогнозов и объяснений для любой задачи классификации с помощью конечной точки модели для конкретной задачи. После развертывания модели мы можем использовать следующую схему для получения прогнозов и объяснений.

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

Наряду с изображением есть два дополнительных параметра (model_explainability и xai_parameters) необходимы в входной схеме для создания объяснений.

Ключ. Description Значение по умолчанию
image_base64 входной образ в формате Base64
Required, String
-
model_explainability Создание объяснений или просто оценка
Optional, Bool
False
xai_parameters Если model_explainability задано значение True, то xai_parameters это словарь, содержащий алгоритм объясняемости, связанный с параметрами, attributions связанными с xai_algorithm, visualizationsзапрашивать ключи.
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 ключ со значением True или False и xai_parameters словарем с определенными параметрами алгоритма XAI
Required, Json String
Works for one or more images

Каждый входной образ в request_jsonприведенном ниже коде представляет собой строку в кодировке Base64, добавленную в список 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)

Формат вывода (XAI)

Прогнозы, сделанные на конечных точках модели, соответствуют различным схемам в зависимости от типа задачи. В этом разделе описываются форматы выходных данных для задач классификации изображений с несколькими метками.

Для двух входных образов определены следующие схемы.

Классификация изображений (двоичная/многоклассовая)

Схема выходных данных аналогична описанному выше , за исключением visualizations включения значений attributions ключей, если эти ключи были заданы True в запросе.

Если model_explainability, visualizationsattributions задано True значение в входном запросе, выходные данные будут иметь visualizations иattributions. Дополнительные сведения об этих параметрах описаны в следующей таблице. Визуализации и атрибуции создаются для класса, имеющего самую высокую оценку вероятности.

Выходной ключ Description
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 и attributions список показателей атрибуции для каждого выбранного класса на confidence_score_threshold_multilabel основе (по умолчанию — 0,5).

Если model_explainability, visualizationsattributions задано True значение в входном запросе, выходные данные будут иметь visualizations иattributions. Дополнительные сведения об этих параметрах описаны в следующей таблице. Визуализации и атрибуции создаются для всех классов, которые имеют оценку вероятности больше или равно confidence_score_threshold_multilabel.

Выходной ключ Description
visualizations Список изображений в формате строки base64 с типом
Optional, String
attributions Список многомерных массивов с мудрой оценкой атрибуции пикселей для каждого класса, где каждый многомерный массив имеет форму [3, valid_crop_size, valid_crop_size]
Optional, List

Предупреждение

Создавая объяснения в сетевой конечной точке, не забудьте выбрать только несколько классов на основе оценки достоверности, чтобы избежать проблем с временем ожидания в конечной точке или использовать конечную точку с типом экземпляра GPU. Чтобы создать объяснения для большого количества классов в классификации с несколькими метками, обратитесь к записной книжке пакетной оценки (SDK версии 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]]],
                        .
                        .
                        .
                       ]
    }
]

Обнаружение объектов

Предупреждение

XAI не поддерживается. Таким образом, возвращаются только оценки. Пример оценки см. в разделе о оценке по сети.

Сегментация экземпляров

Предупреждение

XAI не поддерживается. Таким образом, возвращаются только оценки. Пример оценки см. в разделе о оценке по сети.

Примечание.

Изображения, используемые в этой статье, относятся к набору данных "Объекты холодильника", авторское право принадлежит корпорации Майкрософт, они доступны по адресу computervision-recipes/01_training_introduction.ipynb в рамках лицензии MIT.

Следующие шаги