设置 AutoML 以训练计算机视觉模型

适用范围:Azure CLI ml 扩展 v2(最新版)Python SDK azure-ai-ml v2(最新版)

本文介绍如何使用自动化 ML 基于图像数据训练计算机视觉模型。 可以使用 Azure 机器学习 CLI 扩展 v2 或 Azure 机器学习 Python SDK v2 训练模型。

自动化 ML 支持将模型训练用于图像分类、物体检测和实例分段等计算机视觉任务。 目前支持通过 Azure 机器学习 Python SDK 为计算机视觉任务创作 AutoML 模型。 可以从 Azure 机器学习工作室 UI 访问生成的试验试用、模型和输出。 详细了解用于基于图像数据的计算机视觉任务的自动化 ML

先决条件

适用于:Azure CLI ml 扩展 v2(当前版本)

选择任务类型

用于图像的自动化 ML 支持以下任务类型:

任务类型 AutoML 作业语法
图像分类 CLI v2:image_classification
SDK v2:image_classification()
多标签图像分类 CLI v2:image_classification_multilabel
SDK v2:image_classification_multilabel()
图像物体检测 CLI v2:image_object_detection
SDK v2:image_object_detection()
图像实例分段 CLI v2:image_instance_segmentation
SDK v2:image_instance_segmentation()

适用于:Azure CLI ml 扩展 v2(当前版本)

此任务类型是所需的参数,可以使用 task 键进行设置。

例如:

task: image_object_detection

训练和验证数据

若要生成计算机视觉模型,需要以 MLTable 的形式引入标记的图像数据作为模型训练的输入。 可以从 JSONL 格式的训练数据创建一个 MLTable

如果你的训练数据采用不同的格式(例如 pascal VOC 或 COCO),则可以应用示例笔记本中包含的帮助程序脚本,以将数据转换为 JSONL。 详细了解如何使用自动化 ML 为计算机视觉任务准备数据

注意

训练数据需要至少有 10 张图像才能提交 AutoML 作业。

警告

仅支持使用 SDK 和 CLI 从 JSONL 格式的数据创建 MLTable 以实现该功能。 目前不支持通过 UI 创建 MLTable

JSONL 架构示例

TabularDataset 的结构取决于手头的任务。 对于计算机视觉任务类型,TabularDataset 由以下字段组成:

字段 说明
image_url 包含文件路径作为 StreamInfo 对象
image_details 图像元数据信息由高度、宽度和格式组成。 此字段是可选的,因此可能存在,也可能不存在。
label 图像标签的 json 表示形式,基于任务类型。

以下代码是用于图像分类的示例 JSONL 文件:

{
      "image_url": "azureml://subscriptions/<my-subscription-id>/resourcegroups/<my-resource-group>/workspaces/<my-workspace>/datastores/<my-datastore>/paths/image_data/Image_01.png",
      "image_details":
      {
          "format": "png",
          "width": "2230px",
          "height": "4356px"
      },
      "label": "cat"
  }
  {
      "image_url": "azureml://subscriptions/<my-subscription-id>/resourcegroups/<my-resource-group>/workspaces/<my-workspace>/datastores/<my-datastore>/paths/image_data/Image_02.jpeg",
      "image_details":
      {
          "format": "jpeg",
          "width": "3456px",
          "height": "3467px"
      },
      "label": "dog"
  }

以下代码是用于物体检测的示例 JSONL 文件:

{
    "image_url": "azureml://subscriptions/<my-subscription-id>/resourcegroups/<my-resource-group>/workspaces/<my-workspace>/datastores/<my-datastore>/paths/image_data/Image_01.png",
    "image_details":
    {
        "format": "png",
        "width": "2230px",
        "height": "4356px"
    },
    "label":
    {
        "label": "cat",
        "topX": "1",
        "topY": "0",
        "bottomX": "0",
        "bottomY": "1",
        "isCrowd": "true",
    }
}
{
    "image_url": "azureml://subscriptions/<my-subscription-id>/resourcegroups/<my-resource-group>/workspaces/<my-workspace>/datastores/<my-datastore>/paths/image_data/Image_02.png",
    "image_details":
    {
        "format": "jpeg",
        "width": "1230px",
        "height": "2356px"
    },
    "label":
    {
        "label": "dog",
        "topX": "0",
        "topY": "1",
        "bottomX": "0",
        "bottomY": "1",
        "isCrowd": "false",
    }
}

