Azure 机器学习 - 使用自动化机器学习训练计算机视觉模型的数据架构
目录
- 一、用于训练的数据架构
- 图像分类(二进制/多类)
- 多标签图像分类
- 对象检测
- 实例分段
- 二、用于联机评分的数据架构
- 输入格式
- 输出格式
- 图像分类(二进制/多类)
- 多标签图像分类
- 对象检测
- 实例分段
- 在线评分和可解释性 (XAI) 的数据格式
- 支持的可解释性方法:
- 输入格式 (XAI)
- 输出格式 (XAI)
- 图像分类(二进制/多类)
- 多标签图像分类
- 对象检测
- 实例分段
了解如何设置Azure Machine Learning JSONL 文件格式,以便在训练和推理期间在计算机视觉任务的自动化 ML 实验中使用数据。
关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人。
一、用于训练的数据架构
Azure 机器学习的图像 AutoML 要求以 JSONL(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" |
多类图像分类的 JSONL 文件示例:
{"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"] |
多标签图像分类的 JSONL 文件示例:
{"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"]}
对象检测
下面是用于对象检测的示例 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_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 |
用于对象检测的 JSONL 文件示例:
{"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}]}
实例分段
对于实例分段,自动化 ML 仅支持多边形作为输入和输出,不支持掩码。
下面是实例分段的示例 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]] |
实例分段的 JSONL 文件示例:
{"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 字符串,并将其转换为评分脚本所需的示例的数据帧。 Json 的 request_json["input_data"]["data"]
部分中的每个输入图像都是 base64 编码字符串。
密钥 | 说明 |
---|---|
input_data | |
(外部键) | 它是 json 请求中的外部键。 input_data 是接受输入图像示例的字典 |
Required, Dictionary | |
columns | |
(内部键) | 用于创建数据帧的列名。 它仅接受一个列名为 image 的列。 |
Required, List | |
data | |
(内部键) | Base64 编码图像列表 |
Required, List |
部署 mlflow 模型后,我们可以使用以下代码段来获取所有任务的预测。
# Create request json
import base64sample_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 jsonrequest_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) 的数据格式
本部分阐述了在使用部署的模型时进行预测并为预测的类生成解释所需的输入数据格式。 无需单独部署即可生成解释。 在线评分的相同终结点可用于生成解释。 我们只需要在输入架构中传递一些额外的可解释性相关参数即可获得解释和/或属性分数矩阵(像素级解释)的可视化效果。
支持的可解释性方法:
- XRAI (xrai)
- 集成渐变 (integrated_gradients)
- 引导式 GradCAM (guided_gradcam)
- 引导式反向传播 (guided_backprop)
输入格式 (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 为键。 | |
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
中的每个输入图像(在以下代码中定义)都是附加到列表 request_json["input_data"]["data"]
的 base64 编码字符串:
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
和 attributions
设置为 True
,则输出将具有 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
和 attributions
设置为 True
,则输出将具有 visualizations
和 attributions
。 下表解释了有关这些参数的更多详细信息。 针对概率分数大于或等于 confidence_score_threshold_multilabel
的所有类生成可视化和属性。
输出键 | 说明 |
---|---|
visualizations | base64 字符串格式的图像列表,类型为 |
Optional, String | |
attributions | 多维数组列表,其中包含每个类的像素级属性分数,每个多维数组的形状为 [3, valid_crop_size, valid_crop_size] |
Optional, List |
警告
在联机终终结点上生成解释时,请确保仅根据置信度分数选择几个类,以避免终结点上出现超时问题,或者将终结点与 GPU 实例类型一起使用。 要生成多标签分类中大量类的说明,请参阅批量评分笔记本 (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]]],...]}
]
对象检测
警告
XAI 不受支持。 因此只返回分数。 有关评分示例,请参阅[在线评分部分]。
实例分段
警告
XAI 不受支持。 因此只返回分数。 有关评分示例,请参阅[在线评分部分]。
关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人。
相关文章:

Azure 机器学习 - 使用自动化机器学习训练计算机视觉模型的数据架构
目录 一、用于训练的数据架构图像分类(二进制/多类)多标签图像分类对象检测实例分段 二、用于联机评分的数据架构输入格式输出格式图像分类(二进制/多类)多标签图像分类对象检测实例分段 在线评分和可解释性 (XAI) 的数据格式支持…...

STM32F4X SDIO(九) 例程讲解-SD卡擦除、读写
STM32F4X SDIO (九) 例程讲解-SD卡擦除、读写 例程讲解-SD卡擦除、读写SD卡擦除CMD32:ERASE_WR_BLK_START命令发送命令响应 CMD33:ERASE_WR_BLK_END命令发送命令响应CMD38:ERASE命令响应 CMD13:SD_CMD_SEND_STATUS命令发送命令回应 SD卡读数据CMD16:SET_…...

【机器学习范式】监督学习,无监督学习,强化学习, 半监督学习,自监督学习,迁移学习,对比分析+详解与示例代码
目录 1. 监督学习 (Supervised Learning): 2. 无监督学习 (Unsupervised Learning): 3. 强化学习 (Reinforcement Learning): 4. 半监督学习 (Semi-Supervised Learning): 5. 自监督学习 (Self-Supervised Learning): 6. 迁移学习 (Transfer Learning): 7 机器学习范式应…...

