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

ПРИМЕНИМО К:Расширение машинного обучения Azure CLI версии 2 (в настоящее время)Пакет SDK для Python azure-ai-ml версии 2 (текущая версия)

Узнайте, как форматировать файлы 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",
}
Ключ Описание Пример
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"
        
   ]
}
Ключ Описание Пример
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 правого нижнего угла ограничивающего прямоугольника
Ключ Описание Пример
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"]]
      }
   ]
}
Ключ Описание Пример
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"
      ]
   }
}

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

Ключ Описание
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), необходимых во входной схеме для создания объяснений.

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

Выходной ключ Описание
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в visualizationsвходном запросе задано значение True , attributions то выходные данные будут иметь visualizations и attributions. Дополнительные сведения об этих параметрах описаны в следующей таблице. Визуализации и атрибуты создаются для всех классов, у которых оценка вероятности больше или равна confidence_score_threshold_multilabel.

Выходной ключ Описание
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.

Дальнейшие действия