在 Azure 中使用 Model Builder 训练图像分类模型

了解如何在 Azure 中使用 Model Builder 训练用于从卫星图像将土地使用情况分类的图像分类模型。

本教程介绍如何创建 C# 类库,以便使用 Model Builder 根据卫星图像将土地使用情况分类。

本教程介绍以下操作:

  • 准备和了解数据
  • 创建 Model Builder 配置文件
  • 选择方案
  • 加载数据
  • 在 Azure 中创建试验
  • 定型模型
  • 评估模型
  • 使用模型

先决条件

Model Builder 图像分类概述

本示例创建一个 C# 类库,该类库使用在 Azure 上用 Model Builder 训练的深度学习模型从地图卫星图像对土地使用情况进行分类。 有关本教程中的源代码,请访问 dotnet/machinelearning-samples GitHub 存储库

创建 C# 类库

创建一个名为“LandUse”的 C# 类库。

准备和了解数据

注意

本教程的数据来源于:

  • Eurosat: A novel dataset and deep learning benchmark for land use and land cover classification. Patrick Helber, Benjamin Bischke, Andreas Dengel, Damian Borth. IEEE Journal of Selected Topics in Applied Earth Observations and Remote Sensing, 2019.
  • Introducing EuroSAT: A Novel Dataset and Deep Learning Benchmark for Land Use and Land Cover Classification. Patrick Helber, Benjamin Bischke, Andreas Dengel. 2018 IEEE International Geoscience and Remote Sensing Symposium, 2018.

EuroSAT 数据集包含一组卫星图像,其中分为十个类别(农村、工业用地、河流等)。 原始数据集包含 27,000 张图像。 为方便起见,本教程仅使用其中的 2,000 张图像。

数据集

  1. 下载 EuroSAT 数据集的子集,并将其保存在计算机上的任意位置。
  2. 将其解压缩。

创建 Model Builder 配置文件

首次将 Model Builder 添加到解决方案时,它会提示你创建一个 mbconfig 文件。 该 mbconfig 文件跟踪你在 Model Builder 中所执行的所有操作,以允许你重新打开会话。

  1. 在解决方案资源管理器中,右键单击“LandUse”项目,然后选择“添加”>“机器学习模型…”。
  2. 在对话框中,将 Model Builder 项目命名为 LandUse,然后单击“添加” 。

选择方案

模型生成器方案界面

为了训练模型,需要从模型生成器提供的可用机器学习方案列表中进行选择。

本示例的任务是图像分类。 在 Model Builder 工具的“方案”步骤中,选择“图像分类”方案。

选择环境

Model Builder 可以根据选择的方案在不同的环境中运行训练。

选择“Azure”作为环境,然后单击“设置工作区”按钮 。

在 Azure 中创建试验

Azure 机器学习试验是一项资源,需要先生成它才能在 Azure 上运行模型生成器训练。

试验会封装一次或多次机器学习训练运行的配置和结果。 试验属于特定工作区。 第一次创建试验时,将在该工作区中注册其名称。 如果任何后续运行使用相同的试验名称,则该运行将记录为同一试验的一部分。 否则会创建新试验。

在“创建新试验”对话框中,从“订阅”下拉菜单选择你的订阅。

创建工作区

工作区是一项 Azure 机器学习资源,它为在运行过程中创建的所有 Azure 机器学习资源和项目提供了一个中心位置。

  1. 在“创建新试验”对话框中,选择“机器学习工作区名称”下拉菜单旁边的“新建”链接 。

  2. 在“创建新工作区”对话框中,在“机器学习工作区名称”文本框中键入“landuse-wkspc”。

  3. 从“区域”下拉菜单中选择“美国东部” 。 区域是工作区和资源部署到的数据中心的地理位置。 建议选择靠近你或你的客户的位置。

  4. 选择“资源组”下拉列表旁边的“新建”链接 。

    1. 在“创建新资源组”对话框中,在“资源组名称”文本框中键入“landuse-rg”。
    2. 选择“确定”。
  5. 从“资源组”下拉列表中选择新创建的资源组。

  6. 选择“创建”。

    预配过程需要几分钟。 向 Azure 提出预配以下云资源的请求:

    • Azure 机器学习工作区
    • Azure 存储帐户
    • Azure Application Insights
    • Azure 容器注册表
    • Azure Key Vault
  7. 预配过程完成后,从“创建新试验”对话框的“机器学习工作区名称”下拉菜单中选择新创建的工作区。

创建计算

