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

基于STM32F767ZI AI 应用工程创建----转载  

[复制链接]
木木&点点 发布时间:2019-1-6 17:29
偶然看到一篇好文章,分享给大家。
: Q5 D8 d2 |) w8 U) g  J0 ?

$ v. Q2 H6 R) n
1.jpg
9 L+ i# {+ X3 K
今天介绍下ST官方刚刚推出的CubeMx 自带的X-CUBE-AI(Artificial intelligent)插件功能,可以给现有的STM32 M3-M7高性能的处理器添加基于训练好的ANN 的模型用于不同的数据分析处理。

& u0 o% J; N$ [; ]9 X4 K8 R
使用STM32Cube.AI简化了人工神经网络映射
' V8 t* u# `* s
1.可与流行的深度学习培训工具互操作
2.兼容许多IDE和编译器
3.传感器和RTOS无关
4.允许多个人工神经网络在单个STM32MCU上运行
5.完全支持超低功耗STM32MCU

8 a9 |# t; f8 Q8 s8 v/ y
提高您的工作效率

5 [' R$ @0 l  p% Q0 H
利用DeepLearning的强大功能提高信号处理性能并提高STM32应用程序的生产率。创建人工神经网络并将其映射到STM32(通过CubeMx自动生成优化的代码),而无需手动构建代码。
以上就做个简短的介绍,想了解更多有关STM32Cube.AI可以访问下面的链接:http://www.st.com/content/st_com ... 2_gl_social_dec2018
! \, k& N7 S6 O. I6 g* ~0 \
那先前的准备工作就是需要安装最新版本的CubeMx 5.0.1
然后使用CubeMx 去安装X-CUBE-AI插件, 700多M的容量。。慢慢下载吧
0 T+ ^$ w4 ?. e3 O# a
2.jpg
" h0 D3 h; n  C5 S
下载好后,CubeMx里的Artificial intelligent
激活Enable

% ]9 i3 p+ E' p% M& `+ p! w
3.jpg
$ a& Q7 S, G9 n$ y
这里我们就可以看到里面的选项了
下载下来。。然后选择Keras 的AI API算法
, F* o4 |* ^7 w: M- k2 C
4.jpg
7 H1 ~( N7 ]- u0 u( B* A
model.h5就是我们需要导入到工程里的AI Keras的训练好的模型

( v1 U0 l4 |9 O6 X. a
5.jpg

/ h8 l5 y5 z; W8 I9 h6 a
Human Activity Recognition Using Convolutional Neural Network in Keras
人类活动识别卷积神经网络算法模型
6.jpg

4 b7 v6 T! z, s7 W1 f% \$ h
然后我们导入到工程里
7.jpg

) ~, Q% K" R! N; d' ~2 L
这里选择压缩参数,不同的压缩参数对MCU的flash容量
要求也不一样。。
8.jpg
0 c' J3 v. o% Z( K- A0 m
点击Analyze cube就好计算使用这个神经网络算法的ram和flash容量占用

7 h$ t. H* J& s( L2 Y* X, v* i( y$ U
9.jpg
9 a: a  `) d' u: C9 a" {
好了结果出来了,
  C1 [/ v2 G4 O( P8 E! x
10.jpg

7 d& ]! m0 u( v; j
经过分析后Cube会自动列出可以使用的MCU
然后显示在列表里
11.jpg
0 f' ]9 @9 T( w' b4 V
这里举个例子,我们选择没有压缩优化
分析模型算法后的结果我没有匹配的MCU可以使用

& j) p9 M( g5 W9 c/ p6 z: ]/ i
12.jpg

  }  t1 ]/ S- D! P! p. R
这是选择压缩比参数8的结果,可以支持很多的MCU使用这个神经网络算法。。
) s8 v7 S4 T8 N8 Y2 u& t) D
13.jpg
1 N! o* I/ V! D9 {! l5 x) g( D. r
好了,这里我们就选择STM32F767ZI Nucleo 板卡作为 这次演示使用的板卡
( Y2 R# K% X1 N# i) k
14.jpg
好了选择好了,板卡,我们还需要给它添加扩展库,也就是AI库3 e+ S" E  ?- k) W
( ^3 i6 v' s: L; x. Q
15.jpg

/ W2 ^/ g7 M; v+ @% z! W
9 ^' c; U8 X! ^/ O1 ]3 [8 |) f8 M
选择好Validation 和打勾 AI core
# R) z+ m* Z( Z! G" k# r
16.jpg
% t  P. V, ~* d8 j* A8 @
然后在cube 左下方可以看到下图箭头 提示的插件功能

& W, D$ }$ l! m- g; e( E+ c
17.jpg
; z$ r: |% H: n. V$ \5 V
我们需要打勾以下2个功能

& A3 U- @5 ]7 O  Q/ u6 g
18.jpg

1 o' q/ k1 c7 w# B* Q
然后创建我的AI算法名称,这个名称会在后续的里自动创建好。
. K4 L# g- i  b% `$ w) g
19.jpg
& f4 b& _0 P4 }( R& B
添加好,我们下载好的AI神经网络算法,然后再Analyze下就好。。打勾表示验证通过
! [' N% O" _1 Z$ k! U
20.jpg

+ ^) T% K" c* ~' z8 P+ ], b
然后我们需要配置我们的mcu的 CPU ICache 和 CPU DCache

9 E" ?) _) S  j1 r
21.jpg
5 z2 g; g7 K; e' H
然后配置MCU主频为216Mhz
1 N7 \6 Z: V9 [! s
22.jpg

! D1 |* d' \4 \; W9 T. z# O6 }. W3 D! W/ b& e2 f
然后我们需要配置串口3和CubeMx进行通讯,验证我们工程。。。

& x" g; ]( r2 z, C, k: ~6 s& n
23.jpg
8 ^, z) u# ]; b% ]0 \6 C( b, M
然后在 AI扩展功能里选择通讯端口为串口3
2 I  ]. n' U% F8 q; r
24.jpg
好了,工程差不多创建好了。接下来就是 配置工程的路径好 我们配置使用IAR 编译环境。。 然后Heap 然后要配置到2000 这个很重要,要是设置少了 系统就会奔溃(切记)% m: V" m( k& ]/ Y! g2 K' z! |' I8 j
' Z5 ^# f7 ^) S9 a" P( L( i
25.jpg

/ t' p% Y4 z" N* o
好了工程生成好了,我们就可以 使用IAR 打开工程了 工程如下,工程里自动生成了基于AI的算法的所以文件
3 |7 \  T9 s: e( ?4 S5 F; l) y
26.jpg
6 v! b+ l! j$ z* d
这里可以看到,基于AI训练好的模型数据列表。。。
/ }0 {# x9 w% g( r: ?; E3 o, g8 r+ ]
27.jpg

. C7 ~6 `0 {! l6 Y" e8 |$ {% y8 N, \
好了,配置位STLINK,然后编译好就可以直接下载到板子上了
* V' S: c/ \. N0 o$ H' n
28.jpg

0 W9 e7 o/ w: `% W5 A% O( d
29.jpg
好了,现在我们需要回到CubeMx里,回到 AI扩展功能里。。 先重启下开发板,然后 点击Validation on target
! r* ?; k$ B% |9 [# U# i9 q9 h
, l* m) d3 {8 I1 ?% ?8 S. ?
30.jpg
# b/ g& {  u/ `* i2 q5 T# e: R
选择手动,然后选择对应的串口端口
+ u8 U) S1 B  r. R
31.jpg
- l; L& G+ i2 s: U* _3 F
这里可以看到验证已经开始了‘
) u. C& \  v1 A1 w1 Y! z
32.jpg
好了,结果出来了。我们可以在串口输出的信息里看到有关的数据

: Q7 x3 x4 K) ?1 T% f0 ~+ q
33.jpg
, R8 s# n, J; f, G( Z1 h1 i9 t
34.jpg
35.jpg

