ST官方推了一个视频,介绍其边缘计算模型训练软件NanoEdge AI Studio,并且还是免费使用。1 b; T7 O6 M6 H' \6 b0 v
1 L/ F2 \$ Q1 O w, M+ @# W' q 而我在嵌入式边缘计算部署中卡住的则是模型训练,获取和优化的步骤。因此这个软件如果可以快速训练部署的话实在是可以帮我的大忙。 # _# f+ s8 w; O; Y# m( o 于是连夜赶忙去官网查阅其相关资料和下载软件。
' R0 w5 f e; k t! P# ^' U6 A, p# ] 从官网(需要注册)下载和安装好NanoEdge AI Stuido之后,打开软件需要进行激活。 ' v1 h* [" Z& e2 R
在其官方文档中可以找到相关的离线激活教程,下载软件的时候需要填写申请邮箱,之后邮箱会收到一份激活邮件。 PS 这里千万不要使用离线激活,哎呀呀折腾死我了)4 A$ b! v* Z8 Y' u
* d/ L! _' N: Z, z0 W- e 将这串密钥填入NanoEdge中点击激活,会得到一串新的License key
( m" |( _* Q3 z$ ?1 p; N5 o 软件界面分为了以上五个主要部分: 1.创建项目; R; R8 H+ A7 N6 B1 E O 2.打开已有项目' b* h2 q6 s( d s6 @' n4 n 3.帮助文档& a- G# x2 ]6 v0 [3 m* I( h' k 4.开源数据集(这里不知道是不是我是离线的原因)9 @$ x3 y. f O8 ^! P+ f y3 F; b 5.工具栏 $ f: t$ }' N5 s0 y6 N. p5 u 测试NanoEdge" G2 b' P$ F5 r6 u* {. O 这里我尝试这创建项目,用一个2分类模型(n-class中n=2),我们简单的来测试一下,简单的做一个信号识别吧,虽然很没有必要,但是主要起到演示效果。 7 E9 T0 Z5 y6 ?/ b. [+ X A3 ~
在项目配置中,除了传感器类型,基本没啥好讲述的。" z* }; u0 S5 S 6 J- D" V: K) D! m/ b4 N& m
l+ ^+ U/ w% Z5 R 在传感器类型中,有许多选项给我们选择,主要是数据源的由来,Generic可以作为通用传感器输入,其轴数(Number of axes)由数据源决定,例如我们有一个三轴姿态传感器,那么其xyz轴就是数据就是三轴,我们先简单的设置一个一轴来使用。后面几个就不一一赘述了。 % O. P9 G& I0 j7 G% @, y9 D$ v
选择芯片,这里支持大部分STM32系列。
& S4 {& z: T& F0 X1 B/ D8 k; a1 R 我们选择自己常用的芯片,这边我选择F4的,这里我居然看见了Arduino,Nano和Uno用户的福音了。 7 ^( u; L+ J/ y4 g: o
- S* t& M- y6 O0 Y! u 在这里导入数据,文档说明支持TXT和CSV格式(不知道为什么机器学习的文件格式都避开xls) " m% X( w t# L4 h v6 y4 e
文档中具体说明了由三种导入方式,可能我们日常用的话会比较从串口导入吧(拜托看看DMA+ADC采样然后配合串口打印,真用上了,对ADC数据的模型构建,完了写这里越写越激动,感觉好多好多东西想去做,谁懂半夜两点钟写文章越写越清醒)( A2 a0 q, [. ^3 Q9 J2 z ' _6 a& ^+ W5 O, {1 L
用C语言简单的写一个正弦信号脚本。$ M7 }. U* C. y- M, X) S - q( g3 r4 h8 X, c* H: ~ 导入脚本,选择分割方式,选择预览数量。$ Z3 d+ q. C: b1 F& A" Q 这里由于二分类问题,我们需要给每个类情况都进行导入(分类1,分类2)
导入两路信号,一路正常信号,一路载波信号。 % C6 ?$ f0 N! ]
. R% _/ \- |) G* J9 g ^ 需要注意的是:首先信号数量要是2的倍数,第二信号上要有噪声,不能是太完美的信号,第三如果相邻的数据相同可能会被识别为过采样,因此需要设定好数据。6 b. z' q( t. e6 l 8 @: U0 B9 L2 _* q. s F
全是勾勾就没有问题啦。 $ E# e: I# r6 B& v7 m; k
" s5 Q r; q- r OK,咱们开始跑模型,这里实际使用的情况应该需要多组数据。 之后就是等待训练结束。+ o5 w9 Q0 M# o9 g+ X& S0 Z- O' ` b + j4 K( [$ K* ~) Y4 g2 N
训练结束后,其模型大小优化后Flash 4.3K(STM32F407ZGT6的FLASH有1M)完全存放的下这个模型。0 y8 i, W/ C; K5 x. a ! L" M4 D6 K& p$ ~2 G 但是由于我的数据集问题,具体要看使用的训练集。' O% f' Z; l2 R! `8 g! P
! p) P+ y# P% u
% Y- y: W# H+ d) N2 r 之后编译我们的模型。- Z3 ^+ D/ _$ i6 w! [# C1 `" ~ ) I: J; T8 R+ f; L$ r3 Q+ E m/ Z
保存我们训练好的模型。 7 w% b* @' h' A0 U& `, M. y
! W! j U9 j3 K( x& g+ V
之后几天出具体使用这个模型的示例!1 u- x' ^, U/ n. G5 a1 i9 S. T : y& k/ t. d6 ^4 E, s. G 使用体会& V" h' f& Z# F. M$ {! a9 q 总的使用下来来说,不需要什么过硬的专业技能,在数据除了最开始因为离线激活导致后面部署出了点问题之外几乎没有什么卡住我的地方(数据集的地方是没想到数据集太过于理想但是实际情况下肯定是没有我这么理想的)所以第一次使用大部分的时间都花在了官网的参考文献上了(本人英语水平不太好)" M: U4 O- j* q U% s 但是总体使用还算是很顺畅,并且由于没有很仔细的阅读文档,也有很多在使用中发现的很惊艳我的地方。 0 B3 b' U6 Q0 N4 y& Z 而且我开始以为最后会是生成一个模型,还是得使用CubeMX中的CubeAI组件进行嵌入,但是出乎意料的是其帮我们整合成了.c.h文件,方便在不同MCU之间的移植。 & f1 w( r8 _/ Q. @/ N 总体来说对于NanoEdge的使用感观非常好。7 t/ O: X2 ]$ g3 F( p* [: E 转载自:电路小白 如有侵权请联系删除2 _0 v( t+ ^' o . M7 l2 e) U: s! p g2 I |
【经验分享】STM32语音识别的智能蓝牙音箱(源程序+原理图+PCB+设计说明书+PPT)
想找个ST芯片
[GPIO] 使用新型抽象开始C++嵌入式编程,从GPIO开始
技术手册stm32f1xx中的一个小问题
【经验分享】STM32 HAL库移植FreeModbus详细步骤
【逢7发帖赢大礼】STM32开发之IC门禁卡UID读取方法!
实战经验 | Keil工程使用NEAI库的异常问题
经验分享 | FDCAN数据段波特率增加后发送失败的问题分析
STM32几种流行开发环境的优缺点
好用软件推荐-TouchGFX Designer
微信公众号
手机版
这个不错,很感兴趣