使用数据

在数据采用 JSONL 格式后,就可以创建训练和验证 MLTable,如下所示。

paths:
  - file: ./train_annotations.jsonl
transformations:
  - read_json_lines:
        encoding: utf8
        invalid_lines: error
        include_path_column: false
  - convert_column_types:
      - columns: image_url
        column_type: stream_info

自动化 ML 不会对计算机视觉任务的训练或验证数据大小施加任何限制。 最大数据集大小仅受数据集后的存储层(例如 blob 存储)的限制。 图像或标签没有最小数量限制。 但是,我们建议最初为每个标签至少提供 10-15 个样本,以确保输出模型得到充分训练。 标签/类的总数越大,每个标签所需的样本越多。

适用于:Azure CLI ml 扩展 v2(当前版本)

训练数据是必需的参数,将使用 training_data 键来传入。 可以选择使用 validation_data 键指定另一个 MLtable 作为验证数据。 如果未指定验证数据,则默认将使用 20% 的训练数据来进行验证,除非传递了具有不同值的 validation_data_size 参数。

目标列名称是所需的参数,用作受监督 ML 任务的目标。 使用 target_column_name 键来传入它。 例如,

target_column_name: label
training_data:
  path: data/training-mltable-folder
  type: mltable
validation_data:
  path: data/validation-mltable-folder
  type: mltable

用于运行试验的计算环境

提供计算目标,以便自动化 ML 执行模型训练。 用于计算机视觉任务的自动化 ML 模型要求使用 GPU SKU 并支持 NC 和 ND 系列。 建议使用 NCsv3 系列(具有 v100 GPU)以加快训练速度。 使用多 GPU VM SKU 的计算目标利用多个 GPU 来加快训练速度。 此外,在设置具有多个节点的计算目标的过程中,可以在优化模型的超参数时,通过并行度来更快地执行模型训练。

注意

如果使用计算实例作为计算目标,请确保多个 AutoML 作业不会同时运行。 此外,请确保在作业限制中将 max_concurrent_trials 设置为 1。

计算目标是使用 compute 参数传入的。 例如:

适用于:Azure CLI ml 扩展 v2(当前版本)

compute: azureml:gpu-cluster

配置试验

对于计算机视觉任务,你可以启动单独试用手动扫描自动扫描。 我们建议从自动扫描开始,以获取第一个基线模型。 然后,你可以使用某些模型和超参数配置尝试单独试用。 最后,通过手动扫描,可以在更有希望的模型和超参数配置附近探索多个超参数值。 这种三步式工作流(自动扫描、单独试用、手动扫描)可避免搜索整个超参数空间,这样会导致超参数数量呈指数级增长。

自动扫描可为许多数据集产生有竞争力的结果。 此外,无需掌握模型体系结构方面的高级知识即可使用它们,它们考虑到了超参数相关性,并且可跨不同的硬件设置无缝工作。 所有这些原因使它们成了试验过程早期阶段的有利选择。

主要指标

AutoML 训练作业使用主要指标进行模型优化和超参数优化。 主要指标取决于任务类型,如下所示;目前不支持其他主要指标值。

作业限制

可以通过在限制设置中为作业指定 timeout_minutesmax_trialsmax_concurrent_trials 来控制在 AutoML 图像训练作业上花费的资源,如以下示例所述。

参数 详细信息
max_trials 要扫描的最大试用数量的参数。 必须是介于 1 到 1000 之间的整数。 仅探索给定模型体系结构的默认超参数时,请将此参数设置为 1。 默认值为 1。
max_concurrent_trials 可以并发运行的最大试用数。 如果指定了此项,则必须是 1 和 100 之间的整数。 默认值为 1。

