Windows 10 c++ 中 onnx 模型 (opset11) 的推断?

Inference of onnx model (opset11) in Windows 10 c++?

为了通过 WinML 使用我的自定义 TF 模型,我使用 tf2onnx 转换器将其转换为 onnx。转换最终使用 opset 11 进行。不幸的是我无法在 WinRT c++ 库中加载模型,因此我对 opset 支持感到困惑:根据发行说明,5 月最新的 WinML 版本支持 opset 11。我更新了我的 VS2019 和下载了最新的 Windows 10 SDK,c++ API 是否已经包含最新的 onnx 支持?或者是否有其他方法可以在 WinML c++ 中使用我的模型?

最新版本 Windows OS 包含对 opset 9 的支持。 Microsoft.AI.MachineLearning NuGet 包的最新版本包含对 opset 11 的支持。

请参阅这些发行说明:https://docs.microsoft.com/en-us/windows/ai/windows-ml/release-notes

您可以在此处找到最新的 Microsoft.AI.MachineLearning NuGet 包:https://www.nuget.org/packages/Microsoft.AI.MachineLearning/

如@Kookei 所述,有两种构建 WinML 的方法:the "In-Box" way and the NuGet way

In-Box 基本上只是意味着 link 到 Windows 本身包含的任何 WinML DLL(例如,在 C:\Window\System32).

NuGet 包包含自己更新的一组 DLL,除了提供对最新 ONNX opset 的支持外,还有一个明显的优势,即允许您轻松地将二进制文件分发到旧版本的 Windows任何 built-in 机器学习能力。只需通过 Visual Studio 的 Nuget 包管理器安装包,然后构建您的解决方案;您会发现输出目录现在包含所需的 DLL(当前为 directml.dllMicrosoft.AI.MachineLearning.dllonnxruntime.dll)以及生成的 EXE,准备好进行 same-folder 部署。

源码方面,两个版本是这样的distinguished:

In-Box:

#include <winrt/Windows.AI.MachineLearning.h>
using WinMLModel = winrt::windows::AI::MachineLearning

NuGet:

#include <winrt/Microsoft.AI.MachineLearning.h>
using WinMLModel = winrt::Microsoft::AI::MachineLearning

换句话说,唯一的区别是你使用 Window 还是 Microsoft header/namespace。

您还可以在 version matrix table 中跟踪支持的 opset 版本。