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

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

[复制链接]
木木&点点 发布时间:2019-1-6 17:29
偶然看到一篇好文章,分享给大家。
+ [% V) {, S+ C8 d% S( Y

% K6 s' e0 O: L5 v1 X
1.jpg

) S4 z3 W5 d! Q  l
今天介绍下ST官方刚刚推出的CubeMx 自带的X-CUBE-AI(Artificial intelligent)插件功能,可以给现有的STM32 M3-M7高性能的处理器添加基于训练好的ANN 的模型用于不同的数据分析处理。

/ z% D4 S7 X( V$ t+ W3 P1 _! d
使用STM32Cube.AI简化了人工神经网络映射

, h1 y; u2 a4 V: `3 y" X
1.可与流行的深度学习培训工具互操作
2.兼容许多IDE和编译器
3.传感器和RTOS无关
4.允许多个人工神经网络在单个STM32MCU上运行
5.完全支持超低功耗STM32MCU
: Z+ c( P. H4 ^; M- w6 b# S
提高您的工作效率

6 Z0 j, O- _; l! H
利用DeepLearning的强大功能提高信号处理性能并提高STM32应用程序的生产率。创建人工神经网络并将其映射到STM32(通过CubeMx自动生成优化的代码),而无需手动构建代码。
以上就做个简短的介绍,想了解更多有关STM32Cube.AI可以访问下面的链接:http://www.st.com/content/st_com ... 2_gl_social_dec2018

4 t3 X' ~: ^6 Y1 P
那先前的准备工作就是需要安装最新版本的CubeMx 5.0.1
然后使用CubeMx 去安装X-CUBE-AI插件, 700多M的容量。。慢慢下载吧
3 G0 b/ c0 N% w6 z9 i. t8 O0 H
2.jpg

. w  Y9 r9 u8 }: Y+ |
下载好后,CubeMx里的Artificial intelligent
激活Enable

3 e$ j, s# s6 F; Z  _- X; g8 A
3.jpg
1 p8 ^0 Y; g( W- G; @
这里我们就可以看到里面的选项了
下载下来。。然后选择Keras 的AI API算法

( ?; n6 ^, a! G# X) ^, p( y
4.jpg

$ h* x( N. n! Y
model.h5就是我们需要导入到工程里的AI Keras的训练好的模型

/ I, L- ~# }5 s
5.jpg
2 o1 }# c9 e9 t. B4 N; z
Human Activity Recognition Using Convolutional Neural Network in Keras
人类活动识别卷积神经网络算法模型
6.jpg

: f/ ^/ c  D5 V/ h
然后我们导入到工程里
7.jpg

6 [4 h% u8 e. J
这里选择压缩参数,不同的压缩参数对MCU的flash容量
要求也不一样。。
8.jpg

& H+ t7 l8 i( a( ]
点击Analyze cube就好计算使用这个神经网络算法的ram和flash容量占用

( W) m9 Z, o4 P# J7 n/ [# p
9.jpg

1 F& w) {$ i8 j  T5 P. j% b
好了结果出来了,
9 S# D3 V- ]4 q* b5 T
10.jpg
$ d* B* i/ U) X2 o
经过分析后Cube会自动列出可以使用的MCU
然后显示在列表里
11.jpg
/ s& `8 a; U* e7 j# ?
这里举个例子,我们选择没有压缩优化
分析模型算法后的结果我没有匹配的MCU可以使用
: z  v- ?; R- v* a" g& H& }
12.jpg
  N- a, f" ]9 u  S5 |- S- M4 k
这是选择压缩比参数8的结果,可以支持很多的MCU使用这个神经网络算法。。

5 |) t% z- R4 l5 \- ]3 U5 R
13.jpg

# G4 z# D4 R, ]2 A3 H
好了,这里我们就选择STM32F767ZI Nucleo 板卡作为 这次演示使用的板卡