Azure 机器学习计算是基于云的 Linux VM,用于训练。

  1. 在“创建新试验”对话框中,选择“计算名称”下拉菜单旁边的“新建”链接 。
  2. 在“创建新计算”对话框中,在“计算名称”文本框中键入“landuse-cpt”。
  3. 从“计算大小”下拉菜单中选择“Standard_NC24” 。 Model Builder 使用 GPU 优化的计算类型。 有关 GPU 优化计算类型的更多详细信息,请访问 NC 系列 Linux VM 文档
  4. 选择“创建”。 预配计算资源可能需要几分钟时间。
  5. 预配过程完成后,从“创建新试验”对话框的“计算名称”下拉菜单中选择新创建的工作区。
  6. 选择“下一步”按钮以加载数据。

加载数据

  1. 在 Model Builder 工具的数据步骤中,选择“选择文件夹”文本框旁边的按钮。
  2. 使用文件资源管理器浏览并选择包含图像的解压缩目录。
  3. 在 Model Builder 工具中选择“下一步”按钮以进入下个步骤。

定型模型

在 Azure 上训练仅适用于模型生成器图像分类方案。 用于训练这些模型的算法是基于 ResNet50 体系结构的深度神经网络。 在模型训练过程中,Model Builder 使用 ResNet50 算法和设置训练各个模型,以便为数据集找到性能最佳的模型。

开始训练

配置工作区和计算类型后,就可以完成试验创建和开始训练。

  1. 单击“开始训练”按钮。

    训练过程需要一定的时间,并且根据所选计算的大小和数据量,所需时间可能会有所不同。 第一次对模型进行训练时,由于必须预配资源,训练时间可能稍长。 可以在 Visual Studio 中选择“监视 Azure 门户中的当前运行”链接以跟踪运行进度。

    在训练过程中,进度数据显示在训练步骤中的“进度”部分。

    • “状态”显示训练进程的完成状态。
    • “最高准确性”显示截至目前由模型生成器找到的性能最佳的模型的准确性。 准确性越高,意味着模型对测试数据的预测越准确。
    • “算法”显示截至目前由 Model Builder 找到的性能最佳的算法的名称。
  2. 训练完成后,选择“下一步”按钮进入评估模型步骤。

评估模型

培训步骤的成果将是一个具备最佳性能的模型。 在 Model Builder 工具的评估步骤中,“输出”部分的“详细信息”选项卡将包含“算法”条目中性能最佳的模型所使用的算法,以及“最佳模型”详细信息中“准确度”条目中的指标 。

如果你对准确度指标不满意,尝试提高模型准确度的一些简单方法包括使用更多的数据或增加现有的数据。 否则,选择“下一步”按钮,进入 Model Builder 工具中的最后一步。

(可选)使用模型

此步骤将包含可用于使用模型的项目模板。 这是一个可选步骤,你可以选择最适合你对如何处理模型的需求的方法。

  • 控制台应用
  • Web API

控制台应用

将控制台应用添加到解决方案时,系统会提示你为该项目命名。

  1. 将控制台项目命名为“LandUse_Console”。

  2. 单击“添加到解决方案”以将项目添加到当前的解决方案中。

  3. 运行应用程序。

    该程序生成的输出应类似于下面的代码段:

    Predicted Label value: AnnualCrop
    
    Predicted Label scores: [0.9941197,3.3146807E-06,4.4344174E-06,0.000101028825,7.763133E-06,0.0015898133,0.0040994748,1.6308518E-06,6.265567E-05,1.0236401E-05]
    

Web API

将 Web API 添加到解决方案时,系统会提示你为该项目命名。

  1. 将 Web API 项目命名为“LandUse_API”。

  2. 单击“添加到解决方案”以将项目添加到当前的解决方案中。

  3. 运行该应用程序。

  4. 打开 PowerShell,并输入以下代码(其中,PORT 是应用程序正在侦听的端口)。

    $body = @{
         ImageSource = <Image location on your local machine>
    }
    
     Invoke-RestMethod "https://localhost:<PORT>/predict" -Method Post -Body ($body | ConvertTo-Json) -ContentType "application/json"
    
  5. 如果成功,输出文本应如下所示。

    output1                                           prediction score
    -------                                           ---------- -----
    {9.508701, -3.1025503, -2.8115153, 0.31449434...} AnnualCrop {0.9941197, 3.3146807E-06, 4.4344174E-06, 0.00010102882...
    

清理资源

如果不再打算使用创建的 Azure 资源,请将其删除。 这可避免对仍在运行中但未使用的资源付费。

  1. 导航到 Azure 门户并在门户菜单中选择“资源组”。
  2. 从资源组列表中选择你创建的资源组。 在本例中选择“landuse-rg”。
  3. 选择“删除资源组”。
  4. 在文本框中键入资源组名称“landuse”,然后按 Enter 键。

后续步骤

本教程介绍了如何:

  • 准备和了解数据
  • 创建 Model Builder 配置文件
  • 选择方案
  • 加载数据
  • 在 Azure 中创建试验
  • 定型模型
  • 评估模型
  • 使用模型

尝试其他 Model Builder 方案: