初试MindSpore Lite

初试MindSpore Lite

MindSpore Lite是MindSpore2020年八月发布的针对手机以及IoT场景,端到端的解决方案。简单地说,就是可以在手机以及IoT设备上部署MindSpore框架训练的AI模型。是一个极速、极智、极简的端侧AI引擎,使能全场景智能应用,为用户提供端到端的解决方案,帮助用户使能AI能力。

初试MindSpore Lite_第1张图片

使用MindSpore Lite的优势

极致性能

高效的内核算法和汇编级优化,支持CPU、GPU、NPU异构调度,最大化发挥硬件算力,最小化推理时延和功耗。

轻量化

提供超轻量的解决方案,支持模型量化压缩,模型更小跑得更快,使能AI模型极限环境下的部署执行。

全场景支持

支持iOS、Android等手机操作系统以及LiteOS嵌入式操作系统,支持手机、大屏、平板、IoT等各种智能设备上的AI应用。

高效部署

支持MindSpore/TensorFlow Lite/Caffe/Onnx模型,提供模型压缩、数据处理等能力,统一训练和推理IR,方便用户快速部署。

使用MindSpore Lite的工作流程

[

MindSpore官网资源(选择模型)配图

选择模型选择新模型或者重新训练现有模型]

MindSpore团队提供了一系列预置终端模型,你可以在应用程序中使用这些预置的终端模型。 可下载MindSpore Model Zoo中图像分类模型。 同时,你也可以使用预置模型做迁移学习,以实现自己的图像分类任务。

[

MindSpore官网资源(转换模型)配图

转换模型使用工具将模型转换为方便部署的端侧模型]

如果你需要对MindSpore提供的模型进行重训,重训完成后,需要将模型导出为.mindir格式。然后使用MindSpore Lite模型转换工具将.mindir格式转换成.ms格式。

以mobilenetv2模型为例,如下脚本将其转换为MindSpore Lite模型用于端侧推理。

​
call converter_lite --fmk=MINDIR --modelFile=mobilenetv2.mindir --outputFile=mobilenetv2
​

[

MindSpore官网资源(部署应用)配图

部署应用将模型引入到应用中,并加载到移动或者嵌入式设备中]

使用MindSpore Lite的用户

[HMS ML Kit可以使用华为提供的机器学习套件,帮助快速开发端侧的机器学习应用]