" H5 r9 N9 M; I9 j* U  n
14.jpg
好了选择好了,板卡,我们还需要给它添加扩展库,也就是AI库
# e& r+ E* e0 ~; |' g& Q0 L5 S) a
; F6 Y8 U8 X/ [6 n# j/ `
15.jpg

; u$ c8 M% w) i  s- Q  u% w$ F0 m) `) D7 l" Q4 m& {. K# U
选择好Validation 和打勾 AI core

8 B  Q( `4 k6 i$ P& n& J, W, ?
16.jpg
5 T4 s$ o; O/ C0 n- k5 I
然后在cube 左下方可以看到下图箭头 提示的插件功能
- Q1 x+ K6 d. x1 I9 C
17.jpg
; {/ F$ q1 G/ s6 G
我们需要打勾以下2个功能

% n- s& q4 i% ]- ]$ d
18.jpg
+ l5 K. Q+ [- a: s4 W
然后创建我的AI算法名称,这个名称会在后续的里自动创建好。
8 \: K. x  h' s3 {5 Z& i; T3 J3 B
19.jpg

! Y9 v. C+ [/ ]
添加好,我们下载好的AI神经网络算法,然后再Analyze下就好。。打勾表示验证通过

- x8 M  m% I8 O1 J+ h
20.jpg
4 z+ S+ O! T) S. b
然后我们需要配置我们的mcu的 CPU ICache 和 CPU DCache
$ O  r4 [) _- f3 N: {4 k
21.jpg

7 @" S  f' D3 D, g( t' h
然后配置MCU主频为216Mhz

4 V% _' S; O. }* p  p( X* ]) p
22.jpg
, ?* V7 y1 L* Q# u1 d" H6 P  R
0 ]% r) ]. ~4 A8 z
然后我们需要配置串口3和CubeMx进行通讯,验证我们工程。。。

- y: d: @) t$ B% b
23.jpg
  P5 H; |  T# z/ S: R( N
然后在 AI扩展功能里选择通讯端口为串口3
+ ~, R& U( c6 \0 Z# Z1 j
24.jpg
好了,工程差不多创建好了。接下来就是 配置工程的路径好 我们配置使用IAR 编译环境。。 然后Heap 然后要配置到2000 这个很重要,要是设置少了 系统就会奔溃(切记)
/ w: ]0 P. n: H, g, i* l# ~9 r+ K) d2 @3 l  M0 W! a/ q5 w& P
25.jpg
* o+ T, D9 z$ |5 i% ]! r, Z
好了工程生成好了,我们就可以 使用IAR 打开工程了 工程如下,工程里自动生成了基于AI的算法的所以文件

$ S+ [6 C, C3 ]2 `" U6 K! h- g
26.jpg
6 W- l  I7 Q8 n6 n" N
这里可以看到,基于AI训练好的模型数据列表。。。

3 @- d0 H& d  n$ L0 _. w) J% V' Q- v
27.jpg
$ A6 m. B" _0 k. F
好了,配置位STLINK,然后编译好就可以直接下载到板子上了

# {% f) M& T" X4 b0 B. S
28.jpg

& M  w1 L/ ]# P, I4 [
29.jpg
好了,现在我们需要回到CubeMx里,回到 AI扩展功能里。。 先重启下开发板,然后 点击Validation on target

( W! k' Y6 @" m9 ^
9 O5 X7 }8 Z! s3 S% x
30.jpg

7 n. R/ d# I, @2 i; E- \1 q
选择手动,然后选择对应的串口端口
( O0 U( a6 O+ I1 Q8 o
31.jpg

4 U. a% w8 e9 ]/ X$ V/ m8 f
这里可以看到验证已经开始了‘
, m+ r0 u( q/ P/ G
32.jpg
好了,结果出来了。我们可以在串口输出的信息里看到有关的数据
+ v- b' i6 U$ a: ]& j7 y
33.jpg
" P) ?8 t( |# |+ v* M/ ]
34.jpg
35.jpg

! e: H7 A9 I) ^0 E6 s3 \$ y
36.jpg

: o- c! `3 r+ k* q: ]
& t, X% G5 \# A1 T$ Y1 P5 ~5 o2 [' t; w
好了,基于CubeMx+AI扩展库的使用就分享到这了,想了解更多关于 使用STM32 AI的朋友可以关注ST官网的教程。。。
收藏 3 评论33 发布时间:2019-1-6 17:29

举报