JUC包下面的四大天王+线程池部分知识
一)Semphore:限流器用我就对了 Java中信号量Semphore是把操作系统原生的信号量封装了一下,本质就是一个计数器,描述了 可用资源的个数,主要涉及到两个操作 如果计数器为0了,继续Р操作,就会出现阻塞等待的情况 P操作:申…...
AGV系统控制位置管理功能
# ファイル: agv_locattion.py # 説明: AGV (Automated Guided Vehicle) の位置情報を管理し、UDPサーバーとして動作するGUIアプリケーションです。 # 必要なライブラリをインポート import tkinter as tk import socket import threading def AGV_handle_submit(canvas, st…...

JavaScript从入门到精通系列第三十三篇:详解正则表达式语法(二)
文章目录 一:正则表达式 1: 检查一个字符串中是否有. 2:第二种关键表达 3:第三种关键表达 编辑4:第四种关键表达 5:第五种关键表达 6:第六种关键表达 二:核心表达二 1&am…...

由于找不到 d3dx9_43.dll,无法继续执行代码。重新安装程序可能会解决此问题
电脑出现d3dx9_43.dll缺失的问题,通常是由于DirectX组件未安装或损坏导致的。为了解决这个问题,我为您提供了以下四个解决方法: d3dx9_43.dll解决方法1. 使用dll修复程序修复 首先,使用系统文件程序dll进行修复操作非常简单&…...
AI全栈大模型工程师(二十一)LangChain和SemanticKernel怎么选
LangChain 和 Semantic Kernel 怎么选? #%% md 划重点: 两者都值得学C#、JavaScript 和 Java 现在没得选做原型,首选 LangChain。功能多,开发快做产品,还是 SK 长期更可依赖建议只用 SK 的 Connectors 和 Plugins 能力…...

npm install 报错 chromedriver 安装失败的解决办法
npm install chromedriver --chromedriver_cdnurlhttp://cdn.npm.taobao.org/dist/chromedriver...
C语言--每日五道选择题--Day6
第一题 1、声明以下变量,则表达式: ch/i (f*d – i) 的结果类型为( ) char ch; int i; float f; double d; A: char B: int C: float D: double 答案及解析 D 基本数据类型的等级从低到高如下:char-> int-> long-> f…...
element-ui 封装 表格
一、封装表格组件 <template><el-table :data"list" :default-sort"{ prop: date }" style"width: 100%"><template v-for"item in tableColumn"><el-table-columnv-if"item.filters":prop"item…...

数据的使用、表关系的创建、Django框架的请求生命周期流程图
目录 一、数据的增删改查 1. 用户列表的展示 2. 修改数据的逻辑分析 3. 删除功能的分析 二、如何创建表关系 三、Django的请求生命周期流程图 一、数据的增删改查 1. 用户列表的展示 把数据表中得用户数据都给查询出来展示在页面上 查询数据 def userlist(request):&qu…...

Python基础教程:类--继承和方法的重写
嗨喽,大家好呀~这里是爱看美女的茜茜呐 什么是继承 继承就是让类与类之间产生父子关系,子类可以拥有父类的静态属性和方法 继承就是可以获取到另一个类中的静态属性和普通方法(并非所有成员) 在python中,新建的类可…...
Three.js提供了多种类型的灯光
Three.js提供了多种类型的灯光,包括环境光、点光源、平行光源和聚光灯。这些灯光可以用来照亮场景中的物体,使其看起来更加真实。 环境光(AmbientLight):环境光会均匀地照亮场景中的所有物体,没有方向,不能用来投射阴…...
精通Nginx(10)-负载均衡
负载均衡就是将前端过来的负载分发到两台或多台应用服务器。Nginx支持多种协议的负载均衡,包括http(s)、TCP、UDP(关于TCP、UDP负载均衡另文讲述)等。 目录 HTTP负载均衡 负载均衡策略 轮询 least_conn(最少连接) hash(通用哈希) ip_hash(IP 哈希) random(随…...

Hls学习(一)
1:CPU、DSP、GPU都算软件可编程的硬件 2:dsp在递归方面有所减弱,在递归方面有所增强,比如递归啊等,GPU可以同时处理多个进程,对于大块数据,流处理比较适用 3:为了提高运算量处理更多…...

Maven打包引入本地依赖包
Maven打包引入本地依赖包 SpringBoot 工程,Maven 在构建项目时,如何引入本地 Jar 包? 适合场景: 引用的依赖不在 Maven 仓库第三方公司提供的 SDK 包Maven 内网离线开发引入被定制改动过的 Jar 包 解决方法: 在 I…...
Docker常用命令及部署微服务项目
Docker常用命令及部署微服务项目 1、Docker常用命令 1、设置Yum源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 2、安装docker yum -y install docker-ce 3、启动docker service docker start 4、验证 docker version 5…...
okhttp添加公共参数
在项目开发中很多时候后台都会给一些全局的公共入参,比如携带手机信息或者时间戳等字段。而我们在使用okhttp时,就需要我们单独就行二次封装处理了,对于请求全局参数,每次请求都要去写一次,那是肯定不行的。 所以就要我…...

基于SpringBoot的SSMP整合案例(开启日志与分页查询条件查询功能实现)
开启事务 导入Mybatis-Plus框架后,我们可以使用Mybatis-Plus自带的事务,只需要在配置文件中配置即可 使用配置方式开启日志,设置日志输出方式为标准输出mybatis-plus:global-config:db-config:table-prefix: tb_id-type: autoconfiguration:…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...

家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...

ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...

Unity中的transform.up
2025年6月8日,周日下午 在Unity中,transform.up是Transform组件的一个属性,表示游戏对象在世界空间中的“上”方向(Y轴正方向),且会随对象旋转动态变化。以下是关键点解析: 基本定义 transfor…...