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

实战经验 | STM32 AI Model Zoo 的安装及实例介绍

[复制链接]
STMCU-管管 发布时间:2025-2-6 09:24
01
! d+ k+ z/ V% s3 Z6 O8 Y! |1 o7 w简介
+ W# x# \' N. A
! P0 v' x" u0 R+ J( }; hSTM32 Model Zoo是指ST在github上开源的AI相关模型仓库,其包含的应用包括:手势识别,人体活动姿态识别,图片分类,目标检测等相关应用代码,用户可以使用其中的代码进行简单的配置并进行训练,然后使用STM32Cube.AI工具或STM32CubeAI Developer Cloud 得到模型的Flash,Ram等情况,并进行模型的测试验证,然后部署到开发板中。
0 T. A* `; g, E本文将以手势识别为例,介绍Model Zoo的使用。
1 \% {8 M+ o7 D' `: Y
8 t' S2 z8 t4 V$ }0 }& A, P8 \02
8 t3 _* G/ Y+ l! F环境安装
8 R5 U! X. ^' z6 W: s2 n. }
* j' S& N, `- G) t9 m3 T4 W详细的安装步骤可以参考ST的wiki页面。
( L  a% c# k+ m. ^; n! i$ ^
. S. g+ e  F3 Z, s% O' \2.1. 设置代理等环境变量
9 b  l$ X1 d& b
! [! G6 {+ D- I: U9 M
为了后续使用pip进行python包的安装过程顺利进行,需要设置好代理。需要设置的环境变量包括:
, n8 _2 H& I! y& T. C
12.png
注意特殊字符需要编码成utf-8格式,比如@要替换为%40,其他的特殊字符包括%、@、&、!等。stmai_username 和stmai_password 可以不设置,如果不设置,每次访问 stm32CubeAI Devleloper cloud 都需要手动重新输入用户名和密码。
4 V6 D) ?2 I- L! o  I# D2 X
) |0 _- H9 l7 H4 R: n9 E2.2. 安装 STM32Cube.AI8 x5 F2 r+ ~6 u7 g0 l
8 z: T" U' y& r0 Q5 J
可以使用云端的STM32Cube.AI Developer Cloud, 也可以在本地安装STM32Cube.AI。7 I3 g) U* V1 B0 h' ], f

' @/ e( G$ Q! U4 d5 H% j( u如果使用云端,需要保证网络连接,并且注册 myST 账号,确保自己可以正常访问 STM32Cube.AI Developer Cloud 网站。- R: ~) \$ W6 V- i) x* j9 J& W4 d& p+ Y3 L
. M1 N: t+ e+ ?8 R# z8 P
如果使用本地,可以通过CubeMX进行安装。
  ^5 m3 c& n  p