[华为HiAIHUAWEI HiAI是面向智能终端的AI能力开放平台,让开发者能够快速地利用华为强大的AI处理能力,为用户提供更好的智慧应用体验。

[华为SiteAISiteAI构筑领先的轻量高效、安全易用、三层协同的嵌入式AI平台,使能网元智能化与自动驾驶网络。]

常见的场景

MindSpore官网资源(图像分类)配图

图像分类

可以使用预制图像分类模型,识别摄像头输入帧中的物体。

在Android设备上试试在loT设备上试试

MindSpore官网资源(目标检测)配图

目标检测

可以使用预置目标检测模型,检测标识摄像头输入帧中的对象并添加标签,并用边框标识出来。

在Android设备上试试

MindSpore官网资源(图像分割)配图

图像分割

图像分割可用于检测目标在图片中的位置或者图片中某一像素是输入何种对象的。

在Android设备上试试

下载MindSpore Lite

下载MindSpore Lite — MindSpore Lite master documentation提供了支持多种操作系统和硬件平台的模型转换、模型推理、图像处理等功能,可以下载适用于本地环境的版本包直接使用。

编译MindSpore Lite

介绍如何快速编译出MindSpore Lite。

MindSpore Lite包含模块:

模块 支持平台 说明
converter Linux, Windows 模型转换工具
runtime(cpp、java) Linux, Windows, Android, iOS 模型推理框架(Windows平台不支持java版runtime)
benchmark Linux, Windows, Android 基准测试工具
benchmark_train Linux, Android 性能测试和精度校验工具
cropper Linux libmindspore-lite.a静态库裁剪工具
minddata Linux, Android 图像处理库
codegen Linux 模型推理代码生成工具
obfuscator Linux 模型混淆工具

接下来我将以windows系统来简单的介绍如何编译出MindSpore Lite。

Windows环境编译

环境要求

  • 系统环境:Windows 7,Windows 10;64位。

  • 编译依赖

    • CMake >= 3.18.3

    • MinGW GCC = 7.3.0

  • 编译脚本中会执行git clone获取第三方依赖库的代码。

  • 如果要编译32位Mindspore Lite,请使用32位MinGW编译。

编译选项

MindSpore根目录下的build.bat脚本可用于MindSpore Lite的编译。

build.bat的编译参数

参数 参数说明 是否必选
lite 设置该参数,则对MindSpore Lite工程进行编译
[n] 设定编译时所用的线程数,否则默认设定为6线程

mindspore/lite/CMakeLists.txt的选项

选项 参数说明 取值范围 默认值
MSLITE_ENABLE_SSE 是否启用SSE指令集 on、off off
MSLITE_ENABLE_AVX 是否启用AVX指令集 on、off off
MSLITE_ENABLE_CONVERTER 是否编译模型转换工具 on、off on
MSLITE_ENABLE_TOOLS 是否编译配套工具 on、off on
MSLITE_ENABLE_TESTCASES 是否编译测试用例 on、off off
  • 以上选项可通过设置同名环境变量或者mindspore/lite/CMakeLists.txt文件修改。

编译示例

首先,使用git工具,从MindSpore代码仓下载源码。

git clone https://gitee.com/mindspore/mindspore.git -b r1.3

然后,使用cmd工具在源码根目录下,执行如下命令即可编译MindSpore Lite。

  • 以默认线程数(6线程)编译Windows版本。

call build.bat lite
  • 以指定线程数8编译Windows版本。

call build.bat lite 8

最后,会在output/目录中生成如下文件:

  • mindspore-lite-{version}-win-x64.zip:包含模型推理框架runtime和配套工具。

version:输出件版本号,与所编译的分支代码对应的版本一致。

目录结构

mindspore-lite-{version}-win-x64
├── runtime
│   ├── include
│   └── lib
│       ├── libgcc_s_seh-1.dll      # MinGW动态库
│       ├── libmindspore-lite.a     # MindSpore Lite推理框架的静态库
│       ├── libmindspore-lite.dll   # MindSpore Lite推理框架的动态库
│       ├── libmindspore-lite.dll.a # MindSpore Lite推理框架的动态库的链接文件
│       ├── libssp-0.dll            # MinGW动态库
│       ├── libstdc++-6.dll         # MinGW动态库
│       └── libwinpthread-1.dll     # MinGW动态库
└── tools
    ├── benchmark # 基准测试工具
    └── converter # 模型转换工具

暂不支持在Windows进行端侧训练。

上手体验

下载官方代码样例—图片分类(使用的是mobilenet.v2)。安装AndroidStudio,按照说明,需要各个依赖如下:

Android Studio >= 3.2 (推荐4.0以上版本) NDK 21.3 CMake 3.10 Android SDK >= 26 OpenCV >= 4.0.0(示例代码中已经有了,所以可以不用安装) 根据说明,配置一下工程,我使用的Android SDK=30,也就是Android10版本

img

导入项目之后,还需要下载gradle里面的相关依赖,等一会儿就行~

简单的源码说明 这个实例程序主要分为两个部分,一个是Java,一个是C++。Java代码调用系统API开启相机,并封装了一个类RecognitionObjectBean保存分类的结果。C++编写底层的推理代码,Jni调用C++API进行推理。C++API需要相关的库文件支持,可以通过Mindspore lite源码编译得到。也可以像这个例子,通过配置gradle下载

初试MindSpore Lite_第2张图片

 

要用C++代码实现推理过程,大致流程如下:

加载模型文件,创建会话,构建推理的计算图
转换输入图片为Tensor,要和训练时输入数据格式保持一致
输入数据进行推理,获取输出数据,也是一个Tensor,得进行一些处理,拿到分类的结果。

详细的代码可以点这model_zoo/official/lite/image_classification/app/src/main/cpp/MindSporeNetnative.cpp · MindSpore/mindspore - Gitee.com

你可能感兴趣的:(mindspore,其他)