Схемы данных для обучения моделей компьютерного зрения с помощью автоматизированного машинного обучения (версия 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 |
Расположение изображения в хранилище данных Машинное обучение AzureRequired, 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 |
Расположение изображения в хранилище данных Машинное обучение AzureRequired, 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 |
Расположение изображения в хранилище данных Машинное обучение AzureRequired, 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 |
Расположение изображения в хранилище данных Машинное обучение AzureRequired, 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.