8 o& G, A+ _! T+ S  S( t2.3. 安装STM32 model zoo 7 ?6 x7 d2 x! n; j7 X1 M# D! b4 t
3 D' N2 \8 `' P5 i$ x
可以使用git或使用zip包获取STM32 model zoo相关的代码。github仓库位于:https://github.com/STMicroelectronics/stm32ai-modelzoo
" ^1 a5 p& G& ^' q1. 使用Git:git clone https://github.com/STMicroelectronics/stm32ai-modelzoo.git
8 f2 M7 l! w9 Q% R5 h* L2. 使用zip:从git仓库中下载zip压缩包,解压即可。
/ i9 m$ @* e) j) M
& }5 B( {6 t+ T2.4. 安装Python环境
7 b9 p  N: j% q; C. }6 A+ e, Y
/ e% h# H0 [$ v5 v如果没有本地Python,需要安装好Python,推荐Python v3.10.x。可以使用 Python 或miniconda来管理python环境,推荐使用miniconda。具体安装步骤请参考上文提到的ST WIKI页面。
/ V6 Y7 b$ u. w( H7 p1 e$ f5 \3 S2 t9 h  w) o+ R
2.5. 安装STM32CubeIDE
4 x8 f  Q  O& f7 H& f0 r, e; z0 q! w1 F' ~- |2 Y
需要安装STM32CubeIDE 来重新编译生成的固件,安装包可以通过ST官方网站下载。注意:STM32CubeIDE 和 STM32Cube.AI 的安装路径不要有空格,否则可能会出错。
; m. ]0 [4 L3 h5 l! x# A; J% C+ o) [& Q6 V, o
2.6. 更新yaml文件  b8 F7 N3 l" D( X

" q/ {! K7 l. y7 d7 @4 \Model zoo 中的所有yaml中的path_to_stm32ai 和path_to_cubeIDE,需要和本地的安装目录保持一致。- `& r8 t+ J6 Y( |
注意:Model zoo使用mlflow管理生成的模型,Windows的最大路径长度限制为 256,可能会导致问题,建议通过注册表修改LogPathsEnabled为1避免该问题。该键位 Computer/HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/FileSystem/" [+ m- H$ B, [2 e+ y: w. |

+ d4 ~" s- i4 `" a7 T' C% ?03
) N5 v# a  a. J手势识别应用
( b( ]4 T2 f: `, g' a
* D1 b; m9 x4 z, v; j, @% J4 w手势识别应用位于stm32ai-modelzoo的hand_posture目录下,使用ST的TOF传感器VL53L5CX或VL53L8CX采集数据。用于识别静态的手势,比如like, dislike, love 等手势。其demo应用部署在NUCLEO-F401RE和X-NUCLEO-53LxA1扩展板组合的开发板上。
' C& X7 O6 R& v0 V. s% |1 k4 h* Y
13.png
▲ 图1. 部署环境和开发板
3.1. 数据集
. c1 X5 P  u/ r8 A/ L0 J4 p; R! f# \+ e8 R
手势识别应用的数据集可以直接使用hand_posture/datasets/目录下的数据集文件:ST_VL53L8CX_handposture_dataset.zip,解压后的数据集如下图所示:
$ l2 t& Y. }* U0 i& Q" L
14.png
▲ 图2. 手势数据集
也可以使用ST提供的数据采集和标记工具STSW-IMG035_EVK,进行数据采集和标记。点击进入工具的下载地址。
1 }) j% D9 Y" ~  D
15.png
▲ 图3. 手势数据采集和标记工具
$ U& R  d/ [1 |0 L- X4 Y* m
3.2. 配置
! q7 r  Z" U4 k/ A  Q( Q5 G- w. i8 Q( b% J1 V" L. h' E
在stm32ai-modelzoo\hand_posture\src目录下,有user_config.yaml配置文件,里面可以对各种参数进行配置。  [8 J9 p3 L, I0 J/ J0 s/ Z, e
. i% [: \" J" y' [
3.2.1. 训练
4 b' K8 g( S/ g/ c5 B操作模式operation_mode的配置
9 e& y3 ~. k! W8 J! Y操作模式选择training可以进行模型训练,其他可选择的操作模式包括evaluation, deployment, benchmarking。
7 T: r3 m$ e0 Q" z. Z5 y5 @
16.png
▲ 图4. 选择模式
数据集的配置:# {0 p4 F0 l2 w5 G
17.png
▲ 图5. 数据集配置

1 r$ u9 l% a5 `数据集可以来源于仓库的数据集,也可以来源自自己采集的数据,其内容需要和文 件stm32ai-modelzoo\hand_posture\src\utils\handposture_dictionnary.py的数据一致。验证集可以不指定,默认将使用数据集内的20%作为验证。6 U6 w$ Q5 |. v
预处理和数据增强的配置:
5 L& |1 ^5 h$ F2 o0 J
18.png
▲ 图6. 预处理和数据增强
preprocessing:. O( A6 {. t! g* n$ A8 S
- Max_distance:单位为mm,代表传感器的最远距离,如果超过这个距离,就 从数据集中丢弃该帧。3 v: A. @; e- [+ Y: z3 @, Q0 H
- Min_distance:单位为mm,代表传感器的最远距离,如果小于该距离,则从 数据集中丢弃该帧。  i. _, o3 _0 Q" ?5 y* P4 e" \+ l% p
- Background_distance:单位为mm,手势背景的最大间隔,超过这个间隔的 区域将会被忽略掉。) q" H2 n' t' O$ D, N) |8 Y+ O# c

7 u& ^0 w* a& R" e3 O; k; u% m6 bdata_augmetation: $ `. f+ H/ a* R/ y' O$ a  X$ I
使用数据增强可以在一定程度上提升模型的泛化能力,并且当数据比较少的时候可以补充数据集,目前支持的增强模式包括:水平翻转,垂直翻转,水平+垂直翻转。
% Y0 v$ ?4 @5 q8 e训练参数的配置:训练参数的配置如下图7所示,具体内容不再赘述。
1 }9 [5 J* n+ n% v, p
19.png
▲ 图7. 训练参数的配置
3.2.2. 评估 / y1 O( c+ S; R! G4 E
操作模式operation_mode选择评估(evaluation)可以进行模型评估,评估的内容主要包括模型flash,ram的占用量,模型的执行时间等。tools的配置如下:/ d0 ?/ \: R1 n& G$ y& b
20.png
▲ 图8. Tools的配置
) |3 x  u+ _" s- H( A3 T% U# {; \' s. [
on_cloud:是否需要使用STM32Cube.AI开发者云对模型进行评估,如果不使用云,选择False,则可以使用本地的Cube.AI工具。
$ q0 _  {/ a+ _  w, D1 G4 _5 K5 z" r8 u+ q  t9 }' ^
path_to_stm32ai和path_to_cubeIDE需要配置成自己本地STM32Cube.AI和 STM32CubeIDE的路径。
: J! ?+ N3 e3 V* }2 B  y  ^1 Y, L% |3 r/ O" B$ ^
3.2.3. 部署4 ^& @" N0 M% z/ o( Y2 I

( |% t0 }3 ?$ l$ U, x# m/ Z+ H操作模式operation_mode选择部署(deployment)可以进行模型部署。当需要部署到ST开发板进行测试时,需要确保以下配置都正确:6 T/ E5 c- u/ z/ t9 `8 o
21.png
▲ 图9. 部署相关的配置
' K' i7 F+ V0 L/ A/ Z1 o7 ^
3.3. 运行脚本 ! E" z+ k, W0 v; d# f

$ e! m, o/ t- y" f在安装好python环境,并且配置好配置文件之后,就可以运行脚本进行训练,部署或评估流程了。6 G, ?# w$ x" B, `

6 o1 Q* i* a' S8 X3.3.1. 模型训练
$ `" K0 G( Y& C% U; R( V' _# p直接运行脚本:
6 i3 t1 [. r) l: E/ K➢ python stm32ai_main.py
; J% E7 [6 B/ u6 K# D" y或者指定模式运行脚本:
1 ?% X* D1 h5 a0 Z➢ python stm32ai_main.py operation_mode=”training”
' `$ A& [' p( t' S# p训练过程中的输出结果:
  |. c) B0 r6 P4 m
22.png
▲ 图10. 训练中的输出结果
23.png
▲ 图11. 混淆矩阵
训练完成的结果保存在:experiments_outputs/<时间戳>目录下,包含了训练的log,训练曲线,混淆矩阵,模型等信息。5 a0 [- o. _4 |4 z. D" ]" Q8 y

! b: L# c9 ?2 p+ b* ]3.3.2. 可视化训练结果
# Z- A1 _- g8 `1 ?& S0 i进入logs所在目录(位于experiments_outputs/<时间戳>目录下),然后运行 tensorboard:
& U: T1 H* w! ^8 K➢ tensorboard --logdir logs ; f: ?$ T( W) X5 g( ]4 a
打开网页后,可以看到整个训练过程中的曲线,比如loss曲线,学习率曲线,epoch 曲线等等。
' C; ~. |+ b- `/ ?, b
24.png
▲ 图12. 准确率曲线
也可以通过mlflow查看实验过程中保存的参数信息,模型实验对比信息等等。进入experiments_outputs目录,然后执行以下命令:
2 w1 ~; g# C( C9 ]3 K7 Z" u➢ mlflow ui
# r* W9 X1 T2 z
25.png
▲ 图13. Mlflow界面
3.3.3. 模型评估
  r( w/ Y3 E0 V! B) ?将上一步生成的模型路径,填写到user_config.yaml的model_path目录中,然后运行以下命令,可以查看运行模型评估脚本,并查看结果:2 [1 g, x# m' Q3 X* s+ \. g. \
➢ python stm32ai_main.py operation_mode=”evaluation”
( L* M7 u- O2 I1 W
26.png
▲ 图14. 配置文件和模型评估结果
3.3.4. 基准测试 4 m9 x" v( L+ b2 d3 ], H- u
在上一步完成后,可以运行以下命令,进行模型的基准测试,可以获取模型的flash, ram,macc等信息:
: \: x2 }  i0 L8 ^➢ python stm32ai_main.py operation_mode=”benchmarking”
# E6 n1 u+ q% M: b9 |5 R! \如果不使用开发者云,使用本地的STM32CubeAI,需要将on_cloud改为False,如下图:
$ O6 Q& `* b* [8 C: _5 P  ^; z
27.png
▲ 图15. 配置文件和基准测试
: L; D% C5 s6 k1 |& k
3.4. 部署
# {. Q% [% X  b; }% |) Q  a$ M; a. h+ U
连接好开发板,设置好STM32CubeIDE的路径后,运行以下命令可以编译工程并部署到开发板:1 k/ K" j9 S, {, s6 s4 S
➢ python stm32ai_main.py operation_mode=”deployment”
" h7 f3 l% l' H; H: J
28.png
▲ 图16. 部署流程
3.5. 总结
. W$ i, G4 h4 F4 B, t8 M0 Q本文介绍了STM32 model-zoo的基本内容,并以手势识别为例,介绍了具体的使用方法,包括模型训练,如何查看模型训练后的结果以及如何部署模型。对于其他model zoo 内的应用案例,感兴趣的话可以去github上下载整个仓库,然后进行阅读并使用。7 M' _3 D/ ]" ?' g" o* h; V
4 A4 L( y, U& O* ]
▼▼▼
点击按钮下载《STM32 AI Model Zoo的安装及实例介绍》原文档。
, \6 K% e+ |" f点击下载
# O0 ]6 Z/ o% ^ LAT6021_在STM32MP13x系列MPU上裸跑应用程序_v1.0.pdf (3.43 MB, 下载次数: 46)
赞 收藏 1 评论0 发布时间:2025-2-6 09:24

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版