STM32近日推出了Cube.AI人工智能神经网络开发工具包,目标是将AI引入微控制器供电的智能设备,位于节点边缘,以及物联网,智能建筑,工业和医疗应用中的深度嵌入式设备。

简而言之,以后就可以在嵌入式MCU上跑AI模型了,买了一块开发板来做一些尝试,做一下记录。

我所使用的Nucleo开发板,MCU为STM32F767ZIT

Cube.AI的主要特点:

  • 从预先训练的神经网络模型生成STM32优化的库。
  • 支持各种深度学习框架,如Keras,Caffe,ConvnetJS和Lasagne.
  • 通过STM32Cube™集成,可轻松实现不同STM32微控制器系列的便携性。
  • 免费,用户友好的许可条款。

更多相关信息,请参看:

https://www.st.com/en/embedded-software/x-cube-ai.html?icmp=tt9145_gl_pron_dec2018​www.st.com


如果电脑上没有安装过STM32的开发环境,需要首先安装STM32 CubeMX与IAR。STM32 CubeMX可以在STM32官网上下载。

以下为教程部分,建议有条件的小伙伴结合官方视频进行观看,https://www.youtube.com/watch?v=grgNXdkmzzQ&t=396s 。

先安装好CubeMX,打开后,在最右边栏的Manage software installations中选择INSTALL/REMOVE,安装其中的X-CUBE-AI,约700M大小。

在主界面最右边的这里选择安装AI库

之后创建工程,在左上角输入所用的MCU型号,以我的板子为例,输入STM32F767。选择好型号以后,把左边栏的Artificial Intelligence勾选Enable。

我们使用官方提供的模型进行测试,https://github.com/Shahnawax/HAR-CNN-Keras

HAR意为Human Activity Recognition (HAR) system,即人类行为识别。这个模型是根据人一段时间内的3D加速度数据,来判断人当前的行为,比如走路,跑步,上楼,下楼等,很符合Cortex-M系列MCU的应用场景。使用的数据如下图所示。

HAR用到的原始数据主要包含动作分类、x、y、z轴加速度等

我们下载其中的model.h5文件,虽然还没有细看这个网络的结构,但从模型大小就能略知一二,只有8.48MB,果然MCU还是只能运行小一点的网络。

按下图配置进行选择,注意Compression要选择为4,如果选择不压缩的话,需要的Minimum Flash为2.8MB,就连F767也无法满足。进行Compression为4的压缩后,需要的Minimum Flash为775.52KB。Cortex-M3-M7系列大部分MCU的片上Flash均为1M~2M,可以满足。但Compression会损失部分精度,应在硬件能承受的范围内,尽量选择小的压缩率。

AI模型选择界面

配置完成后,点击右上角的Start Project进行下一步。

选择Additional Software,进入后把AI相关的两个包点开,第一个选择Validation,第二个打上勾。

在Additional Software中进一步配置AI库

之后左边栏中的Additional Software点开,选择其中的X-CUBE-AI,弹出的Mode窗口中两个复选框都打勾,Configuration窗口中,点开network选项卡,配置应该和创建工程时输入的一样。

检查network选项卡中模型文件配置是否正确

可以点击Validate on desktop进行验证,下方Output选项卡中会输出Validation OK,还有一些验证的细节。

输出Validation OK,说明模型没有问题

接下来配置MCU,实际烧写一下,看看能不能work。

首先配置USART串口,我们通过串口来查看板子打印的信息,我这里使用USART3,分别是PD8与PD9。在右边芯片中找到这两个引脚,配置成USART3_TX与USART3_RX。然后在最左的Connectivity中找到USART3,设置为Asynchronous,右边引脚变绿,证明配置完成。

然后在System Core中进行配置,点击CORTEX_M7,将CPU ICache与CPU DCache均设为Enabled。

将CPU ICache与CPU DCache使能

最后进行时钟的配置,在最上方选择Clock Configuration,把HCLK配置为板子的最大时钟,F767最大支持216MHz。

时钟配置界面

时钟配置完后,回到Pinout&Configuration选项卡,在Additional Software中(就是我们刚刚检查network模型文件的地方)选择PlatformSettings,COM Port选择为我们刚刚配置的USART3。

至此配置完毕,选择Project Manager,进行代码导出,需要注意的是Linker Settings中Minimum Heap Size要设为0x2000。最后点击最上方GENERATE CODE。

将代码输出

生成代码后,选择Open Project,若已安装IAR,会自动使用IAR打开。可以看到工程的文件结构如下图所示,里面包含了生成好的可以在STM32上运行的模型文件和模型数据。

工程的文件结构

代码烧写在芯片里后,回到CubeMX中下图所示位置,我们点击Validate on target,在板上运行验证程序,效果如下图,可以工作,证明模型成功部署在MCU中。

板上实际测试效果

这次就这样先跑一下官方的例程,以后再研究一下,跑跑自己的模型。

之后有空会把它和Intel计算棒还有显卡做一个对比,对比一下功耗、速度、支持模型的大小、模型部署难易程度等,看看边缘计算各种设备的优劣之处。