% g3 ?, c# `7 {' g
36.jpg

% `( v; ^% D0 m5 b& v
* q& b, K: j) _, @
好了,基于CubeMx+AI扩展库的使用就分享到这了,想了解更多关于 使用STM32 AI的朋友可以关注ST官网的教程。。。
收藏 3 评论33 发布时间:2019-1-6 17:29

举报

33个回答
单片机爱好者 回答时间:2019-5-25 21:12:11
Build target 'STM32F767_AI'
( |) o* S! q6 k& ?2 Gassembling startup_stm32f767xx.s...+ f* C5 {8 J5 G0 v
compiling main.c...
# u* H  E- h) n6 l# V0 t../Inc/app_x-cube-ai.h(77): error:  #5: cannot open source input file "network.h": No such file or directory
8 `7 }! D+ p# M8 g3 e7 M$ z  #include "network.h"
$ Z5 Y" @9 C8 O7 V0 V* K$ J../Src/main.c: 0 warnings, 1 error
/ t- x- u' ^3 x3 @compiling app_x-cube-ai.c...% R/ d0 Q$ B- \9 G( Z' b
../Inc/app_x-cube-ai.h(77): error:  #5: cannot open source input file "network.h": No such file or directory& ~% r' t6 \5 w' x
  #include "network.h"/ L- V& c/ o$ m0 j# ]( H: z