注意:
  • 并发试用数根据指定计算目标中的可用资源进行限制。 请确保计算目标能够为所需的并发性提供足够的可用资源。
  • 在内部,max_concurrent_trials 的最大值为 max_trials。 例如,如果用户设置 max_concurrent_trials=4max_trials=2,则会在内部将值更新为 max_concurrent_trials=2max_trials=2
  • timeout_minutes 在试验终止之前所花的时间(以分钟为单位)。 如果未指定,则默认试验 timeout_minutes 为 7 天(最大值为 60 天)

    适用于:Azure CLI ml 扩展 v2(当前版本)

    limits:
      timeout_minutes: 60
      max_trials: 10
      max_concurrent_trials: 2
    

    自动扫描模型超参数 (AutoMode)

    重要

    此功能目前处于公开预览状态。 此预览版不附带服务级别协议。 某些功能可能不受支持或者受限。 有关详细信息,请参阅适用于 Azure 预览版的补充使用条款

    很难预测数据集的最佳模型体系结构和超参数。 此外,在某些情况下,分配到优化超参数的人工时间可能有限。 对于计算机视觉任务,你可指定任意尝试次数,系统会自动确定要扫描的超参数空间区域。 无需定义超参数搜索空间、采样方法或提前终止策略。

    触发 AutoMode

    可以通过在 limits 中将 max_trials 设置为大于 1 的值并且不指定搜索空间、采样方法和终止策略来运行自动扫描。 我们将此功能称为 AutoMode;请查看下面的示例。

    适用于:Azure CLI ml 扩展 v2(当前版本)

    limits:
      max_trials: 10
      max_concurrent_trials: 2
    

    对于许多数据集来说,尝试次数介于 10 到 20 之间可能效果很好。 仍可以设置 AutoML 作业的时间预算,但我们建议仅在每次试运行可能需要很长时间时才这样做。

    警告

    目前不支持通过 UI 启动自动扫描。

    单独试用

    在单独试用中,你可以直接控制模型体系结构和超参数。 通过 model_name 参数传递模型体系结构。

    支持的模型体系结构

    下表汇总了每个计算机视觉任务支持的模型。

    任务 模型体系结构 字符串字面量语法
    default_model* 用 * 表示
    图像分类
    (多类和多标签)
    MobileNet:适用于移动应用程序的轻型模型
    ResNet:残差网络
    ResNeSt:拆分注意力网络
    SE-ResNeXt50:压缩奖惩网络
    ViT:视觉变换器网络
    mobilenetv2
    resnet18
    resnet34
    resnet50
    resnet101
    resnet152
    resnest50
    resnest101
    seresnext
    vits16r224(小)
    vitb16r224*(基本)
    vitl16r224(大)
    对象检测 YOLOv5:单阶段物体检测模型
    Faster RCNN ResNet FPN:双阶段物体检测模型
    RetinaNet ResNet FPN:使用聚焦损失函数解决类不平衡问题

    注意:有关 YOLOv5 模型大小,请参阅 model_size 超参数
    yolov5*
    fasterrcnn_resnet18_fpn
    fasterrcnn_resnet34_fpn
    fasterrcnn_resnet50_fpn
    fasterrcnn_resnet101_fpn
    fasterrcnn_resnet152_fpn
    retinanet_resnet50_fpn
    实例分段 MaskRCNN ResNet FPN maskrcnn_resnet18_fpn
    maskrcnn_resnet34_fpn
    maskrcnn_resnet50_fpn*
    maskrcnn_resnet101_fpn
    maskrcnn_resnet152_fpn

    除了控制模型体系结构之外,还可以优化用于模型训练的超参数。 虽然公开的许多超参数与模型无关,但在某些情况下,超参数特定于任务或特定于模型。 详细了解这些实例的可用超参数

    适用于:Azure CLI ml 扩展 v2(当前版本)

    如果要针对给定体系结构(例如 yolov5)使用默认超参数值,可以在 training_parameters 节中使用 model_name 键来指定它。 例如,

    training_parameters:
        model_name: yolov5
    

    手动扫描模型超参数

    在训练计算机视觉模型时,模型性能在很大程度上取决于所选的超参数值。 你经常需要优化超参数以获得最佳性能。 对于计算机视觉任务,可以扫描超参数以找到模型的最佳设置。 此功能将应用 Azure 机器学习中的超参数优化功能。 了解如何优化超参数

    适用于:Azure CLI ml 扩展 v2(当前版本)

    search_space:
      - model_name:
          type: choice
          values: [yolov5]
        learning_rate:
          type: uniform
          min_value: 0.0001
          max_value: 0.01
        model_size:
          type: choice
          values: [small, medium]
    
      - model_name:
          type: choice
          values: [fasterrcnn_resnet50_fpn]
        learning_rate:
          type: uniform
          min_value: 0.0001
          max_value: 0.001
        optimizer:
          type: choice
          values: [sgd, adam, adamw]
        min_size:
          type: choice
          values: [600, 800]
    

    定义参数搜索空间

    可以定义模型体系结构和超参数,以便在参数空间中扫描。 可以指定单个模型体系结构,也可以指定多个模型体系结构。

    扫描的采样方法

    扫描超参数时,需要指定用于扫描所定义的参数空间的采样方法。 目前,sampling_algorithm 参数支持以下采样方法:

    采样类型 AutoML 作业语法
    随机采样 random
    网格采样 grid
    贝叶斯采样 bayesian

    注意

    目前只有随机采样和网格采样支持条件性超参数空间。

    提前终止策略

    可以使用提前终止策略自动终止性能不佳的试用。 提前终止可提高计算效率,节省原本会花费在不太有效的试用上的计算资源。 用于图像的自动化 ML 支持以下使用 early_termination 参数的提前终止策略。 如果未指定终止策略,则所有试用将运行到完成为止。

    提前终止策略 AutoML 作业语法
    老虎机策略 CLI v2:bandit
    SDK v2:BanditPolicy()
    中间值停止策略 CLI v2:median_stopping
    SDK v2:MedianStoppingPolicy()
    截断选择策略 CLI v2:truncation_selection
    SDK v2:TruncationSelectionPolicy()

    详细了解如何为超参数扫描配置提前终止策略

    注意

    有关完整的扫描配置示例,请参阅此教程

    可配置与扫描相关的所有参数,如以下示例所示。

    适用于:Azure CLI ml 扩展 v2(当前版本)

    sweep:
      sampling_algorithm: random
      early_termination:
        type: bandit
        evaluation_interval: 2
        slack_factor: 0.2
        delay_evaluation: 6
    

    固定设置

    可以传递在参数空间扫描期间保持不变的固定设置或参数,如以下示例所示。

    适用于:Azure CLI ml 扩展 v2(当前版本)

    training_parameters:
      early_stopping: True
      evaluation_frequency: 1
    

    数据增强

    一般情况下,深度学习模型的性能通常可以随着数据的增加而提高。 数据增强是一种放大数据集的数据大小和可变性的实用技术,有助于防止过度拟合,并提高模型对不可见数据的泛化能力。 在将输入图像馈送到模型之前,自动化 ML 将根据计算机视觉任务应用不同的数据增强技术。 目前未公开任何超参数来控制数据增强。

    任务 受影响的数据集 应用的数据增强技术
    图像分类(多类和多标签) 培训


    验证和测试
    随机调整大小和裁剪、水平翻转、颜色抖动(亮度、对比度、饱和度和色调)、使用通道范围 ImageNet 的平均值和标准偏差进行规范化


    调整大小、中心裁剪、规范化
    物体检测、实例分段 培训

    验证和测试
    围绕边界框随机裁剪、展开、水平翻转、规范化、调整大小


    规范化、调整大小
    使用 yolov5 进行物体检测 培训

    验证和测试
    马赛克、随机仿射(旋转、平移、缩放、剪切)、水平翻转


    上下黑边调整大小

    上面定义的扩充目前默认应用于映像作业的自动化 ML。 为了提供对扩充的控制,映像的自动化 ML 公开以下两个标志以关闭某些扩充。 目前仅对象检测和实例分段任务支持这些标志。

    1. apply_mosaic_for_yolo: 此标志仅特定于 Yolo 模型。 将其设置为 False 会关闭在训练时应用的马赛克数据增强。
    2. apply_automl_train_augmentations:将此标志设置为 false 会关闭在训练期间为对象检测和实例分段模型应用的扩充。 请参阅上表中列出的详细信息以了解扩充。
      • 对于非 yolo 对象检测模型和实例分段模型,此标志仅关闭前三个增强。 例如:在边界框周围随机裁剪、扩展、水平翻转。 无论此标志如何,都会应用规范化和调整大小扩充。
      • 对于 Yolo 模型,此标志会关闭随机仿射和水平翻转扩充。

    这两个标志通过 training_parameters 下的 advanced_settings 得到支持,且可以通过以下方式对它们进行控制。

    适用于:Azure CLI ml 扩展 v2(当前版本)

    training_parameters:
      advanced_settings: >
        {"apply_mosaic_for_yolo": false}
    
    training_parameters:
      advanced_settings: >
        {"apply_automl_train_augmentations": false}
    

    请注意,这两个标志是相互独立的,可通过以下设置组合使用。

    training_parameters:
     advanced_settings: >
       {"apply_automl_train_augmentations": false, "apply_mosaic_for_yolo": false}
    

    我们在试验中发现这些扩充有助于提高模型的通用性。 因此,关闭这些扩充时,我们建议用户将其与其他脱机扩充相结合以达到更好的效果。

    增量训练(可选)

    训练作业完成后,可以选择通过加载已训练的模型检查点来进一步训练模型。 可以使用同一数据集或不同数据集进行增量训练。 如果对模型感到满意,可以选择停止训练并使用当前模型。

    通过作业 ID 传递检查点

    可以传递要从中加载检查点的作业 ID。

    适用于:Azure CLI ml 扩展 v2(当前版本)

    training_parameters:
      checkpoint_run_id : "target_checkpoint_run_id"
    

    提交 AutoML 作业

    适用于:Azure CLI ml 扩展 v2(当前版本)

    若要提交 AutoML 作业,请运行以下 CLI v2 命令,其中包含 .yml 文件路径、工作区名称、资源组和订阅 ID。

    az ml job create --file ./hello-automl-job-basic.yml --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]
    

    输出和评估指标

    自动化 ML 训练作业会生成输出模型文件、评估指标、日志和部署项目(例如评分文件和环境文件)。 可以从子作业的输出和日志及指标选项卡中查看这些文件和指标。

    提示

    查看作业结果部分了解如何导航到作业结果。

    有关为每次作业提供的性能图表和指标的定义和示例,请参阅评估自动化机器学习试验结果

    注册和部署模型

    作业完成后,可以注册从最佳试用(产生了最佳主要指标的配置)创建的模型。 可以在下载后注册模型,也可以通过指定具有相应 jobid 的 azureml 路径来注册模型。 注意:如果要更改下文所述的推理设置,需要下载模型并更改 settings.json,然后使用更新后的模型文件夹进行注册。

    获取最佳试用

    适用于:Azure CLI ml 扩展 v2(当前版本)

    CLI example not available, please use Python SDK.
    

    注册模型

    使用 azureml 路径或本地下载的路径注册模型。

    适用于:Azure CLI ml 扩展 v2(当前版本)

     az ml model create --name od-fridge-items-mlflow-model --version 1 --path azureml://jobs/$best_run/outputs/artifacts/outputs/mlflow-model/ --type mlflow_model --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]
    

    注册要使用的模型后,可以使用托管联机终结点 deploy-managed-online-endpoint 进行部署

    配置联机终结点

    适用于:Azure CLI ml 扩展 v2(当前版本)

    $schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
    name: od-fridge-items-endpoint
    auth_mode: key
    

    创建终结点

    使用前面创建的 MLClient 在工作区中创建终结点。 此命令会启动终结点创建操作,并在终结点创建操作继续时返回确认响应。

    适用于:Azure CLI ml 扩展 v2(当前版本)

    az ml online-endpoint create --file .\create_endpoint.yml --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]
    

    配置联机部署

    部署是一组资源,用于承载执行实际推理的模型。 我们将使用 ManagedOnlineDeployment 类为终结点创建一个部署。 可为部署群集使用 GPU 或 CPU VM SKU。

    适用于:Azure CLI ml 扩展 v2(当前版本)

    name: od-fridge-items-mlflow-deploy
    endpoint_name: od-fridge-items-endpoint
    model: azureml:od-fridge-items-mlflow-model@latest
    instance_type: Standard_DS3_v2
    instance_count: 1
    liveness_probe:
        failure_threshold: 30
        success_threshold: 1
        timeout: 2
        period: 10
        initial_delay: 2000
    readiness_probe:
        failure_threshold: 10
        success_threshold: 1
        timeout: 10
        period: 10
        initial_delay: 2000 
    

    创建部署

    使用之前创建的 MLClient,我们现在将在工作区中创建部署。 此命令将启动部署创建操作,并在部署创建操作继续时返回确认响应。

    适用于:Azure CLI ml 扩展 v2(当前版本)

    az ml online-deployment create --file .\create_deployment.yml --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]
    

    更新流量:

    默认情况下,当前部署设置为接收 0% 流量。 可以设置当前部署应接收的流量百分比。 使用一个终结点的所有部署接收的流量百分比总和不应超过 100%。

    适用于:Azure CLI ml 扩展 v2(当前版本)

    az ml online-endpoint update --name 'od-fridge-items-endpoint' --traffic 'od-fridge-items-mlflow-deploy=100' --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]
    

    或者,可以从 Azure 机器学习工作室 UI 部署模型。 在自动化 ML 作业的“模型”选项卡中导航到要部署的模型,选择“部署”,然后选择“部署到实时终结点”。

    Screenshot of how the Deployment page looks like after selecting the Deploy option.

    此处展示的审阅页面。 我们可以为当前部署选择实例类型、实例计数并设置流量百分比。

    Screenshot of how the top of review page looks like after selecting the options to deploy.Screenshot of how the bottom of review page looks like after selecting the options to deploy.

    更新推理设置

    在上一步中,我们从最佳模型下载了一个文件 mlflow-model/artifacts/settings.json。 该文件可用于在注册模型之前更新推理设置。 不过还是建议使用训练期间所用的参数以获得最佳性能。

    每个任务(和某些模型)都有一组参数。 默认情况下,我们将为参数使用在训练和验证期间所用的相同值。 根据使用模型进行推理时所需的行为,我们可以更改这些参数。 在下面可以找到每个任务类型和模型的参数列表。

    任务 参数名称 默认
    图像分类(多类和多标签) valid_resize_size
    valid_crop_size
    256
    224
    对象检测 min_size
    max_size
    box_score_thresh
    nms_iou_thresh
    box_detections_per_img
    600
    1333
    0.3
    0.5
    100
    使用 yolov5 进行物体检测 img_size
    model_size
    box_score_thresh
    nms_iou_thresh
    640

    0.1
    0.5
    实例分段 min_size
    max_size
    box_score_thresh
    nms_iou_thresh
    box_detections_per_img
    mask_pixel_score_threshold
    max_number_of_polygon_points
    export_as_image
    image_type
    600
    1333
    0.3
    0.5
    100
    0.5
    100
    False
    JPG

    若要详细了解特定于任务的超参数,请参阅自动化机器学习中计算机视觉任务的超参数

    如果你要使用平铺并想要控制平铺行为,可使用以下参数:tile_grid_sizetile_overlap_ratiotile_predictions_nms_thresh。 有关这些参数的更多详细信息,请查看使用 AutoML 训练小物体检测模型

    测试部署

    若要测试部署并可视化模型中的检测,请查看此测试部署部分。

    生成预测解释

    重要

    这些设置目前以公共预览版提供。 它们不附带服务级别协议。 某些功能可能不受支持或者受限。 有关详细信息,请参阅适用于 Azure 预览版的补充使用条款

    警告

    模型可解释性仅支持多类分类和多标签分类。

    将可解释 AI (XAI) 与 AutoML 结合用于图像的一些优势:

    • 提高复杂视觉模型预测的透明度
    • 帮助用户理解输入图像中有助于模型预测的重要特征/像素
    • 帮助排查模型问题
    • 帮助发现偏差

    说明

    解释是根据输入图像中每个像素对模型预测的贡献指定的特征属性或权重。 每个权重可为负(与预测负相关)或为正(与预测正相关)。 这些属性是根据预测的类计算的。 对于多类分类,每个样本只生成一个大小为 [3, valid_crop_size, valid_crop_size] 的归因矩阵,而对于多标签分类,会为每个样本的每个预测标签/类都生成大小为 [3, valid_crop_size, valid_crop_size] 的归因矩阵。

    在部署的终结点上使用用于图像的 AutoML 中的可解释 AI,用户可以获得每个图像的解释(叠加在输入图像上的属性)和/或属性(大小为 [3, valid_crop_size, valid_crop_size] 的多维数组)的可视化效果。 除了可视化效果之外,用户还可以获得属性矩阵以更好地控制解释(例如使用属性生成自定义可视化效果或审查属性分段)。 所有解释算法都使用大小为 valid_crop_size 的裁剪正方形图像来生成归因。

    可以从联机终结点或批处理终结点生成解释。 部署完成后,可以利用此终结点生成预测解释。 在联机部署中,请确保将 request_settings = OnlineRequestSettings(request_timeout_ms=90000) 参数传递给 ManagedOnlineDeployment 并将 request_timeout_ms 设置为其最大值,以避免在生成解释时出现超时问题(请参阅注册和部署模型部分)。 xrai 等某些可解释性 (XAI) 方法会占用更多时间(特别是对于多标签分类,因为我们需要针对预测的每个标签生成属性和/或可视化效果)。 因此,我们建议使用任何 GPU 实例以更快获得解释。 有关用于生成解释的输入和输出架构的详细信息,请参阅架构文档

    我们在用于图像的 AutoML 中支持以下先进的可解释性算法:

    下表描述了 XRAI 和集成渐变的可解释性算法特定的优化参数。 引导式反向传播和引导式 gradcam 不需要任何优化参数。

    XAI 算法 算法特定的参数 默认值
    xrai 1. n_steps:求近似值方法使用的步数。 步数越大,属性(解释)的近似度越高。 n_steps 的范围为 [2, inf),但属性的性能在 50 步后开始收敛。
    Optional, Int

    2. xrai_fast:是否使用更快的 XRAI 版本。 如果为 True,则解释的计算时间更快,但会导致解释(属性)的准确度更低
    Optional, Bool
    n_steps = 50
    xrai_fast = True
    integrated_gradients 1. n_steps:求近似值方法使用的步数。 步数越大,属性(解释)越好。 n_steps 的范围为 [2, inf),但属性的性能在 50 步后开始收敛。
    Optional, Int

    2. approximation_method:求整数近似值的方法。 可用的求近似值方法是 riemann_middlegausslegendre
    Optional, String
    n_steps = 50
    approximation_method = riemann_middle

    XRAI 算法在内部使用集成渐变。 因此,集成渐变和 XRAI 算法都需要 n_steps 参数。 步数越大,就需要占用越多的时间来求解释的近似值,这可能导致联机终结点出现超时问题。

    我们建议依次使用 XRAI > 引导式 GradCAM > 集成渐变 > 引导式反向传播算法以获得更好的解释,并依次使用引导式反向传播 > 引导式 GradCAM > 集成渐变 > XRAI 以更快地获得解释。

    对联机终结点的示例请求如下所示。 当 model_explainability 设置为 True 时,此请求会生成解释。 以下请求使用具有 50 个步骤的更快版本的 XRAI 算法生成可视化效果和归因。

    import base64
    import json
    
    def read_image(image_path):
        with open(image_path, "rb") as f:
            return f.read()
    
    sample_image = "./test_image.jpg"
    
    # Define explainability (XAI) parameters
    model_explainability = True
    xai_parameters = {"xai_algorithm": "xrai",
                      "n_steps": 50,
                      "xrai_fast": True,
                      "visualizations": True,
                      "attributions": True}
    
    # 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)
    

    有关生成解释的详细信息,请参阅用于自动化机器学习的 GitHub 笔记本存储库示例

    解释可视化效果

    如果 model_explainabilityvisualizations 都设置为 True,则部署的终结点将返回 base64 编码的图像字符串。 按照笔记本中的说明解码 base64 字符串,或使用以下代码解码和可视化预测中的 base64 图像字符串。

    import base64
    from io import BytesIO
    from PIL import Image
    
    def base64_to_img(base64_img_str):
        base64_img = base64_img_str.encode("utf-8")
        decoded_img = base64.b64decode(base64_img)
        return BytesIO(decoded_img).getvalue()
    
    # For Multi-class classification:
    # Decode and visualize base64 image string for explanations for first input image
    # img_bytes = base64_to_img(predictions[0]["visualizations"])
    
    # For  Multi-label classification:
    # Decode and visualize base64 image string for explanations for first input image against one of the classes
    img_bytes = base64_to_img(predictions[0]["visualizations"][0])
    image = Image.open(BytesIO(img_bytes))
    

    下图描述了示例输入图像的解释可视化效果。 Screenshot of visualizations generated by XAI for AutoML for images.

    解码的 base64 图在 2 x 2 网格中有 4 个图像部分。

    • 左上角 (0, 0) 的图像是裁剪的输入图像
    • 右上角 (0, 1) 的图像是色标 bgyw(蓝绿黄白)的属性热度地图,其中白色像素对预测类别的贡献最高,蓝色像素最低。
    • 左下角 (1, 0) 的图像是裁剪的输入图像属性的混合热度地图
    • 右下角 (1, 1) 的图像是裁剪的输入图像,其中前 30% 的像素基于属性评分。

    解释属性

    如果 model_explainabilityattributions 都设置为 True,则部署的终结点将返回属性。 有关更多详细信息,请参阅多类分类和多标签分类笔记本

    这些属性为用户提供了更高控制度,以生成自定义可视化效果或审查像素级属性评分。 以下代码片段描述了一种使用属性矩阵生成自定义可视化效果的方式。 有关多类分类和多标签分类的属性架构的详细信息,请参阅架构文档

    使用所选模型的确切 valid_resize_sizevalid_crop_size 值生成解释(默认值分别为 256 和 224)。 以下代码使用 Captum 可视化功能生成自定义可视化效果。 用户可以利用任何其他库来生成可视化效果。 有关更多详细信息,请参阅 captum 可视化实用工具

    import colorcet as cc
    import numpy as np
    from captum.attr import visualization as viz
    from PIL import Image
    from torchvision import transforms
    
    def get_common_valid_transforms(resize_to=256, crop_size=224):
    
        return transforms.Compose([
            transforms.Resize(resize_to),
            transforms.CenterCrop(crop_size)
        ])
    
    # Load the image
    valid_resize_size = 256
    valid_crop_size = 224
    sample_image = "./test_image.jpg"
    image = Image.open(sample_image)
    # Perform common validation transforms to get the image used to generate attributions
    common_transforms = get_common_valid_transforms(resize_to=valid_resize_size,
                                                    crop_size=valid_crop_size)
    input_tensor = common_transforms(image)
    
    # Convert output attributions to numpy array
    
    # For Multi-class classification:
    # Selecting attribution matrix for first input image
    # attributions = np.array(predictions[0]["attributions"])
    
    # For  Multi-label classification:
    # Selecting first attribution matrix against one of the classes for first input image
    attributions = np.array(predictions[0]["attributions"][0])
    
    # visualize results
    viz.visualize_image_attr_multiple(np.transpose(attributions, (1, 2, 0)),
                                      np.array(input_tensor),
                                      ["original_image", "blended_heat_map"],
                                      ["all", "absolute_value"],
                                      show_colorbar=True,
                                      cmap=cc.cm.bgyw,
                                      titles=["original_image", "heatmap"],
                                      fig_size=(12, 12))
    

    大型数据集

    如果使用 AutoML 基于大型数据集进行训练,某些试验设置可能很有用。

    重要

    这些设置目前以公共预览版提供。 它们不附带服务级别协议。 某些功能可能不受支持或者受限。 有关详细信息,请参阅适用于 Azure 预览版的补充使用条款

    多 GPU 和多节点训练

    默认情况下,每个模型在单个 VM 上进行训练。 如果训练某个模型需要太多时间,使用包含多个 GPU 的 VM 可能有所帮助。 基于大型数据集训练模型所需的时间因使用的 GPU 数量增加而大致按线性比例减少。 (例如,在包含两个 GPU 的 VM 上训练某个模型的速度大约是在包含一个 GPU 的 VM 上训练的两倍。)如果在包含多个 GPU 的 VM 上训练模型的时间仍然很长,可以增加用于训练每个模型的 VM 数量。 与多 GPU 训练类似,基于大型数据集训练模型所需的时间也因使用的 VM 数量增加而大致按线性比例减少。 跨多个 VM 训练模型时,请务必使用支持 InfiniBand 的计算 SKU 以获得最佳结果。 可以通过设置 AutoML 作业的 node_count_per_trial 属性来配置用于训练单个模型的 VM 数量。

    适用于:Azure CLI ml 扩展 v2(当前版本)

    properties:
      node_count_per_trial: "2"
    

    从存储中流式传输图像文件

    默认情况下,所有图像文件会在模型训练之前下载到磁盘。 如果图像文件的大小大于可用磁盘空间,作业会失败。 可以选择在训练期间根据需要从 Azure 存储流式传输图像文件,而不是将所有图像下载到磁盘。 图像文件将绕过磁盘,直接从 Azure 存储流式传输到系统内存。 同时,会将存储中尽可能多的文件缓存在磁盘上,以尽量减少对存储发出的请求数。

    注意

    如果启用了流式传输,请确保 Azure 存储帐户与计算位于同一区域,以最大程度地降低成本和延迟。

    适用于:Azure CLI ml 扩展 v2(当前版本)

    training_parameters:
      advanced_settings: >
        {"stream_image_files": true}
    

    示例笔记本

    查看用于自动化机器学习的 GitHub 笔记本存储库示例中的详细代码示例和用例。 请查看具有“automl-image-”前缀的文件夹,获取特定于生成计算机视觉模型的示例。

    代码示例

    后续步骤