使用 Windows Machine Learning 加载 ONNX 模型并推理
Windows 平台提供了强大的机器学习推理引擎,允许开发者在 Windows 应用程序中直接加载并使用训练好的机器学习模型。本文将详细介绍如何在 UWP (Universal Windows Platform) 项目中集成 Windows Machine Learning 功能,加载 ONNX 格式的模型文件,并进行图像分类推理。
环境要求
Windows 10 从版本 10.0.17763.0 开始正式提供这套推理引擎(Windows ML)。因此,开发环境需要满足以下要求:
- 操作系统:必须运行在 Windows 10 版本 1809 (Build 17763) 或更高版本的设备上。
- 开发工具:推荐使用 Visual Studio 2017 Update 3 或更高版本(Visual Studio 2019/2022 亦可),确保安装了通用 Windows 平台 (UWP) 工作负载。
- SDK:安装 Windows 10 SDK 17763 或更新版本,以便访问相关的 API 和头文件。
- 硬件加速:虽然 CPU 可以运行推理,但为了获得最佳性能,建议设备支持 GPU 加速(DirectML 后端)。
创建 UWP 项目
- 打开 Visual Studio,选择'创建新项目'。
- 在模板搜索框中输入'空白应用',选择'空白应用 (通用 Windows)'模板。
- 填写项目名称为
ClassifyBear,点击确定。 - 在弹出的配置对话框中,设置目标版本和最低版本均为 17763 (Windows 10 1809),以确保兼容性。
- 点击'创建'完成项目初始化。
添加模型文件到项目中
模型文件通常以 .onnx 格式存在。我们需要将其添加到项目的资源目录中。
- 在解决方案资源管理器中,右键点击项目根目录下的
Assets文件夹。 - 选择'添加' -> '现有项',找到你的模型文件(例如
BearModel.onnx)并导入。 - 选中该模型文件,在属性窗口中修改以下设置:
- 生成操作:设置为
内容 - 复制到输出目录:设置为
如果较新则复制这确保了模型文件在编译时会被复制到应用的运行时目录中。
- 生成操作:设置为
自动生成模型封装代码
Windows ML 提供了一个命令行工具 mlgen.exe,可以根据 ONNX 模型自动生成 C# 封装类,简化输入输出的处理。
- 打开'VS 2017 的开发人员命令提示符'或对应的 VS Developer Command Prompt。
- 运行以下命令生成代码(注意路径不要包含中文或空格):
mlgen.exe -i d:\BearModel.onnx -o d:\BearModel.cs -l CS -n BearModel-i:指定 ONNX 模型路径。-o:指定生成的 C# 代码文件路径。-l:指定代码语言,此处为 CS (C#)。-n:指定生成的命名空间。
- 将生成的
BearModel.cs文件添加到项目中。 - 如果自动生成功能失败,请检查模型文件是否合法,路径是否包含特殊字符,并根据错误信息排查。
生成的 BearModel.cs 文件包含了模型的元数据、输入输出定义以及推理入口方法,极大地降低了集成难度。
设计界面
我们需要一个简单的用户界面来上传图片并显示识别结果。打开 MainPage.xaml,替换 Grid 内容如下:


