zoukankan      html  css  js  c++  java
  • Windows ML,系统内置的机器学习平台初探

    人工智能现在很火,虽然最近风头隐隐有被区块链盖过,但仍是未来技术转型的首选方向之一。作为AI核心的机器学习,目前也进化到了可以基于平台自动训练模型的地步,例如Azure Machine Learning Service和Google AutoML Service。这使得训练模型的难度大大降低,开发人员可以分出更多精力关注在训练好的模型应用上。

    在这种背景下,各个操作系统平台纷纷推出内置的机器学习框架/运行环境,iOS有CoreML,Android有TensorFlow。Windows在最近的RS4(build 1803)更新之后,也正式内置了机器学习平台- Windows ML

    Windows ML是什么?


    Windows ML是Windows全新的内置机器学习平台,用于本机执行预训练的机器学习模型,并提供了API允许我们快速集成到应用中。

    它的亮点如下:

    • 支持硬件加速

    在兼容DirectX 12的设备上可以直接使用GPU加速运算,确保机器学习模型可以被高效执行。

    • 本机执行

    不依赖于任何远程服务,不受任何网络连接限制,本机即可达到低延迟高性能的执行效果。

    • 图像处理优化

    针对计算机视觉场景,对视频、图像和相机数据统一预处理为VideoFrame形式,简化图像处理流程。

    模型要求


     

    Windows ML目前仅支持执行ONNX格式模型,其他格式需要预先转换后再使用。

    ONNX是由微软、Facebook和英特尔等公司推出的一个通用开放的机器学习模型格式,官方支持现有机器学习框架对其转换。ONNX项目地址

    支持转换的现有模型来源:

    • Core ML
    • Scikit-Learn
    • XGBoost
    • LibSVM

    使用的转换工具为微软提供的WinMLTools:https://pypi.org/project/winmltools/

    转换工具使用教程请参考官方文档:https://docs.microsoft.com/en-us/windows/uwp/machine-learning/conversion-samples 

    代码生成


     

    在安装了Windows SDK Build 17110或更新版本后,默认会为Visual Studio 2017项目添加模型代码生成工具mlgen.exe。它可以根据添加的ONNX模型文件,Visual Studio 2017 Preview自动生成C#/CX的定义文件,方便代码直接调用。

    这里以FNS-La-Muse模型为例,这是一个可以将图像转为特定风格的模型。

    生成的代码如下:

    using System;
    using System.Collections.Generic;
    using System.Threading.Tasks;
    using Windows.Media;
    using Windows.Storage;
    using Windows.AI.MachineLearning.Preview;
    
    // FNSLaMuse
    
    namespace Demo
    {
        public sealed class FNSLaMuseModelInput
        {
            public VideoFrame inputImage { get; set; }
        }
    
        public sealed class FNSLaMuseModelOutput
        {
            public VideoFrame outputImage { get; set; }
            public FNSLaMuseModelOutput()
            {
                this.outputImage = VideoFrame.CreateWithSoftwareBitmap(new Windows.Graphics.Imaging.SoftwareBitmap(Windows.Graphics.Imaging.BitmapPixelFormat.Bgra8, 720, 720));
            }
        }
    
        public sealed class FNSLaMuseModel
        {
            private LearningModelPreview learningModel;
            public static async Task<FNSLaMuseModel> CreateFNSLaMuseModel(StorageFile file)
            {
                LearningModelPreview learningModel = await LearningModelPreview.LoadModelFromStorageFileAsync(file);
                FNSLaMuseModel model = new FNSLaMuseModel();
                model.learningModel = learningModel;
                return model;
            }
            public async Task<FNSLaMuseModelOutput> EvaluateAsync(FNSLaMuseModelInput input) {
                FNSLaMuseModelOutput output = new FNSLaMuseModelOutput();
                LearningModelBindingPreview binding = new LearningModelBindingPreview(learningModel);
                binding.Bind("inputImage", input.inputImage);
                binding.Bind("outputImage", output.outputImage);
                LearningModelEvaluationResultPreview evalResult = await learningModel.EvaluateAsync(binding, string.Empty);
                return output;
            }
        }
    }
    View Code

     目前由于SDK仍在预览中,所以Visual Studio正式版并不会自动调用mlgen工具生成定义文件,需要手动执行如下命令:

    mlgen -i INPUT-FILE -l LANGUAGE -n NAMESPACE [-o OUTPUT-FILE]
    • INPUT-FILE: ONNX模型文件
    • LANGUAGE: C++或者C#
    • NAMESPACE: 命名空间
    • OUTPUT-FILE: 输出路径,可缺省

     总结


    有了Windows ML后我们可以实现以前难以实现的机器学习特性,同时不用依赖外部web service,很多创新的体验可以实现,不仅仅是在PC,甚至在HoloLens上同样可以运用机器学习的能力。

    最后给大家安利下我的开源项目- Awesome WindowsML ONNX Models ,这个项目除了提供我已经验证过的模型外,还提供了CoreML模型的快速转换工具。

     

     同时我也在开发为HoloLens编写的Demo,最近将会和大家见面

  • 相关阅读:
    H5新特性---Web Worker---Web Stroage
    H5新特性---SVG--椭圆--直线--文本--滤镜(高斯滤镜--模糊)--地理定位
    H5新特性——--第三方绘图工具库 echarts(canvas)---SVG绘图
    H5新特性-canvas绘图--渐变对象路径(最复杂)--图片--变形操作
    H5新特性-视频,音频-Flash-canvas绘图
    JQUERY-自定义插件-ajax-跨域访问
    JQUERY-插件
    JQUERY-事件-动画-类数组对象-添加自定义API
    JQUERY-修改-API-事件绑定
    jsp第五章
  • 原文地址:https://www.cnblogs.com/mantgh/p/9002027.html
Copyright © 2011-2022 走看看