请选择 进入手机版 | 继续访问电脑版

你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于STM32上NanoEdgeAIStudio经验分享

[复制链接]
攻城狮Melo 发布时间:2024-5-29 18:08
ST官方推了一个视频,介绍其边缘计算模型训练软件NanoEdge AI Studio,并且还是免费使用。* I) X4 ?" Y3 G$ E0 A
! E! w8 c& ^! c6 S7 V7 l( _1 p
微信图片_20240529180747.png : E: D" f2 {; e& l5 V, M; J
/ ?" H! \+ ]- R$ ]6 E
而我在嵌入式边缘计算部署中卡住的则是模型训练,获取和优化的步骤。因此这个软件如果可以快速训练部署的话实在是可以帮我的大忙。
  U1 U& W; ]2 N) D/ p! [' f$ D( k

2 @4 B9 X5 Y7 g: m于是连夜赶忙去官网查阅其相关资料和下载软件。
$ I- f7 O. A( E: t0 A$ [# q
! O/ [8 U# W/ E( w8 \; @
微信图片_20240529180743.png ! p* A' V8 P1 F+ z4 n  a
. n! p% d* p' `3 C, r
从官网(需要注册)下载和安装好NanoEdge AI Stuido之后,打开软件需要进行激活。
3 ?. ~) _" ^+ d8 ?1 O$ E' Z+ ]( P' o- G
微信图片_20240529180737.png 0 ~: J) q* \" M2 ?
5 y) L$ j' B4 b$ z1 @) H
在其官方文档中可以找到相关的离线激活教程,下载软件的时候需要填写申请邮箱,之后邮箱会收到一份激活邮件。
5 H1 V. a# _7 @2 U& s" T8 q
: D# b- A+ |0 c1 W9 e
PS这里千万不要使用离线激活,哎呀呀折腾死我了). X/ N. |$ n* y) A* c8 s

6 r: `8 s/ V8 ]. v
微信图片_20240529180734.png : }0 S- o+ x: a/ q8 t2 i

# y0 U" ?6 T' m. j# A; }# n将这串密钥填入NanoEdge中点击激活,会得到一串新的License key
3 a8 y/ ^! |( N" n- ~, _, J
( V1 v% m- }8 I! u& F
微信图片_20240529180731.png
4 w* \+ c. ^5 e% ], _& ^+ I

# R+ _, \" F, E) R: W1 [: O软件界面分为了以上五个主要部分:% B: G% ]2 b( t( t9 l
1.创建项目
" u9 n. s0 b4 S2.打开已有项目! ^1 e% {+ M- \3 W
3.帮助文档+ c4 p6 Y+ [5 r! j5 |
4.开源数据集(这里不知道是不是我是离线的原因)
: y0 q; g; W+ f( d' s2 w# |5.工具栏) D" t" x8 @* d; h& B( b' w+ f/ `
- @' g( c/ @. [0 T
测试NanoEdge
& ^* l' Z7 r6 R4 ?* ~7 _( _- y这里我尝试这创建项目,用一个2分类模型(n-class中n=2),我们简单的来测试一下,简单的做一个信号识别吧,虽然很没有必要,但是主要起到演示效果。9 p- X) T% {: }+ e1 ^8 _( N
/ ^" [; A, z( t; {8 Q. o
微信图片_20240529180726.png
: a0 E; O! u0 D7 O, A+ ?% n; W1 j9 Y0 V2 h' W" F* n
微信图片_20240529180717.png
6 B& |' R, O% O

