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


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

ОБЛАСТЬ ПРИМЕНЕНИЯ: Пакет SDK для Python версии 1

Внимание

Для использования некоторых команд Azure CLI, приведенных в этой статье, используйте расширение azure-cli-ml (версия 1) для Машинного обучения Azure. Поддержка расширения версии 1 будет прекращена 30 сентября 2025 г. Вы можете установить и использовать расширение версии 1 до этой даты.

Рекомендуется перейти на расширение ml (версия 2) до 30 сентября 2025 г. Дополнительные сведения о расширении версии 2 см. на странице расширения CLI для Azure ML и пакета SDK для Python версии 2.

Внимание

Эта функция сейчас доступна в виде общедоступной предварительной версии. Эта предварительная версия предоставляется без соглашения об уровне обслуживания. Некоторые функции могут не поддерживаться или их возможности могут быть ограничены. Дополнительные сведения см. в статье Дополнительные условия использования Предварительных версий Microsoft Azure.

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

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

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

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

Формат входных данных/схема в каждой строке JSON:

{
   "image_url":"AmlDatastore://data_directory/../Image_name.image_format",
   "image_details":{
      "format":"image_format",
      "width":"image_width",
      "height":"image_height"
   },
   "label":"class_name",
}
Ключ. Description Пример
image_url Расположение изображения в хранилище данных Машинное обучение Azure
Required, String
"AmlDatastore://data_directory/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": "AmlDatastore://image_data/Image_01.jpg", "image_details":{"format": "jpg", "width": "400px", "height": "258px"}, "label": "can"}
{"image_url": "AmlDatastore://image_data/Image_02.jpg", "image_details": {"format": "jpg", "width": "397px", "height": "296px"}, "label": "milk_bottle"}
.
.
.
{"image_url": "AmlDatastore://image_data/Image_n.jpg", "image_details": {"format": "jpg", "width": "1024px", "height": "768px"}, "label": "water_bottle"}

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

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

Ниже приведен пример формата входных данных/схемы в каждой строке JSON для классификации изображений.

{
   "image_url":"AmlDatastore://data_directory/../Image_name.image_format",
   "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
Required, String
"AmlDatastore://data_directory/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": "AmlDatastore://image_data/Image_01.jpg", "image_details":{"format": "jpg", "width": "400px", "height": "258px"}, "label": ["can"]}
{"image_url": "AmlDatastore://image_data/Image_02.jpg", "image_details": {"format": "jpg", "width": "397px", "height": "296px"}, "label": ["can","milk_bottle"]}
.
.
.
{"image_url": "AmlDatastore://image_data/Image_n.jpg", "image_details": {"format": "jpg", "width": "1024px", "height": "768px"}, "label": ["carton","milk_bottle","water_bottle"]}

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

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

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

{
   "image_url":"AmlDatastore://data_directory/../Image_name.image_format",
   "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
Required, String
"AmlDatastore://data_directory/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": "AmlDatastore://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": "AmlDatastore://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": "AmlDatastore://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}]}

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

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

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

Ниже приведен пример файла JSON для сегментации экземпляров.

{
   "image_url":"AmlDatastore://data_directory/../Image_name.image_format",
   "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
Required, String
"AmlDatastore://data_directory/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": "AmlDatastore://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": "AmlDatastore://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": "AmlDatastore://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 ]]}]}

Пример изображения для сегментирования экземпляра.

Формат данных для вывода

В этом разделе мы будем документировать формат входных данных, необходимый для создания прогнозов при использовании развернутой модели. Все описанные выше форматы изображений принимаются с типом содержимого application/octet-stream.

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

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

# input image for inference
sample_image = './test_image.jpg'
# load image data
data = open(sample_image, 'rb').read()
# set the content type
headers = {'Content-Type': 'application/octet-stream'}
# if authentication is enabled, set the authorization header
headers['Authorization'] = f'Bearer {key}'
# make the request and display the response
response = requests.post(scoring_uri, data, headers=headers)

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

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

Классификация изображений

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

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

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

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

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

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

Модель обнаружения объектов возвращает несколько блоков с масштабированными координатами верхнего левого и нижнего правого угла, а также с меткой блока и оценкой достоверности.

{
   "filename":"/tmp/tmpdkg2wkdy",
   "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
      }
   ]
}

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

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

{
   "filename":"/tmp/tmpi8604s0h",
   "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
            ]
         ]
      }
   ]
}

Примечание.

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

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