33个回答
单片机爱好者 回答时间:2019-5-25 21:12:11
Build target 'STM32F767_AI'
7 S: {- l" r0 Y8 J- s8 Xassembling startup_stm32f767xx.s...
/ n) f- u9 ?+ R5 H) \# I$ m# kcompiling main.c...
$ `& w# H3 c- y, t../Inc/app_x-cube-ai.h(77): error:  #5: cannot open source input file "network.h": No such file or directory: A; p7 |/ l/ A1 M8 c
  #include "network.h"
( I9 ~5 ], G- m- j% _- c1 `../Src/main.c: 0 warnings, 1 error
0 }; p2 S' n- b1 vcompiling app_x-cube-ai.c...
" X* Q- O6 R- H9 c../Inc/app_x-cube-ai.h(77): error:  #5: cannot open source input file "network.h": No such file or directory
! P% q# `- L! _' \+ Z; K  #include "network.h"# ~  c  H, W4 u/ ^! C
../Src/app_x-cube-ai.c: 0 warnings, 1 error
& X( s! g" ]' W. gcompiling stm32f7xx_it.c...1 A6 _/ X4 s$ L6 O7 `
compiling stm32f7xx_hal_msp.c...6 ]- I: a2 z7 p$ i8 W9 y* `
compiling stm32f7xx_hal_cortex.c...
5 o( E/ c/ U7 G  h1 hcompiling stm32f7xx_hal_crc.c...9 n; O0 `' e7 [8 E  p8 b
compiling stm32f7xx_hal_crc_ex.c...0 ?/ d$ C! H* q! A! o: c
compiling stm32f7xx_hal_tim.c...2 P6 Z. _* L$ ^7 f3 m" C
compiling stm32f7xx_hal_tim_ex.c...
, r7 ^* q* ~# N, [. j3 Jcompiling stm32f7xx_hal_uart.c...
/ Y( L0 ]1 O( B$ Q2 f9 l( pcompiling stm32f7xx_hal_uart_ex.c.../ g7 |# }* H7 _; D2 t( g" L9 Y
compiling stm32f7xx_hal_rcc.c...
2 e5 L; l7 Q) s+ Q% r/ \compiling stm32f7xx_hal_rcc_ex.c...
2 C0 C$ ?2 s  [8 acompiling stm32f7xx_hal_flash.c...+ z! I6 I8 E4 e2 c
compiling stm32f7xx_hal_flash_ex.c...
- S0 f' y* ~; r7 u6 Mcompiling stm32f7xx_hal_gpio.c...* Q" R8 t5 T# w* o9 u
compiling stm32f7xx_hal_dma.c..., Q4 N' z, ]  Z
compiling stm32f7xx_hal_dma_ex.c...$ x0 d) O" p: K! @# a$ q( a. {7 m
compiling stm32f7xx_hal_pwr.c...
2 x" P5 J1 N* T/ W  Y9 ^% Tcompiling stm32f7xx_hal_pwr_ex.c...' ^, _# D8 W) v- F
compiling stm32f7xx_hal.c...4 U- q" ]* e. A0 d" F  e4 v5 v
compiling stm32f7xx_hal_i2c.c...
. F) P0 E. c2 t5 u+ P5 Xcompiling stm32f7xx_hal_i2c_ex.c...
  G& B) z2 p0 [. p' {) Bcompiling stm32f7xx_hal_exti.c...
5 t. y  W' {1 Y2 U3 f4 ^  u4 Ocompiling system_stm32f7xx.c..., J( G- y' l( V5 a# }5 V% W
compiling aiPbMgr.c...
6 H# @; W+ w* ~* M, Y: |. M3 ]! j../Inc/app_x-cube-ai.h(77): error:  #5: cannot open source input file "network.h": No such file or directory' W  s8 @  |; x4 k4 |) w2 n( n
  #include "network.h"
+ u, N& e8 \' P* A../Middlewares/ST/X-CUBE-AI_Application/Validation/Src/aiPbMgr.c: 0 warnings, 1 error- G$ J5 a( N' C, X0 x
compiling aiTestUtility.c...
$ z9 H& F+ |& V# U' Z../Inc/app_x-cube-ai.h(77): error:  #5: cannot open source input file "network.h": No such file or directory
' K, o$ P; o! L" B2 K  #include "network.h"% Z' K, t9 ~! h7 ]5 B& H0 h
../Middlewares/ST/X-CUBE-AI_Application/Validation/Src/aiTestUtility.c: 0 warnings, 1 error4 t/ }6 ]( A; `) Y2 q5 w* W; s
compiling aiValidation.c...
, n: k, y6 L' j% f# Q# {) {1 {/ d1 a../Inc/app_x-cube-ai.h(77): error:  #5: cannot open source input file "network.h": No such file or directory: R# u, g6 }; k% ]% P
  #include "network.h"
! \1 s8 s- P" r$ q% p3 ]! a7 }& W" A../Middlewares/ST/X-CUBE-AI_Application/Validation/Src/aiValidation.c: 0 warnings, 1 error
. [( b6 G, t) Icompiling pb_common.c..." @- \+ z) @# E% K- l) K
compiling pb_decode.c...  q# W3 F& c9 q( u% B
compiling pb_encode.c...# Q( {4 `- c* T: C* |6 a8 q/ c7 h
compiling stm32msg.pb.c...
. b! U9 I( \$ `" Q"STM32F767_AI\STM32F767_AI.axf" - 5 Error(s), 0 Warning(s).
2 U" l! E# b4 ?2 FTarget not created.
单片机爱好者 回答时间:2019-5-25 21:11:53
Build target 'STM32F767_AI'
4 c; E. J) b" h0 ?2 n! c( _assembling startup_stm32f767xx.s...7 v/ A6 }' c9 b3 P  @7 e) x. I
compiling main.c..., g& O8 f( |4 W6 G
../Inc/app_x-cube-ai.h(77): error:  #5: cannot open source input file "network.h": No such file or directory' ?& j2 s0 I" d3 N
  #include "network.h"
& F, N' h* U; F! ?5 Z  Q9 z../Src/main.c: 0 warnings, 1 error
  K+ H( |( R( \* icompiling app_x-cube-ai.c...
' p% K$ q9 p5 f" L../Inc/app_x-cube-ai.h(77): error:  #5: cannot open source input file "network.h": No such file or directory/ ~% _! g5 y9 ^7 `9 ~1 Z
  #include "network.h": w4 [5 D- I- m" ~6 n
../Src/app_x-cube-ai.c: 0 warnings, 1 error
. h8 B' w, F1 |compiling stm32f7xx_it.c...5 e# p7 h! y% N. [3 n
compiling stm32f7xx_hal_msp.c...
/ Z1 n0 g; _4 ?" s/ D9 t# S7 ?+ ocompiling stm32f7xx_hal_cortex.c...
+ C5 O6 n1 `/ Y! f/ K+ bcompiling stm32f7xx_hal_crc.c...( `& @  }( E# ]2 o. v: j! L! Y
compiling stm32f7xx_hal_crc_ex.c..., ^7 m' `4 P' ]
compiling stm32f7xx_hal_tim.c...
) u6 j& U4 O, |) {compiling stm32f7xx_hal_tim_ex.c...
5 B- V% N. r4 w& Y+ N% M' W- jcompiling stm32f7xx_hal_uart.c...5 F0 n7 v4 ~% y1 [
compiling stm32f7xx_hal_uart_ex.c...& \; b; I. P% n  e
compiling stm32f7xx_hal_rcc.c...
: J- e, x+ }: b. v  ucompiling stm32f7xx_hal_rcc_ex.c...' T! \& G! r' u) D& u! O& Z
compiling stm32f7xx_hal_flash.c...) K6 R% q1 K3 e4 G7 ]
compiling stm32f7xx_hal_flash_ex.c...
6 I# Y% Y- C, X4 D4 qcompiling stm32f7xx_hal_gpio.c...( `  C1 W* f% a5 F6 M9 y
compiling stm32f7xx_hal_dma.c...
9 i5 S1 @+ j0 ?; x0 Vcompiling stm32f7xx_hal_dma_ex.c...
9 ]& P& d' ?# D$ Ocompiling stm32f7xx_hal_pwr.c...' w' e, v; c" H
compiling stm32f7xx_hal_pwr_ex.c...7 [  X: @+ @0 Y& B
compiling stm32f7xx_hal.c...
# ^% O# b* C$ V/ o$ `8 L( scompiling stm32f7xx_hal_i2c.c...
" N& r" R! X: [4 m+ f4 @, o2 ocompiling stm32f7xx_hal_i2c_ex.c...
% g0 I$ _8 b; ~7 e* r3 z5 Qcompiling stm32f7xx_hal_exti.c...
( h  v$ `7 a4 N  S5 icompiling system_stm32f7xx.c...
( z- M& Z  A. i: |) rcompiling aiPbMgr.c...
" {3 L) S3 T$ c; Z+ A. A../Inc/app_x-cube-ai.h(77): error:  #5: cannot open source input file "network.h": No such file or directory6 t; }0 H, e0 a1 n
  #include "network.h"6 G' D! k. }/ G2 A4 N7 H
../Middlewares/ST/X-CUBE-AI_Application/Validation/Src/aiPbMgr.c: 0 warnings, 1 error
3 }* R/ p. T5 F' o+ k! Icompiling aiTestUtility.c...0 T7 V0 w4 k7 S
../Inc/app_x-cube-ai.h(77): error:  #5: cannot open source input file "network.h": No such file or directory/ Y( X* d' N9 m
  #include "network.h"2 L- ?; L, f: w% X* u* d
../Middlewares/ST/X-CUBE-AI_Application/Validation/Src/aiTestUtility.c: 0 warnings, 1 error  r6 r3 t/ V1 P4 I& l
compiling aiValidation.c...
* [7 Z- f# |+ J8 Z  m& z0 G8 t../Inc/app_x-cube-ai.h(77): error:  #5: cannot open source input file "network.h": No such file or directory7 H* @8 B, E5 I9 R0 K# v5 D
  #include "network.h"
  Z  a. f. S+ @. t0 Y' u) Q5 ~' P../Middlewares/ST/X-CUBE-AI_Application/Validation/Src/aiValidation.c: 0 warnings, 1 error% j) ~) N: F5 n; t
compiling pb_common.c..." m3 p0 k3 ^3 L# N  n- X5 [
compiling pb_decode.c...
1 t$ F1 R( ]* S" ?8 c: s1 J2 u) Z: bcompiling pb_encode.c...
- a4 B3 D4 K  Ecompiling stm32msg.pb.c.../ ]% [  y$ q# [3 K! w. u
"STM32F767_AI\STM32F767_AI.axf" - 5 Error(s), 0 Warning(s)./ L, c. @$ z1 r* A5 n2 A+ d
Target not created.
Beatle 回答时间:2019-7-14 14:55:07
じ太阳当空照 发表于 2019-7-14 09:15
7 [1 ]7 h# r1 I7 i- M. f: ~# q我真的不知道是哪出了问题,求大神指导,我导入以后,选好芯片,然后点击Additional Software进去,里面 ...
8 q7 Z+ K1 M% c1 C. O. z. D9 n
首先确保已经安装了AI库
- U( ^% H% N( `5 q. K- d
' ~  r6 O$ f/ a6 W4 v 1.png # }* L" D" W3 n
使能Atificial intelligence后,配置好参数,确保自己使用的单片机是在列表中的。
4 }. E* I. C- @3 }- Y
: s9 {5 l- `3 v7 a/ `  ]# H  a8 Q$ ]$ v8 I
2.png
% a) f# q0 ]  G3 S. q
2 W( S& t% E* v8 J. J  v9 }/ [' M9 w) G% {/ t% r# m
1 c6 Z& d) C( Z% V6 w8 C% Y
如果确定上面操作无误,界面还是空的话那就看看这里的配置是否和你真实的路径是一致的。
4 L% X5 s9 Y( I1 ?' y3 Z0 O$ v. ?. D% i
3.png - l3 w' R% _/ I/ A( J" v3 f" d
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
+ n2 {$ p& @1 P多谢分享。。
7 D" L* \$ j% L' ?2 {1 ]* M6 K
厉害了大佬
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:148 E  @9 j* A+ o: B2 S% y+ _9 A" |0 q2 D
我只看见MODEL.H5没看见STM32F767AI.H5,为什么

, M# c  b6 @8 X4 G* T9 qmodel.h5就是我们需要导入到工程里的AI Keras的训练好的模型
杨满意 回答时间:2019-1-21 16:52:12
解释下输出结果的含义
木木&点点 回答时间:2019-1-23 15:23:29
杨满意 发表于 2019-1-21 16:524 ^) q, O5 _+ @
解释下输出结果的含义

" a+ `0 t5 I0 q; C( ~输出吗   这是去使用库的AI神经算法
h55 回答时间:2019-1-28 11:02:50
点点&木木 发表于 2019-1-21 16:11# Q2 {. g: l& f* @3 `
model.h5就是我们需要导入到工程里的AI Keras的训练好的模型

. z' V! d9 m, c; W1 ]8 _我导入model.h5就没反应了,没有出现他教程中的STM32F767AI.H5,请问要怎么操作
木木&点点 回答时间:2019-1-31 19:42:28
hu-jian-li 发表于 2019-1-28 11:02
4 o. K1 |, l2 \3 [我导入model.h5就没反应了,没有出现他教程中的STM32F767AI.H5,请问要怎么操作 ...
& u. u( Z; D  w. }5 ^* ~- ^9 e
导入到工程的时候,没出现STM32F767AI.h5吗4 ^+ F' Z* T" u6 B* v
123下一页
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版