Windows 版 ONNX Runtime 入门
ONNX Runtime Nuget 包提供了使用完整的 WinML API 的能力。这使得可以将来自连接摄像头的 Windows.Media.VideoFrame 直接传递到运行时进行实时推理。
WinML API 是一个 WinRT API,从构建版本 1809 (RS5) 开始在 Windows OS 中随附,位于 Windows.AI.MachineLearning 命名空间下。它嵌入了一个版本的 ONNX Runtime。
除了使用内置版本的 WinML,WinML 还可以作为应用程序可再分发包进行安装(有关技术细节,请参阅Direct ML Windows)。
目录
Windows 操作系统集成
ONNX Runtime 在 Windows 10 版本 >= 1809 及所有 Windows 11 版本中可用。它嵌入在 Windows.AI.MachineLearning.dll 中,并通过 WinRT API(简称 WinML)公开。它包括 CPU 执行提供者和用于 GPU 支持的 DirectML 执行提供者。
高层设计如下所示
API 选择
您可以选择使用 WinRT API 或 C API。
WinRT | C API | |
---|---|---|
类型系统 | 与 Windows RT 类型集成 | 平台中立类型 |
语言支持 | 通过 WinRT Projection 提供语言支持 | 通过各语言 Projection 提供语言支持 |
张量化 | 接受 VideoFrames 并转换为张量(支持 CPU 和 GPU) | 接受张量 |
将 NuGet WinRT API 与其他 C-API 分发版一起使用
WinRT API NuGet 包与特定版本的 ONNX Runtime 一起分发,但应用程序可以包含自己的 ONNX Runtime 版本(可以是发布版本,也可以是自定义构建版本)。您可能希望这样做以使用非默认的执行提供者。要使用您自己的 ONNX Runtime 版本,请将 onnxruntime.dll 替换为您想要的版本。
支持的版本
Windows 8.1 及更高版本
构建版本
Artifact (构建产物) | 描述 | 支持的平台 |
---|---|---|
Microsoft.AI.MachineLearning | WinRT - CPU, GPU (DirectML) | Windows 8.1 及更高版本 |
API 参考
示例
任何已为 Windows.AI.MachineLearning API 编写的代码都可以轻松修改,以便针对 Microsoft.ML.OnnxRuntime 包运行。最初通过 Windows 命名空间引用的所有类型都需要更新为使用 Microsoft 命名空间。
我应该使用内置 WinML 版本还是 NuGet WinML 版本?
有关比较,请参阅Windows Machine Learning:内置 WinML 解决方案 vs NuGet WinML 解决方案。
要检测特定 Windows OS 版本是否具有 WinML API,请使用 IsApiContractPresent 方法。这可以从 UWP 或原生应用中调用。
如果操作系统没有您需要的运行时,您可以切换使用可再分发二进制文件。
版本 | API 契约版本 |
---|---|
Windows OS 1809 | 1 |
Windows OS 1903 | 2 |
Windows OS 1909 | 2 |
ORT 版本 1.2 | 3 |
ORT 版本 1.3 | 3 |
ORT 版本 1.4 | 3 |
有关 Windows OS 分发版中 opsets 和 ONNX 版本详情的更多信息,请参阅此处。