发布时间:2024-12-10 11:01
MindSpore Lite是MindSpore2020年八月发布的针对手机以及IoT场景,端到端的解决方案。简单地说,就是可以在手机以及IoT设备上部署MindSpore框架训练的AI模型。是一个极速、极智、极简的端侧AI引擎,使能全场景智能应用,为用户提供端到端的解决方案,帮助用户使能AI能力。
高效的内核算法和汇编级优化,支持CPU、GPU、NPU异构调度,最大化发挥硬件算力,最小化推理时延和功耗。
提供超轻量的解决方案,支持模型量化压缩,模型更小跑得更快,使能AI模型极限环境下的部署执行。
支持iOS、Android等手机操作系统以及LiteOS嵌入式操作系统,支持手机、大屏、平板、IoT等各种智能设备上的AI应用。
支持MindSpore/TensorFlow Lite/Caffe/Onnx模型,提供模型压缩、数据处理等能力,统一训练和推理IR,方便用户快速部署。
[
选择模型选择新模型或者重新训练现有模型]
MindSpore团队提供了一系列预置终端模型,你可以在应用程序中使用这些预置的终端模型。 可下载MindSpore Model Zoo中图像分类模型。 同时,你也可以使用预置模型做迁移学习,以实现自己的图像分类任务。
[
转换模型使用工具将模型转换为方便部署的端侧模型]
如果你需要对MindSpore提供的模型进行重训,重训完成后,需要将模型导出为.mindir格式。然后使用MindSpore Lite模型转换工具将.mindir格式转换成.ms格式。
以mobilenetv2模型为例,如下脚本将其转换为MindSpore Lite模型用于端侧推理。
call converter_lite --fmk=MINDIR --modelFile=mobilenetv2.mindir --outputFile=mobilenetv2
[
部署应用将模型引入到应用中,并加载到移动或者嵌入式设备中]
[HMS ML Kit可以使用华为提供的机器学习套件,帮助快速开发端侧的机器学习应用]
[华为HiAIHUAWEI HiAI是面向智能终端的AI能力开放平台,让开发者能够快速地利用华为强大的AI处理能力,为用户提供更好的智慧应用体验。
[华为SiteAISiteAI构筑领先的轻量高效、安全易用、三层协同的嵌入式AI平台,使能网元智能化与自动驾驶网络。]
可以使用预制图像分类模型,识别摄像头输入帧中的物体。
在Android设备上试试在loT设备上试试
可以使用预置目标检测模型,检测标识摄像头输入帧中的对象并添加标签,并用边框标识出来。
在Android设备上试试
图像分割可用于检测目标在图片中的位置或者图片中某一像素是输入何种对象的。
在Android设备上试试
下载MindSpore Lite — MindSpore Lite master documentation提供了支持多种操作系统和硬件平台的模型转换、模型推理、图像处理等功能,可以下载适用于本地环境的版本包直接使用。
介绍如何快速编译出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 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版本
导入项目之后,还需要下载gradle里面的相关依赖,等一会儿就行~
简单的源码说明 这个实例程序主要分为两个部分,一个是Java,一个是C++。Java代码调用系统API开启相机,并封装了一个类RecognitionObjectBean保存分类的结果。C++编写底层的推理代码,Jni调用C++API进行推理。C++API需要相关的库文件支持,可以通过Mindspore lite源码编译得到。也可以像这个例子,通过配置gradle下载
要用C++代码实现推理过程,大致流程如下:
加载模型文件,创建会话,构建推理的计算图 转换输入图片为Tensor,要和训练时输入数据格式保持一致 输入数据进行推理,获取输出数据,也是一个Tensor,得进行一些处理,拿到分类的结果。
详细的代码可以点这model_zoo/official/lite/image_classification/app/src/main/cpp/MindSporeNetnative.cpp · MindSpore/mindspore - Gitee.com