Partilhar via


Esquemas de dados para treinar modelos de visão computacional com aprendizado de máquina automatizado (v1)

APLICA-SE A: Python SDK azureml v1

Importante

Alguns dos comandos da CLI do Azure neste artigo usam a extensão , ou v1, para o azure-cli-mlAzure Machine Learning. O suporte para a extensão v1 terminará em 30 de setembro de 2025. Você poderá instalar e usar a extensão v1 até essa data.

Recomendamos que você faça a transição para a mlextensão , ou v2, antes de 30 de setembro de 2025. Para obter mais informações sobre a extensão v2, consulte Extensão CLI do Azure ML e Python SDK v2.

Importante

Esta funcionalidade está atualmente em pré-visualização pública. Esta versão de pré-visualização é fornecida sem um contrato de nível de serviço. Algumas funcionalidades poderão não ser suportadas ou poderão ter capacidades limitadas. Para obter mais informações, veja Termos Suplementares de Utilização para Pré-visualizações do Microsoft Azure.

Saiba como formatar seus arquivos JSONL para consumo de dados em experimentos automatizados de ML para tarefas de visão computacional durante o treinamento e a inferência.

Esquema de dados para treinamento

O Azure Machine Learning AutoML for Images requer que os dados de imagem de entrada sejam preparados no formato JSONL (JSON Lines). Esta seção descreve formatos de dados de entrada ou esquema para classificação de imagem multiclasse, classificação de imagem multi-label, deteção de objetos e segmentação de instância. Também forneceremos uma amostra do treinamento final ou do arquivo JSON Lines de validação.

Classificação de imagens (binária/multiclasse)

Formato/esquema de dados de entrada em cada linha JSON:

{
   "image_url":"AmlDatastore://data_directory/../Image_name.image_format",
   "image_details":{
      "format":"image_format",
      "width":"image_width",
      "height":"image_height"
   },
   "label":"class_name",
}
Chave Description Exemplo
image_url Localização da imagem no armazenamento de dados do Azure Machine Learning
Required, String
"AmlDatastore://data_directory/Image_01.jpg"
image_details Detalhes da imagem
Optional, Dictionary
"image_details":{"format": "jpg", "width": "400px", "height": "258px"}
format Tipo de imagem (todos os formatos de imagem disponíveis na biblioteca de travesseiros são suportados)
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 Largura da imagem
Optional, String or Positive Integer
"400px" or 400
height Altura da imagem
Optional, String or Positive Integer
"200px" or 200
label Classe/rótulo da imagem
Required, String
"cat"

Exemplo de um arquivo JSONL para classificação de imagem multiclasse:

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

Exemplo de imagem para classificação de imagem multiclasse.

Classificação de imagem multi-rótulo

Segue-se um exemplo de formato/esquema de dados de entrada em cada Linha JSON para classificação de imagens.

{
   "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"
        
   ]
}
Chave Description Exemplo
image_url Localização da imagem no armazenamento de dados do Azure Machine Learning
Required, String
"AmlDatastore://data_directory/Image_01.jpg"
image_details Detalhes da imagem
Optional, Dictionary
"image_details":{"format": "jpg", "width": "400px", "height": "258px"}
format Tipo de imagem (todos os formatos de imagem disponíveis na biblioteca de travesseiros são suportados)
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 Largura da imagem
Optional, String or Positive Integer
"400px" or 400
height Altura da imagem
Optional, String or Positive Integer
"200px" or 200
label Lista de classes/rótulos na imagem
Required, List of Strings
["cat","dog"]

Exemplo de um arquivo JSONL para classificação de imagem Multi-label:

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

Exemplo de imagem para classificação de imagem multi-label.

Deteção de objetos

A seguir está um exemplo de arquivo JSONL para deteção de objetos.

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

Aqui,

  • xmin = coordenada x do canto superior esquerdo da caixa delimitadora
  • ymin = coordenada y do canto superior esquerdo da caixa delimitadora
  • xmax = coordenada x do canto inferior direito da caixa delimitadora
  • ymax = coordenada y do canto inferior direito da caixa delimitadora
