Windows 上的 ONNX Runtime 入門
ONNX Runtime Nuget 包提供了使用完整 WinML API 的能力。這使得將連線攝像頭的 Windows.Media.VideoFrame 直接傳遞到執行時進行即時推理等場景成為可能。
WinML API 是一個 WinRT API,從 Windows OS build 1809 (RS5) 開始在 Windows.AI.MachineLearning 名稱空間中隨 Windows 作業系統一起釋出。它內建了 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 投影提供語言支援 | 透過各語言投影提供語言支援 |
| 張量化 | 接受 VideoFrame 並轉換為張量(支援 CPU 和 GPU) | 接受張量 |
將 NuGet WinRT API 與其他 C-API 發行版一起使用
WinRT API NuGet 包隨 ONNX Runtime 的特定版本一起分發,但應用程式可以包含自己的 ONNX Runtime 版本(可以是釋出版本或自定義構建版本)。您可能希望這樣做以使用非預設的執行提供程式。要使用您自己的 ONNX Runtime 版本,請將 onnxruntime.dll 替換為您所需版本。
支援的版本
Windows 8.1+
構建版本
| 元件 | 描述 | 支援的平臺 |
|---|---|---|
| Microsoft.AI.MachineLearning | WinRT - CPU, GPU (DirectML) | Windows 8.1+ |
API 參考
示例
任何為 Windows.AI.MachineLearning API 編寫的程式碼都可以輕鬆修改,以針對 Microsoft.ML.OnnxRuntime 包執行。所有最初由內建客戶透過 Windows 名稱空間引用的型別,現在都需要更新為使用 Microsoft 名稱空間。
我應該使用內建的 WinML 版本還是 NuGet WinML 版本?
如需比較,請參閱 Windows 機器學習:內建版本與 NuGet WinML 解決方案。
要檢測特定 Windows 作業系統版本是否包含 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 作業系統發行版中 opset 和 ONNX 版本詳情的更多資訊,請參閱此處。