Esquemas de dados para treinar modelos de visão computacional com aprendizado de máquina automatizado
APLICA-SE A:Azure CLI ml extension v2 (current)Python SDK azure-ai-ml v2 (current)
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":"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",
}
Chave | Description | Exemplo |
---|---|---|
image_url |
Localização da imagem no armazenamento de dados do Azure Machine Learning. my-subscription-id precisa ser substituída pela assinatura do Azure onde as imagens estão localizadas. Mais informações sobre assinaturas do Azure podem ser encontradas aqui. my-resource-group Da mesma forma, , deve my-datastore ser substituído por nome do grupo de recursos, nome do espaço de trabalho e nome do armazenamento de dados, my-workspace respectivamente. path_to_image deve ser o caminho completo para a imagem no armazenamento de dados.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 |
Detalhes da imagemOptional, 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 imagemOptional, String or Positive Integer |
"400px" or 400 |
height |
Altura da imagemOptional, String or Positive Integer |
"200px" or 200 |
label |
Classe/rótulo da imagemRequired, String |
"cat" |
Exemplo de um arquivo JSONL para classificação de imagem multiclasse:
{"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"}
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":"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"
]
}
Chave | Description | Exemplo |
---|---|---|
image_url |
Localização da imagem no armazenamento de dados do Azure Machine Learning. my-subscription-id precisa ser substituída pela assinatura do Azure onde as imagens estão localizadas. Mais informações sobre assinaturas do Azure podem ser encontradas aqui. my-resource-group Da mesma forma, , deve my-datastore ser substituído por nome do grupo de recursos, nome do espaço de trabalho e nome do armazenamento de dados, my-workspace respectivamente. path_to_image deve ser o caminho completo para a imagem no armazenamento de dados.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 |
Detalhes da imagemOptional, 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 imagemOptional, String or Positive Integer |
"400px" or 400 |
height |
Altura da imagemOptional, String or Positive Integer |
"200px" or 200 |
label |
Lista de classes/rótulos na imagemRequired, List of Strings |
["cat","dog"] |
Exemplo de um arquivo JSONL para classificação de imagem Multi-label:
{"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"]}
Deteção de objetos
A seguir está um exemplo de arquivo JSONL para deteção de objetos.
{
"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"
},
"..."
]
}
Aqui,
xmin
= coordenada x do canto superior esquerdo da caixa delimitadoraymin
= coordenada y do canto superior esquerdo da caixa delimitadoraxmax
= coordenada x do canto inferior direito da caixa delimitadoraymax
= 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. my-subscription-id precisa ser substituída pela assinatura do Azure onde as imagens estão localizadas. Mais informações sobre assinaturas do Azure podem ser encontradas aqui. my-resource-group Da mesma forma, , deve my-datastore ser substituído por nome do grupo de recursos, nome do espaço de trabalho e nome do armazenamento de dados, my-workspace respectivamente. path_to_image deve ser o caminho completo para a imagem no armazenamento de dados.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 |
Detalhes da imagemOptional, 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 imagemOptional, String or Positive Integer |
"499px" or 499 |
height |
Altura da imagemOptional, 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 direitaRequired, 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 delimitadoraRequired, String |
"cat" |
topX |
Proporção de x coordenada do canto superior esquerdo da caixa delimitadora e largura da imagemRequired, 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 imagemRequired, Float in the range [0,1] |
0.406 |
bottomX |
Proporção de x coordenada do canto inferior direito da caixa delimitadora e largura da imagemRequired, Float in the range [0,1] |
0.735 |
bottomY |
Proporção da coordenada y do canto inferior direito da caixa delimitadora e altura da imagemRequired, 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": "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}]}
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, por exemplo, segmentação.
{
"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"]]
}
]
}
Chave | Description | Exemplo |
---|---|---|
image_url |
Localização da imagem no armazenamento de dados do Azure Machine Learning. my-subscription-id precisa ser substituída pela assinatura do Azure onde as imagens estão localizadas. Mais informações sobre assinaturas do Azure podem ser encontradas aqui. my-resource-group Da mesma forma, , deve my-datastore ser substituído por nome do grupo de recursos, nome do espaço de trabalho e nome do armazenamento de dados, my-workspace respectivamente. path_to_image deve ser o caminho completo para a imagem no armazenamento de dados.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 |
Detalhes da imagemOptional, Dictionary |
"image_details":{"format": "jpg", "width": "400px", "height": "258px"} |
format |
Tipo de imagemOptional, 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 imagemOptional, String or Positive Integer |
"499px" or 499 |
height |
Altura da imagemOptional, 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áscaraRequired, String |
"cat" |
isCrowd |
Indica se a máscara está ao redor da multidão de objetosOptional, Bool |
0 |
polygon |
Coordenadas de polígono para o objetoRequired, 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": "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 ]]}]}
Esquema de dados para pontuação online
Nesta seção, documentamos o formato de dados de entrada necessário para fazer previsões usando um modelo implantado.
Formato de entrada
O JSON a seguir é o formato de entrada necessário para gerar previsões em qualquer tarefa usando o ponto de extremidade do modelo específico da tarefa.
{
"input_data": {
"columns": [
"image"
],
"data": [
"image_in_base64_string_format"
]
}
}
Este json é um dicionário com chave input_data
externa e chaves columns
internas, data
conforme descrito na tabela a seguir. O ponto de extremidade aceita uma cadeia de caracteres json no formato acima e a converte em um dataframe de amostras exigidas pelo script de pontuação. Cada imagem de entrada na request_json["input_data"]["data"]
seção do json é uma cadeia de caracteres codificada em base64.
Chave | Description |
---|---|
input_data (chave exterior) |
É uma chave externa na solicitação json. input_data é um dicionário que aceita amostras de imagens de entrada Required, Dictionary |
columns (chave interna) |
Nomes de colunas a serem usados para criar dataframe. Ele aceita apenas uma coluna com image o nome da coluna.Required, List |
data (chave interna) |
Lista de imagens codificadas base64 Required, List |
Depois de implantarmos o modelo mlflow, podemos usar o seguinte trecho de código para obter previsões para todas as tarefas.
# 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,
)
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.
Os esquemas a seguir são aplicáveis quando a solicitação de entrada contém uma imagem.
Classificação de imagens (binária/multiclasse)
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. visualizations
e attributions
estão relacionados com a explicabilidade e quando o pedido é apenas para pontuação, estas chaves não serão incluídas na saída. Para obter mais informações sobre o esquema de entrada e saída de explicabilidade para classificação de imagens, consulte a seção Explicabilidade para classificação de imagens.
[
{
"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. visualizations
e attributions
estão relacionados com a explicabilidade e quando o pedido é apenas para pontuação, estas chaves não serão incluídas na saída. Para obter mais informações sobre o esquema de entrada e saída de explicabilidade para classificação de vários rótulos, consulte a seção Explicabilidade para classificação de imagem multirótulo.
[
{
"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.
[
{
"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.
[
{
"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
]
]
}
]
}
]
Formato de dados para pontuação e explicabilidade online (XAI)
Importante
Essas configurações estão atualmente em visualização pública. Eles são fornecidos sem um acordo 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.
Aviso
A explicabilidade é suportada apenas para classificação multiclasse e classificação multirótulo. Ao gerar explicações no ponto de extremidade online, se você encontrar problemas de tempo limite, use o bloco de anotações de pontuação em lote (SDK v1) para gerar explicações.
Nesta seção, documentamos o formato de dados de entrada necessário para fazer previsões e gerar explicações para a(s) classe(s) prevista(s) usando um modelo implantado. Não há nenhuma implantação separada necessária para explicabilidade. O mesmo ponto final para pontuação on-line pode ser utilizado para gerar explicações. Só precisamos passar alguns parâmetros adicionais relacionados à explicabilidade no esquema de entrada e obter visualizações de explicações e/ou matrizes de pontuação de atribuição (explicações em nível de pixel).
Métodos de explicabilidade suportados:
- XRAI (xrai)
- Gradientes integrados (integrated_gradients)
- GradCAM guiado (guided_gradcam)
- BackPropagation guiado (guided_backprop)
Formato de entrada (XAI)
Os seguintes formatos de entrada são suportados para gerar previsões e explicações sobre qualquer tarefa de classificação usando o ponto de extremidade do modelo específico da tarefa. Depois de implantar o modelo, podemos usar o esquema a seguir para obter previsões e explicações.
{
"input_data": {
"columns": ["image"],
"data": [json.dumps({"image_base64": "image_in_base64_string_format",
"model_explainability": True,
"xai_parameters": {}
})
]
}
}
Junto com a imagem, há dois parâmetros extras (model_explainability
e xai_parameters
) necessários no esquema de entrada para gerar explicações.
Chave | Description | Valor Predefinido |
---|---|---|
image_base64 |
imagem de entrada no formato base64Required, String |
- |
model_explainability |
Seja para gerar explicações ou apenas a pontuaçãoOptional, Bool |
False |
xai_parameters |
Se model_explainability é True, então xai_parameters é um dicionário contendo parâmetros relacionados ao algoritmo de explicabilidade com xai_algorithm , visualizations , attributions ask keys. Optional, Dictionary Se xai_parameters não for aprovado, o algoritmo de xrai explicabilidade será usado com seu valor padrão |
{"xai_algorithm": "xrai", "visualizations": True, "attributions": False} |
xai_algorithm |
Nome do algoritmo de explicabilidade a ser usado. Os algoritmos XAI suportados são {xrai , integrated_gradients , guided_gradcam , guided_backprop }Optional, String |
xrai |
visualizations |
Se deseja retornar visualizações de explicações. Optional, Bool |
True |
attributions |
Se as atribuições de recursos devem ser retornadas. Optional, Bool |
False |
confidence_score_threshold_multilabel |
Limiar de pontuação de confiança para selecionar as melhores classes para gerar explicações na classificação multi-label. Optional, Float |
0.5 |
A tabela a seguir descreve os esquemas suportados para explicabilidade.
Type | Esquema |
---|---|
Inferência em imagem única no formato base64 | Dicionário com image_base64 como chave e valor é base64 imagem codificada, model_explainability chave com True ou False e xai_parameters dicionário com parâmetros específicos do algoritmo XAI Required, Json String Works for one or more images |
Cada imagem de entrada no request_json
, definido no código abaixo, é uma cadeia de caracteres codificada em base64 anexada à lista 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)
Formato de saída (XAI)
As previsões feitas nos pontos de extremidade do modelo seguem esquemas diferentes, dependendo do tipo de tarefa. Esta seção descreve os formatos de dados de saída para tarefas de classificação de imagem multiclasse e multirótulo.
Os esquemas a seguir são definidos para o caso de duas imagens de entrada.
Classificação de imagens (binária/multiclasse)
O esquema de saída é o mesmo descrito acima , exceto que visualizations
e attributions
os valores de chave são incluídos, se essas chaves foram definidas como True
na solicitação.
Se model_explainability
, visualizations
, attributions
são definidos como True
na solicitação de entrada, então a saída terá visualizations
e attributions
. Mais detalhes sobre esses parâmetros são explicados na tabela a seguir. As visualizações e atribuições são geradas em relação a uma classe que tem a pontuação de probabilidade mais alta.
Chave de saída | Description |
---|---|
visualizations |
Imagem única no formato de cadeia de caracteres base64 com tipo Optional, String |
attributions |
Matriz multidimensional com pontuações de forma de atribuição de pixel sábio [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]]]
}
]
Classificação de imagem multi-rótulo
A única diferença no esquema de saída da classificação multi-label em comparação com a classificação multi-classe é que pode haver várias classes em cada imagem para as quais as explicações podem ser geradas. Assim, visualizations
é a lista de cadeias de caracteres de imagem base64 e attributions
é a lista de pontuações de atribuição em relação a cada classe selecionada com base no confidence_score_threshold_multilabel
(padrão é 0,5).
Se model_explainability
, visualizations
, attributions
são definidos como True
na solicitação de entrada, então a saída terá visualizations
e attributions
. Mais detalhes sobre esses parâmetros são explicados na tabela a seguir. Visualizações e atribuições são geradas contra todas as classes que têm o escore de probabilidade maior ou igual a confidence_score_threshold_multilabel
.
Chave de saída | Description |
---|---|
visualizations |
Lista de imagens no formato de cadeia de caracteres base64 com tipo Optional, String |
attributions |
Lista de matrizes multidimensionais com pontuações de atribuição em pixel wise em relação a cada classe, onde cada matriz multidimensional tem forma [3, valid_crop_size, valid_crop_size] Optional, List |
Aviso
Ao gerar explicações sobre o endpoint online, certifique-se de selecionar apenas algumas classes com base na pontuação de confiança para evitar problemas de tempo limite no endpoint ou usar o endpoint com o tipo de instância GPU. Para gerar explicações para um grande número de classes na classificação de vários rótulos, consulte o bloco de anotações de pontuação em lote (SDK v1).
[
{
"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]]],
.
.
.
]
}
]
Deteção de objetos
Aviso
XAI não é suportado. Assim, apenas as pontuações são devolvidas. Para obter um exemplo de pontuação, consulte a seção de pontuação online.
Segmentação de instâncias
Aviso
XAI não é suportado. Assim, apenas as pontuações são devolvidas. Para obter um exemplo de pontuação, consulte a seção de pontuação online.
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.