搜索

[uCOS/RTOS] [RTOS]+RT-Thread的AIOT实战(二)--RTT的神经网络模型部署方案

[复制链接]
115|1
 楼主 | 2020-6-23 16:03 | 显示全部楼层 |阅读模式
[RTOS]+RT-Thread的AIOT实战(二)--RT-Thread的神经网络模型部署方案



接上一帖:[RTOS]+RT-Thread的AIOT实战(一)--K210上跑RTT

要实现深度神经网络能够在嵌入式设备上运行,已经有了高人提出了不同实现方案,光在RT-Thread的软件包里面,就包含多种可玩的实现途径:

1. nnom

NNoM是一个专门为了神经网络在 MCU 上运行的框架。 NNoM 是一个定点神经网络库, 现在支持 8-bit定点格式。 当前 NNoM 支持数十种操作,卷积,池化,激活,矩阵计算等等。 此外还提供多种在线评估方法,包括时间统计,内存统计,Top-K 准确度,Confusion Matrix 等等。

904895ef1ab251d88c.png

默认使用纯C语言开发的后端,对于ARM构架的芯片,也可以使用ARM的CMSIS-NN,据说可以带来4倍左右的加速。

可以在如下设置中开启:

  1. RT-Thread online packages  --->
  2.     miscellaneous packages  --->
  3.         [*] NNoM: A Higher-level Nerual Network ... --->
复制代码
注:经本人测试,尽量不要使用最新版,我使用最新版在编译阶段报了错。选择稳定版本较新的就行。
245305ef1b4393b768.png

572115ef1b4531d2f5.png

说明:要将nnom的例子放在application的文件夹下替换原来的main.c,开机即可运行

参考:

nnom源代码

nnom简书的介绍

nnom主页


2. libann

没尝试

libann主页

3. protobuf-c

因为 onnx 的模型结构是用 Google Protobuf 的格式保存的。ONNX (Open Neural Network Exchange) 是机器学习模型的通用格式,可以帮助大家方便地融合不同机器学习框架的模型。开启方式如下:



  1. RT-Thread online packages
  2.   IoT - internet of things  --->
  3.       [*] protobuf-c: a C implementation of the Google Protocol Buffers data serialization format on RT-Thread
复制代码
参考:

源码

RTT小师妹的分享贴

4. nncase

这是嘉楠对K210芯片设计的专用编译工具,由于我们的板子芯片为K210,这种方案作为我的项目的实际选择方案。

简单地说,如同我们的源码从PC端到嵌入式设备,存在交叉编译的过程,神经网络模型同样存在这样的问题,一个直接的问题就是关于变量类型(整点和浮点)的转换。nncase的作用就是将PC端生成的神经网络模型转换为K210在变量类型等方面协调性能与效率适宜的可用模型,格式为.kmodel。

但实际的使用过程中还存在很多要注意的问题,我们将在以后的帖子中明确说明。当然,由于多家的板子都用了k210,他们也做了不同的封装,但本质上都在使用nncase,下面是小小的总结:

900115ef1b70990770.png

参考:

nncase工具




使用特权

评论回复
 楼主 | 2020-6-23 16:11 | 显示全部楼层
我的链接为什么是文本形式的?

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

关闭

热门推荐上一条 /4 下一条

在线客服 快速回复 返回顶部 返回列表