以后这个专栏还会出些有趣的实践项目,欢迎大家关注。

转载请联系作者并注明出处,侵权必究。

har文件解析工具_嵌入式MCU也能跑AI?STM32 Cube.AI工具包使用初探相关推荐

  1. pcap文件解析工具_【免费毕设】PHP网络数据包分析工具的设计与开发(源代码+论文)...

    点击上方"蓝字"关注我们目录 系统设计 网络数据包分析系统的设计 整个网络数据报分析工具采用模块化的设计思想,原因是许多程序太长或太复杂,很难写在单一单元中.如果把代码分为较小的功 ...

  2. php解析torrent文件,PHP基于闭包思想实现的BT(torrent)文件解析工具实例详解

    本文实例讲述了PHP基于闭包思想实现的torrent文件解析工具.分享给大家供大家参考,具体如下: PHP对静态词法域的支持有点奇怪,内部匿名函数必须在参数列表后面加上use关键字,显式的说明想要使用 ...

  3. AVI文件格式解析+AVI文件解析工具

    (转)AVI文件格式解析+AVI文件解析工具 AVI文件解析工具下载地址:http://download.csdn.net/detail/zjq634359531/7556659 AVI(Audio ...

  4. php解析bt,PHP基于闭包思想实现的BT(torrent)文件解析工具实例详解

    PHP基于闭包思想实现的BT(torrent)文件解析工具实例详解 发布于 2017-09-08 20:05:36 | 124 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP( ...

  5. java xml文件解析工具_Xml文件解析工具 - java

    解析Xml文件:就是把Xml文件里面的内容取出来. Xml文件解析工具:一个能解析Xml文件的类,即一个能把Xml文件里面的内容取出来的类. 先给出一个Xml文件(student_infor.xml) ...

  6. mflac文件解析工具_9 个爱不释手的 JSON 工具

    JSONLint JSONCompare jtc ijson JSON格式化和验证器 Altova XMLSpy JSON和 XML编辑器 Code Beautify JSON工具 Visual St ...

  7. vc6.0垃圾文件清理工具_干货 | 电脑清理宝典

    是否有过盯着电脑却不见电脑响应, 最后拿电脑没办法的抓狂经历? 什么?电脑慢到你恨不得把它砸了? 且慢且慢, 说不定是电脑里的垃圾文件导致它速度变慢, 且听书先生讲讲清理电脑垃圾文件的方法. 宝典一: ...

  8. csv格式文件解析失败_理解CSV格式规范(解析CSV必备)

    什么是CSV 逗号分隔值(Comma-Separated Values,CSV),其文件以纯文本形式存储表格数据(数字和文本),文件的每一行都是一个数据记录.每个记录由一个或多个字段组成,用逗号分隔. ...

  9. dump文件分析工具_使用这个 Python 工具分析你的 Web 服务器日志文件 | Linux 中国...

    导读:这个 Python 模块可以以多种格式收集网站使用日志并输出良好结构化数据以进行分析. 本文字数:3262,阅读时长大约:4分钟https://linux.cn/article-12512-1. ...

最新文章

  1. mxnet deepspeech网络结构打印
  2. git for c#, clone方法
  3. Python进阶最新中文版,开源!
  4. Rift.io基于OSM发布首个商用MANO软件
  5. 在ctex环境下利用Metapost作图
  6. c#实现多线程代码例子
  7. SharpDevelop源码分析笔记(一)
  8. C++中ASCII、unicode与Utf8之间的相互转化
  9. Chrome 如何让光标快速定位到地址栏-进行搜索
  10. Eclipse Pydev 技巧汇编
  11. eclipse终止端处的加载主类错误
  12. 干掉13个区块链最常见的Bug!
  13. Atitit 2019技术趋势与没落技术 目录 1.1. abcdAtitit 技术领域趋势 abcd研究总结AI(人工智能)BlockChain(区块链)、Cloud(云)、和Data(大数据)
  14. pymongo 怎么判断数据有没有添加成功_Python爬虫入门教程 29-100 手机APP数据抓取 pyspider...
  15. 最新声音鉴定鉴卡引流神器PHP源码
  16. 国内首个开源网络流量可视化分析平台 -- 流影
  17. 苹果xr如何截屏_iphone敲两下截屏如何操作 苹果手机触控截屏方法【教程步骤】...
  18. 基于BQ76PL455的BMS电路板设计
  19. LIS.LCS.LCIS相关问题
  20. mapv地图文字标注

热门文章

  1. Django开发social-auth-app-django 第三方登陆
  2. 【java SOAP】对SOAP的一个个人印象
  3. vim 设置标签等操作
  4. minSdkVersion、compileSdkVersion和targetSdkVersion
  5. 网卡流量统计实用工具nicstat
  6. 1-1. 虚拟机控制
  7. PowerDesigner 中的name与comment转换(转)
  8. 18、Cocos2dx 3.0游戏开发找小三之cocos2d-x,请问你是怎么调度的咩
  9. Oracle goldengate通用配置
  10. unitec理工学院 计算机,2020年新西兰留学Unitec理工学院计算机硕士课程全面解析...