使用 ML.NET 和 Windows 机器学习进行图像分类

Image classification flow

本指南将介绍如何训练神经网络模型以使用 ML.NET Model Builder 对食物图像进行分类,将模型导出为 ONNX 格式,以及在 Windows 设备本地运行的 Windows 机器学习应用程序中部署模型。 无需具备机器学习方面的专业知识,我们将逐步指导你完成整个过程。

如果想要了解如何使用 ML.NET Model Builder 构建和训练模型,可以继续学习训练模型

如果已有模型且想了解如何从头开始创建 WinML 应用,请导航到完整的 WinML 应用教程

如果想获得 WinML 应用的预定义解决方案,可以克隆解决方案文件并立即对其进行测试。

场景

在本教程中,我们将创建在 Windows 设备中运行的机器学习食物分类应用程序。 将对模型进行训练以识别某些类型的图案,从而对食物图像进行分类,如果给定了图像,则将返回分类标记和该分类的关联百分比置信度值。

模型训练的先决条件

若要构建和训练模型,你将使用 Visual Studio 中的 ML.NET Model Buider。

  • 需要 Visual Studio 2019 16.6.1 或更高版本才能使用 ML.NET Model Builder。 可在此处获取 Visual Studio
  • 你需要一个 Azure 帐户,以在 Azure ML 工作区中使用 ML.NET Model Builder 训练模型。 如果刚刚开始接触 Azure,则可以注册一个 Azure 免费帐户

注意

想要详细了解 Azure 注册选项和 Azure 免费帐户? 请参阅创建 Azure 帐户

ML.NET Model Builder 是一个直观的图形化 Visual Studio 扩展,用于构建、训练和部署自定义机器学习模型。 它使用自动机器学习 (AutoML) 来探索不同的机器学习算法和设置,以帮助你找到最适合自身场景的算法和设置。

当你安装其中一个 .NET 工作负载时,ML.NET Model Builder 随 Visual Studio 版本 16.6.1 或更高版本一起提供。 下载或修改 Visual Studio 时,请确保在安装程序中选中 ML.NET Model Builder 组件。 要检查 VS 是否具有 ML.NET Model Builder 组件,请转到“扩展”并选择“管理扩展”。 在搜索栏中键入“Model Builder”以查看扩展结果。

Model builder extension

ML.NET Model Builder 目前是一项预览功能。 因此,为了使用该工具,必须在 Visual Studio 中转到“工具”>“选项”>“环境”>“预览功能”并启用 ML.NET Model Builder:

Enable the model builder extension

注意

想要详细了解 ML.NET Model Builder 及其支持的不同场景? 请查看 Model Builder 文档

Windows ML 应用部署的先决条件

若要创建和部署 Widows ML 应用,需要以下各项:

  • Windows 10 版本 1809(内部版本 17763)或更高版本。 可以查看内部版本号,方法是通过 Run 命令 (Windows logo key + R) 运行 winver
  • 适用于内部版本 17763 或更高版本的 Windows SDK。 可在此处获取 SDK。
  • Visual Studio 2019 版本 16.6.1 或更高版本。 可在此处获取 Visual Studio
  • Windows ML 代码生成器 (mlgen) Visual Studio 扩展。 下载适用于 VS 2019 的扩展。
  • 如果决定创建 UWP 应用,则需要在 Visual Studio 中启用通用 Windows 平台开发工作负载。
  • 还需要在电脑上启用开发人员模式

注意

Windows ML API 内置于最新版本的 Windows 10(1809 或更高版本)和 Windows Server 2019。 如果目标平台是较早版本的 Windows,可以将 WinML 应用移植到可再发行的 NuGet 包(Windows 8.1 或更高版本)

准备数据

机器学习模型必须使用现有数据进行训练。 在本指南中,你将使用来自 Kaggle 开放数据集的食物图像数据集。 该数据集在公共领域许可下分发。

重要

要使用该数据集,需要遵守 Kaggle 网站的使用条款和 Food-11 数据集本身附带的许可条款。 Microsoft 对该网站或该数据集不提供任何保证或陈述。

该数据集分为三个部分(评估、训练和验证),包含 16643 张食物图像,这些图像分为 11 个主要食物类别。 每一类食物数据集中的图像都放在一个单独的文件夹中,这使得你可以更加方便地训练模型。

请在此处下载数据集。 请注意,数据集大小约为 1 GB,系统可能会要求你在 Kaggle 网站上创建一个帐户以下载数据。

Food image dataset

如有需要,可以使用任何其他相关图像数据集。 作为最低要求,我们建议在初始训练集中每个标记使用至少 30 张图像。 此外还需要收集一些额外的图像,以便在训练后测试模型。

此外,请确保所有训练图像都满足以下条件:

  • .jpg、.png、.bmp 或 .gif 格式。
  • 大小不超过 6 MB(预测图像大小为 4 MB)。
  • 最短的边不小于 256 像素;任何小于此像素的图像都将通过自定义视觉服务自动纵向扩展。

后续步骤

现在,你已准备好必备项和数据集,接下来便可以开始创建 WinML 模型。 在下一部分,你将使用 ML.NET Model Builder 来创建和训练分类模型。