/ W& X5 R+ u+ m$ n' o3 E* C在项目配置中,除了传感器类型,基本没啥好讲述的。
' _: W2 ?: o1 ]4 {6 w; L, ]$ i6 b0 M% f. q  }6 C3 J
微信图片_20240529180712.png * z$ R( |4 `7 J- K
4 l3 c+ ?9 j( D" H7 N0 n" v! B
在传感器类型中,有许多选项给我们选择,主要是数据源的由来,Generic可以作为通用传感器输入,其轴数(Number of axes)由数据源决定,例如我们有一个三轴姿态传感器,那么其xyz轴就是数据就是三轴,我们先简单的设置一个一轴来使用。后面几个就不一一赘述了。6 x# @) y+ K9 u

' T/ d% @  `- X9 u8 |' m- a- J
微信图片_20240529180708.png
2 M/ |! H1 m0 X* `  Z: a
7 v  H6 q, Y3 w  t5 X3 @
选择芯片,这里支持大部分STM32系列。  ^# A0 I5 U3 d1 u
6 o- Q# T* S( i
微信图片_20240529180700.png
8 F+ i7 ]0 X/ S2 Z" c) z- t# W# [
我们选择自己常用的芯片,这边我选择F4的,这里我居然看见了Arduino,Nano和Uno用户的福音了。
/ p1 F. N* A5 p( n4 d3 s6 @9 L; S, I( b7 v% G- ^* Y* t; i" V9 E5 o& b
微信图片_20240529180656.png
! y9 A0 b7 u* K3 V5 F- @

  o2 w( X  u' _9 W4 b6 e6 b在这里导入数据,文档说明支持TXT和CSV格式(不知道为什么机器学习的文件格式都避开xls)
" J0 `: l  I7 G) M- `! H- B$ O5 U" C  o( w0 h
微信图片_20240529180650.png
9 y1 q2 Q5 n" h9 Z; j9 e2 k) y& U: `7 _) q
文档中具体说明了由三种导入方式,可能我们日常用的话会比较从串口导入吧(拜托看看DMA+ADC采样然后配合串口打印,真用上了,对ADC数据的模型构建,完了写这里越写越激动,感觉好多好多东西想去做,谁懂半夜两点钟写文章越写越清醒)
- N& y% m4 N1 E7 y
) r2 a- K, ]& v8 n/ f  L
微信图片_20240529180646.png
3 ~/ B6 g. `9 N/ z" y  p0 N- j% Q; m: }- s$ `/ P
用C语言简单的写一个正弦信号脚本。
: a: s, Y/ T0 H2 G" `$ W# `. l/ g2 F2 X
导入脚本,选择分割方式,选择预览数量。
/ o+ P+ q2 q& [0 s4 ~+ y/ h; M- S6 X4 J; l* R
这里由于二分类问题,我们需要给每个类情况都进行导入(分类1,分类2)+ v5 t/ |* h: w- Q/ Q. X

0 Q; v$ V0 F; {' e# a. P9 P0 O/ \" v
微信图片_20240529180642.png / q. x! d# l8 V% {
6 |: {% o" ^4 t6 T& J  z
微信图片_20240529180638.png
7 O. U/ F# N% T2 ]
" g* @% Z* b6 D5 U导入两路信号,一路正常信号,一路载波信号。4 V& G: @2 Z0 |  T. m

5 S4 ?% r5 a7 @( U9 a9 ]7 ?
微信图片_20240529180635.png 2 \7 l( G% M4 {

! b; i: W5 p9 `8 W# ?5 c$ G需要注意的是:首先信号数量要是2的倍数,第二信号上要有噪声,不能是太完美的信号,第三如果相邻的数据相同可能会被识别为过采样,因此需要设定好数据。
% a3 J2 F  u2 s3 |+ z1 h( O  D: K( S4 Z3 w  F1 k5 }! }8 ]1 q
微信图片_20240529180629.png
; D1 `1 @2 v! [* }: S, B7 R/ T

) R- j! z9 o/ Z' k  V  G$ X全是勾勾就没有问题啦。
* r8 w: m+ V; t2 o" Q' u$ z5 y9 T1 h9 w* J( h# V# D/ z6 h
微信图片_20240529180624.png
+ M8 [5 a! G! b  w) V4 p! Y: s7 l3 Y  I2 X' ^
OK,咱们开始跑模型,这里实际使用的情况应该需要多组数据。0 `! ?# Q+ n9 e* z- t
9 Q- O, e- u( O$ y( f$ E& s: t! n
之后就是等待训练结束。
. s) M' G3 _* o% K$ `: T
! ]9 r7 ~' j6 i' `% H
微信图片_20240529180618.png ) K) b- \. m" s* R; A

5 D+ X! `( b. Y, f% q
微信图片_20240529180614.png
* t! \9 d  a& \- i; `# h. i, I, }3 w# l$ y/ o
训练结束后,其模型大小优化后Flash 4.3K(STM32F407ZGT6的FLASH有1M)完全存放的下这个模型。" B% L5 c: R: y; C

5 ]5 F& ~6 c2 L) E但是由于我的数据集问题,具体要看使用的训练集。
- Y* @% x/ p! e/ Q. A: S1 t$ o
, P6 S. D2 |# \. U) `2 @
微信图片_20240529180610.png
3 w& g0 a6 Y8 Q
! h2 e: E2 G) e2 u+ ^ 微信图片_20240529180607.png : \* U4 }& [8 _( z- K2 d

) l3 F( ]$ ~( p2 J2 L" i之后编译我们的模型。
9 J; K. |& R! Y0 E- B; r8 {
" r8 Z. x3 q. n) ?
微信图片_20240529180604.png 3 z8 ]  N, J5 `" z8 {/ m
0 E$ `4 P6 A8 `6 l3 W) b7 r- a
保存我们训练好的模型。
1 P' J# Y) I8 _+ O" @( p/ ?
, r/ F$ N1 {' X- J( U/ `
微信图片_20240529180600.png ' Y5 E% C6 A1 V" l

# q4 U4 W) m* K* D 微信图片_20240529180556.png
" s+ L3 m( _6 y+ N
+ ^; O2 I  O) V( n8 U( `之后几天出具体使用这个模型的示例!0 h6 Y: b" u! k  N  n1 }

6 X/ |* w# m, |  M0 F) r6 G
使用体会+ C* ~0 ?% K- @8 w! \2 u9 N
总的使用下来来说,不需要什么过硬的专业技能,在数据除了最开始因为离线激活导致后面部署出了点问题之外几乎没有什么卡住我的地方(数据集的地方是没想到数据集太过于理想但是实际情况下肯定是没有我这么理想的)所以第一次使用大部分的时间都花在了官网的参考文献上了(本人英语水平不太好)
: Z* F' V( b$ B
8 D5 X0 T5 m3 P/ x  S
但是总体使用还算是很顺畅,并且由于没有很仔细的阅读文档,也有很多在使用中发现的很惊艳我的地方。
+ c+ @7 G$ n7 v: U/ @7 s! S: S) }
3 w5 z) F; \* ?5 E. R* x8 Y0 g
而且我开始以为最后会是生成一个模型,还是得使用CubeMX中的CubeAI组件进行嵌入,但是出乎意料的是其帮我们整合成了.c.h文件,方便在不同MCU之间的移植。' V9 `" D- N; D! j8 t: V9 @
! D; Q* G2 ~7 R+ i7 d! u
总体来说对于NanoEdge的使用感观非常好。- S' t) s% ?/ G
, M) g3 ]4 c2 b4 q0 F1 j/ k3 x5 K- ]

, Q6 J" e8 u! @2 m2 ?; c. b" H( [& g1 l" b- Y! D
转载自:电路小白
: @* g" `; q: E: Q, b6 g如有侵权请联系删除. k. @9 z# H4 h- }2 m2 y) s! [

- v$ k0 `$ T; ^" F% O- t9 a; N; J" ]; a4 X8 E
收藏 1 评论1 发布时间:2024-5-29 18:08

举报

1个回答
STMWoodData 回答时间:2024-5-29 22:11:23

这个不错,很感兴趣

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版