../Src/app_x-cube-ai.c: 0 warnings, 1 error2 ~$ M) ~+ i8 n
compiling stm32f7xx_it.c...
2 F: D3 s- [: W  Ccompiling stm32f7xx_hal_msp.c...
9 S1 W$ e: d0 Z2 qcompiling stm32f7xx_hal_cortex.c...
0 x" V& o6 l$ B# D7 Ocompiling stm32f7xx_hal_crc.c...1 ~& H: w' K& E, S9 B, z5 Y5 f
compiling stm32f7xx_hal_crc_ex.c...2 X( Y! L/ [# |" I& g) G: w
compiling stm32f7xx_hal_tim.c...
. Y, ?4 o0 y% f. }: ecompiling stm32f7xx_hal_tim_ex.c.../ W5 L* R/ e0 B' l9 K
compiling stm32f7xx_hal_uart.c...
5 Z6 n4 a: a' Y3 @. W; ?0 p3 T- Tcompiling stm32f7xx_hal_uart_ex.c...' g5 M9 e+ r- D' v; K
compiling stm32f7xx_hal_rcc.c...5 M1 e; U6 ]( C! z
compiling stm32f7xx_hal_rcc_ex.c...7 ~- T! ?. \" f
compiling stm32f7xx_hal_flash.c...% u" M1 L+ s! D$ ^  t; b
compiling stm32f7xx_hal_flash_ex.c...3 ~9 D! R/ d  Z0 D8 \. [) @2 _
compiling stm32f7xx_hal_gpio.c...( ^! [: g: J: Z0 B4 P
compiling stm32f7xx_hal_dma.c...0 U" I9 O3 W8 @
compiling stm32f7xx_hal_dma_ex.c...# i' A" {% O+ \5 E* Z: I$ P1 Z
compiling stm32f7xx_hal_pwr.c...! G9 k% B9 k9 ^
compiling stm32f7xx_hal_pwr_ex.c...
8 p7 q! g1 }3 c$ R0 A: u5 mcompiling stm32f7xx_hal.c...
6 L9 y; m% C/ f' i* Q, F: ucompiling stm32f7xx_hal_i2c.c...
; W- f  J0 h9 o% m3 w2 tcompiling stm32f7xx_hal_i2c_ex.c...
3 `* z# J6 W4 v9 ?compiling stm32f7xx_hal_exti.c...: R- Q) s* x. m' x! o2 t
compiling system_stm32f7xx.c...
0 V7 m4 o: c, o, z: ]2 rcompiling aiPbMgr.c...% P7 Y1 l7 q5 G6 ]
../Inc/app_x-cube-ai.h(77): error:  #5: cannot open source input file "network.h": No such file or directory
& _/ c0 T2 l( b; x: D  #include "network.h"+ H3 ^2 J  c$ o; D
../Middlewares/ST/X-CUBE-AI_Application/Validation/Src/aiPbMgr.c: 0 warnings, 1 error
& S3 X9 K, H* mcompiling aiTestUtility.c...
6 W8 P8 F; H8 Z7 @: Q../Inc/app_x-cube-ai.h(77): error:  #5: cannot open source input file "network.h": No such file or directory
7 M3 T! \2 o& d) Q8 l  #include "network.h"; I" V1 H/ e0 d7 ]
../Middlewares/ST/X-CUBE-AI_Application/Validation/Src/aiTestUtility.c: 0 warnings, 1 error
9 b/ l' {+ m3 `' t4 |compiling aiValidation.c...5 j( ]. l! n5 t) B! N4 O8 E. _. \: ]
../Inc/app_x-cube-ai.h(77): error:  #5: cannot open source input file "network.h": No such file or directory
& S+ W' J# v  W7 B  f  #include "network.h"7 g; G4 B: j5 b* R* f/ l' \
../Middlewares/ST/X-CUBE-AI_Application/Validation/Src/aiValidation.c: 0 warnings, 1 error
, v! A3 g) o9 B3 r! ~1 d! f+ L' F$ ccompiling pb_common.c...
1 T7 P3 y+ }0 n% b; ycompiling pb_decode.c...7 D( ~; W( g. f; }8 F% z. {* v
compiling pb_encode.c...: I$ _. w0 E) R9 j2 L: l
compiling stm32msg.pb.c...- [* P! G1 W+ j) b
"STM32F767_AI\STM32F767_AI.axf" - 5 Error(s), 0 Warning(s).1 y1 F" }2 U. a
Target not created.
单片机爱好者 回答时间:2019-5-25 21:11:53
Build target 'STM32F767_AI'3 o/ g# H7 U8 w; l
assembling startup_stm32f767xx.s...
- ]( \( h( o: kcompiling main.c...
8 v' Q* x: z5 \../Inc/app_x-cube-ai.h(77): error:  #5: cannot open source input file "network.h": No such file or directory. M- q% V& I9 M: L2 C/ Z3 e0 B4 y
  #include "network.h"6 K" v& F; X7 t7 ?
../Src/main.c: 0 warnings, 1 error5 V3 f8 n- N- O- \2 X+ b& }3 c# u
compiling app_x-cube-ai.c...5 x6 ~' _( v5 P8 E+ i9 x/ L
../Inc/app_x-cube-ai.h(77): error:  #5: cannot open source input file "network.h": No such file or directory
5 J2 ^1 h. `) M% V9 r- w6 ~  #include "network.h"; o8 Q* V- s" R# j' O& e
../Src/app_x-cube-ai.c: 0 warnings, 1 error2 f* M& [: Q& l) B- J0 ^
compiling stm32f7xx_it.c..., n  p; Z5 i# m/ c/ q1 T6 p
compiling stm32f7xx_hal_msp.c...
9 i  d. C8 V9 z& F) [* r& scompiling stm32f7xx_hal_cortex.c...1 W% [- ^8 I8 O4 D3 Z# `7 p
compiling stm32f7xx_hal_crc.c...( f/ k0 R) G8 z& K1 ], @7 M) j2 L
compiling stm32f7xx_hal_crc_ex.c...0 V6 Y- d- g+ q9 h, y' b
compiling stm32f7xx_hal_tim.c...
% b) h& ]2 H; T4 O: s" N/ C9 X% z$ _compiling stm32f7xx_hal_tim_ex.c...
! b/ ^4 R" ?8 W# {3 a  z8 O( ?" Ocompiling stm32f7xx_hal_uart.c...9 u, O7 t/ v: c! X& f  s  _
compiling stm32f7xx_hal_uart_ex.c...
. i, j( m; n$ T3 Xcompiling stm32f7xx_hal_rcc.c...
! R) J, R  r( `( H' W! ucompiling stm32f7xx_hal_rcc_ex.c...
$ N. W$ Z; y9 r0 v( f- q( mcompiling stm32f7xx_hal_flash.c...2 W) m8 K+ ]# o' K. d& ?' b( g
compiling stm32f7xx_hal_flash_ex.c...9 I& c/ g" i8 _: D) |
compiling stm32f7xx_hal_gpio.c...* g! J  X% t6 E! Z% M
compiling stm32f7xx_hal_dma.c...- N6 O+ `0 U( I
compiling stm32f7xx_hal_dma_ex.c...% M( j- l8 K( ~0 E
compiling stm32f7xx_hal_pwr.c...* Q! E' G# F  [' K% s. e. e
compiling stm32f7xx_hal_pwr_ex.c...' ?$ o5 M: [# v: |& R+ x3 f
compiling stm32f7xx_hal.c...
0 N$ \$ U) Z7 ~7 z2 @compiling stm32f7xx_hal_i2c.c...5 t3 W8 z3 E6 j2 b3 L% X  {7 E7 k
compiling stm32f7xx_hal_i2c_ex.c...; A6 s' k. `; u' r& }+ I
compiling stm32f7xx_hal_exti.c...; @2 [) g. c' Y$ x! o
compiling system_stm32f7xx.c...0 G4 v! t# d) t6 p( C' U1 h
compiling aiPbMgr.c...
$ m9 g! X7 t4 l: b: t! L0 Z../Inc/app_x-cube-ai.h(77): error:  #5: cannot open source input file "network.h": No such file or directory
+ o4 ~1 g: f1 N0 m4 O  #include "network.h"
9 n: S) h7 d$ U  G../Middlewares/ST/X-CUBE-AI_Application/Validation/Src/aiPbMgr.c: 0 warnings, 1 error
& Q5 b, G  x6 h) ecompiling aiTestUtility.c...
( b( V2 P) p" D7 n+ |- w1 O% R3 G../Inc/app_x-cube-ai.h(77): error:  #5: cannot open source input file "network.h": No such file or directory2 j1 c8 {" G" X8 K0 i% w
  #include "network.h"3 g6 f6 T0 \: M, U4 Q$ i, E& p) U
../Middlewares/ST/X-CUBE-AI_Application/Validation/Src/aiTestUtility.c: 0 warnings, 1 error" ]3 v; X( \% t4 J% f: @
compiling aiValidation.c...: L  G6 [) V# K1 j2 ]
../Inc/app_x-cube-ai.h(77): error:  #5: cannot open source input file "network.h": No such file or directory
2 m+ Z7 N, m: V! ^1 W  #include "network.h"
, ?& x  h$ O+ ?  g5 n" v& t../Middlewares/ST/X-CUBE-AI_Application/Validation/Src/aiValidation.c: 0 warnings, 1 error
/ O2 u6 }5 v7 l2 i5 pcompiling pb_common.c...
! n% L1 o2 k( bcompiling pb_decode.c...
7 _' K6 K0 I3 B- U! ~2 E( Icompiling pb_encode.c...- i! x$ l5 n* e3 K1 ]. k  ?
compiling stm32msg.pb.c...
- j$ X7 s2 a& b, V"STM32F767_AI\STM32F767_AI.axf" - 5 Error(s), 0 Warning(s).
4 r) Y" }. b( U, s% aTarget not created.
Beatle 回答时间:2019-7-14 14:55:07
じ太阳当空照 发表于 2019-7-14 09:15
1 x$ g. w8 q2 y3 h7 |! F我真的不知道是哪出了问题,求大神指导,我导入以后,选好芯片,然后点击Additional Software进去,里面 ...

; Q" l  o9 ]+ E/ o( s, [; S首先确保已经安装了AI库
6 U( C4 s; H* F; c# |9 i, Q; {/ l; [/ ?% w! w
1.png
% L$ l4 y: |6 j) ?9 G+ L9 s" [使能Atificial intelligence后,配置好参数,确保自己使用的单片机是在列表中的。3 A! f9 l1 {5 f8 t

5 w! ~1 a& ~7 f! z% Q7 s/ U
9 N9 W5 v2 V6 R' Y1 g. ^- V 2.png
6 t: ^( `* F/ S4 G, j6 s+ Q" u& H. P5 h8 m8 x+ W: C  R

$ W  R7 ~9 |5 T* d# o2 q+ @3 {% \$ G. ~
5 {$ u6 h9 q) _3 |如果确定上面操作无误,界面还是空的话那就看看这里的配置是否和你真实的路径是一致的。' p7 z# C; ~' d. V; j

$ {( O3 H( }" z, G 3.png
& [/ Y: v0 z: w, D7 o
zero99 回答时间:2019-1-8 13:15:38
看看
wujialing4000 回答时间:2019-1-8 15:24:33
辛苦了,学习了。耐心的看完每句话。
奏奏奏 回答时间:2019-1-8 19:12:17
用DSP部分来算神经网络,感觉是不是后面ST要出专用的神经网络计算单元了吗?
creep 回答时间:2019-1-9 09:44:21
厉害了@Paderboy
Paderboy 回答时间:2019-1-9 09:46:24
多谢分享。。
STMCU-管管 回答时间:2019-1-9 10:05:06
Paderboy 发表于 2019-1-9 09:46! W" u/ Z. ~$ [0 T7 Y' J* t3 t
多谢分享。。

+ Z' I$ E$ j' I) ?厉害了大佬
qhq8001 回答时间:2019-1-9 10:51:07
大概了解一下,感谢分享
xujiantj 回答时间:2019-1-10 09:06:19
谢谢楼主!!!
h55 回答时间:2019-1-21 09:14:29
我只看见MODEL.H5没看见STM32F767AI.H5,为什么
木木&点点 回答时间:2019-1-21 16:11:57
hu-jian-li 发表于 2019-1-21 09:140 K! `0 Q+ K7 F- y; T5 _! m7 @
我只看见MODEL.H5没看见STM32F767AI.H5,为什么
% u0 r0 C+ e. V, N6 N8 u
model.h5就是我们需要导入到工程里的AI Keras的训练好的模型
杨满意 回答时间:2019-1-21 16:52:12
解释下输出结果的含义
木木&点点 回答时间:2019-1-23 15:23:29
杨满意 发表于 2019-1-21 16:52
2 O. x& }9 M7 @0 C% W4 S/ r. D解释下输出结果的含义

  j1 n" z" o* s; I" G输出吗   这是去使用库的AI神经算法
h55 回答时间:2019-1-28 11:02:50
点点&木木 发表于 2019-1-21 16:11
+ A3 O" ?) S. N- Z2 T3 X1 Nmodel.h5就是我们需要导入到工程里的AI Keras的训练好的模型
5 ~- T9 o5 e( O- s1 N/ A. ^
我导入model.h5就没反应了,没有出现他教程中的STM32F767AI.H5,请问要怎么操作
木木&点点 回答时间:2019-1-31 19:42:28
hu-jian-li 发表于 2019-1-28 11:026 n/ \* l# K) G# E5 K; @5 G+ E
我导入model.h5就没反应了,没有出现他教程中的STM32F767AI.H5,请问要怎么操作 ...
4 U' b* A0 c2 K* j3 `$ C& ^
导入到工程的时候,没出现STM32F767AI.h5吗
- F& R$ S6 p. a3 w1 W7 Q
123下一页

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版