Chave Description Exemplo
image_url Localização da imagem no armazenamento de dados do Azure Machine Learning
Required, String
"AmlDatastore://data_directory/Image_01.jpg"
image_details Detalhes da imagem
Optional, Dictionary
"image_details":{"format": "jpg", "width": "400px", "height": "258px"}
format Tipo de imagem (todos os formatos de imagem disponíveis na biblioteca de travesseiros são suportados. Mas para YOLO apenas formatos de imagem permitidos pelo opencv são suportados)
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 Largura da imagem
Optional, String or Positive Integer
"499px" or 499
height Altura da imagem
Optional, String or Positive Integer
"665px" or 665
label (chave exterior) Lista de caixas delimitadoras, onde cada caixa é um dicionário de label, topX, topY, bottomX, bottomY, isCrowd suas coordenadas superior esquerda e inferior direita
Required, List of dictionaries
[{"label": "cat", "topX": 0.260, "topY": 0.406, "bottomX": 0.735, "bottomY": 0.701, "isCrowd": 0}]
label (chave interna) Classe/rótulo do objeto na caixa delimitadora
Required, String
"cat"
topX Proporção de x coordenada do canto superior esquerdo da caixa delimitadora e largura da imagem
Required, Float in the range [0,1]
0.260
topY Proporção da coordenada y do canto superior esquerdo da caixa delimitadora e da altura da imagem
Required, Float in the range [0,1]
0.406
bottomX Proporção de x coordenada do canto inferior direito da caixa delimitadora e largura da imagem
Required, Float in the range [0,1]
0.735
bottomY Proporção da coordenada y do canto inferior direito da caixa delimitadora e altura da imagem
Required, Float in the range [0,1]
0.701
isCrowd Indica se a caixa delimitadora está ao redor da multidão de objetos. Se esse sinalizador especial for definido, ignoraremos essa caixa delimitadora específica ao calcular a métrica.
Optional, Bool
0

Exemplo de um arquivo JSONL para deteção de objetos:

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

Exemplo de imagem para deteção de objetos.

Segmentação de instâncias

Por exemplo, a segmentação, o ML automatizado suporta apenas polígonos como entrada e saída, sem máscaras.

A seguir está um exemplo de arquivo JSONL para segmentação de exemplo.

{
   "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"]]
      }
   ]
}
Chave Description Exemplo
image_url Localização da imagem no armazenamento de dados do Azure Machine Learning
Required, String
"AmlDatastore://data_directory/Image_01.jpg"
image_details Detalhes da imagem
Optional, Dictionary
"image_details":{"format": "jpg", "width": "400px", "height": "258px"}
format Tipo de imagem
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 Largura da imagem
Optional, String or Positive Integer
"499px" or 499
height Altura da imagem
Optional, String or Positive Integer
"665px" or 665
label (chave exterior) Lista de máscaras, onde cada máscara é um dicionário de 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 (chave interna) Classe/rótulo do objeto na máscara
Required, String
"cat"
isCrowd Indica se a máscara está ao redor da multidão de objetos
Optional, Bool
0
polygon Coordenadas de polígono para o objeto
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]]

Exemplo de um arquivo JSONL para segmentação de instância:

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

Exemplo de imagem, por exemplo, segmentação.

Formato dos dados para inferência

Nesta seção, documentamos o formato de dados de entrada necessário para fazer previsões ao usar um modelo implantado. Qualquer formato de imagem acima mencionado é aceito com o tipo application/octet-streamde conteúdo.

Formato de entrada

A seguir está o formato de entrada necessário para gerar previsões em qualquer tarefa usando o ponto de extremidade do modelo específico da tarefa. Depois de implantar o modelo, podemos usar o trecho de código a seguir para obter previsões para todas as tarefas.

# 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)

Formato de saída

As previsões feitas nos pontos de extremidade do modelo seguem uma estrutura diferente, dependendo do tipo de tarefa. Esta seção explora os formatos de dados de saída para tarefas de classificação de imagem multiclasse e rótulo, deteção de objetos e segmentação de instância.

Classificação de imagens

O ponto de extremidade para classificação de imagem retorna todos os rótulos no conjunto de dados e suas pontuações de probabilidade para a imagem de entrada no formato a seguir.

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

Classificação de imagem multi-rótulo

Para classificação de imagem multi-label, o ponto de extremidade do modelo retorna rótulos e suas probabilidades.

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

Deteção de objetos

O modelo de deteção de objetos retorna várias caixas com suas coordenadas dimensionadas superior-esquerda e inferior-direita, juntamente com o rótulo da caixa e a pontuação de confiança.

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

Segmentação de instâncias

Na segmentação de instâncias, a saída consiste em várias caixas com suas coordenadas escaladas de cima para a esquerda e para a direita, rótulos, pontuações de confiança e polígonos (não máscaras). Aqui, os valores de polígono estão no mesmo formato que discutimos na seção de esquema.

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

Nota

As imagens usadas neste artigo são do conjunto de dados Fridge Objects, copyright © Microsoft Corporation e disponíveis em computervision-recipes/01_training_introduction.ipynb sob a Licença MIT.

Próximos passos