类似 Prisma 的实现方式

时间:2021-09-18 03:23:29

本次 Windows Developer Day,最值得等候的莫过于 Windows AI Platform 了,可以说是千呼万唤始出来。不雅观看直播的开发者们,留言最多的也是 Windows AI Platform。

下面结合微软供给的展示过程,文档和 Git Sample 来详细分析一下。

根本观点

根本认知

众所周知,目前 AI(Artificial Intelligence)的主要实现方法就是机器学习(Machine Learning),而 Windows AI Platform 对应的就是 Windows Machine Learning。

类似 Prisma 的实现方式

微软官方对付它的描述如下:

Windows Machine Learning (ML) evaluates trained machine learning models locally on Windows 10 devices, allowing developers to use pre-trained models within their applications. The platform provides hardware-accelerated performance by leveraging the device‘s CPU or GPU to compute evaluations for both classical Machine Learning algorithms and Deep Learning.

结合这一描述,我们可以简单总结出 Windows ML 的几个特点:

硬件加速  在撑持 DirectX12 的硬件设备上,Windows ML 可以操作 GPU 对模型的评估实现加速。

本地评估  Windows ML 可以操作本地硬件进行模型评估,减少了模型上传到云端造成的处事端流量本钱和处事端压力。可以更快速便捷的得到功效。

图像措置惩罚惩罚  在机器视觉场景,,Windows ML 简化并优化了图像、视频文件和视频流的措置惩罚惩罚,对输入源做预措置惩罚惩罚和摄像头管道措置惩罚惩罚。  

模型格局

Windows ML 的模型格局是 ONNX,Open Neural Network Exchange,是 Microsoft 和 Facebook、Amazon 等公司制定的机器学习模型文件格局标准。在目前很多主流模型训练框架中,都有 ONNX 的原生撑持,或者可以撑持其他格局转换为 ONNX 格局。 这里是 ONNX 的 Git 主页,大家可以详细了解:GitHub Open Neural Network Exchange

此外大家可以通过 WinMLTools 来把其他格局的模型文件转换为 ONNX 格局,这里是 WinMLTools 地点:Python WinMLTools 0.1.0.5072. 可以转换的格局有 Core ML/Scikit-Learn/XGBoost/LibSVM。

此外 ONNX 撑持赶过 100 种运算符,针对 CPU 或 GPU 有差此外运算符撑持,这里是运算符列表:https://github.com/onnx/onnx/blob/rel-1.0/docs/Operators.md

技术架构

类似 Prisma 的实现方式

从这张架构图来看:

底层是 Direct 层的 DirectML API/Direct3D/CPU/GPU,DirectX 的版本撑持是 DX12

上面一层是揣度引擎,包孕了 Win32 和 WinRT 部分,主要卖力模型和设备资源打点,卖力加载和编纂核心操纵符,执行数据流图

最上层是应用措施层,同样包孕了 Win32 和 WinRT 部分;令人欣喜的是,它在所有 2018 年的 Windows 版本上都可用

开发过程

概述

目前 Windows AI Platform 还是预览版内容,所以需要预览版的 Windows OS 和 WIndows 10 SDK,下面是下载地点:

Windows Insider Preview Downloads

此中 Visual Studio 的版本要求是 Community、Professional 或 Enterprise,Community 版本的获取最为简单,建议尝试性需求时使用这个版本。

先来看一张颁布会的展示图:

类似 Prisma 的实现方式

 

从上图中可以看出整个 Windows ML 的使用过程:

首先在云端或者本地处事器上训练模型,生成 ONNX 模型文件

把 ONNX 添加到本地开发环境,如 Visual Studio 中

在本地措施中通过 Windows 10 SDK 使用和评估 ONNX 模型的性能和学习功效

把集成了 ONNX 的本地措施颁布到 Windows 序列的全平台各类设备中

示例分析

Windows ML 的示例 Git 地点:GitHub Windows-Machine-Learning

上面的链接中也供给了 Windows Insider Preview 17110 OS、Windows 10 SDK 17110 和 Visual Studio 2017 的下载地点,凭据指示我下载安置好了开发环境。

来看第一个示例:MNIST_Demo,是一个手写数字识另外 UWP 措施,大家都知道,手写数字识别是 Machine Learning 的根本和入门课题,就像每种编程语言的 Hello World 一样,我们借这个示例来看一下 Windows ML 对付 ONNX 模型和 Windows 10 SDK 的使用过程。

首先来看一下示例在 Visual Studio 中的工程布局:

类似 Prisma 的实现方式

这里我们可以看到:

Universal Windows,也就是 Windows 10 SDK 的引用版本是:10.0.17110.0,也就是 Windows ML 撑持的最低版本预览版 SDK

mnist.onnx,也就是前面说明的 Windows ML 模型撑持格局,被直接添加到了解决方案中的 Assets 文件夹中,Build Action 为 “Content”

而在 mnist.cs 文件中