摘要:為什么可以在STM32上面跑神經(jīng)網(wǎng)絡(luò)?簡而言之就是使用STM32CubeMX中的X-Cube-AI擴展包將當(dāng)前比較熱門的AI框架進行C代碼的轉(zhuǎn)化,以支持在嵌入式設(shè)備上使用,目前使用X-Cube-AI需要在STM32CubeMX版本5.0以上,支持轉(zhuǎn)化的模型有Keras、TFlite、ONNX、Lasagne、Caffe、ConvNetJS。Cube-AI把模型轉(zhuǎn)化為一堆數(shù)組,而后將這些數(shù)組內(nèi)容解析成模型,和Tensorflow里的模型轉(zhuǎn)數(shù)組后使用原理是一樣的。
一、環(huán)境安裝和配置
- STM32CubeMX
- MDK/IAR/STM32CubeIDE
- F4/H7/MP157開發(fā)板
二、AI神經(jīng)網(wǎng)絡(luò)模型搭建
這里使用官方提供的模型進行測試,用keras
框架訓(xùn)練:

https://github.com/Shahnawax/HAR-CNN-Keras
模型介紹
在Keras中使用CNN進行人類活動識別:此存儲庫包含小型項目的代碼。該項目的目的是創(chuàng)建一個簡單的基于卷積神經(jīng)網(wǎng)絡(luò)(CNN)的人類活動識別(HAR)系統(tǒng)。該系統(tǒng)使用來自3D加速度計的傳感器數(shù)據(jù),并識別用戶的活動,例如:前進或后退。HAR意為Human Activity Recognition(HAR)system,即人類行為識別。這個模型是根據(jù)人一段時間內(nèi)的3D加速度數(shù)據(jù),來判斷人當(dāng)前的行為,比如走路,跑步,上樓,下樓等,很符合Cortex-M系列MCU的應(yīng)用場景。使用的數(shù)據(jù)如下圖所示。

HAR用到的原始數(shù)據(jù)
存儲庫包含以下文件
- HAR.py,Python腳本文件,包含基于CNN的人類活動識別(HAR)模型的Keras實現(xiàn),
- actitracker_raw.txt、包含此實驗中使用的數(shù)據(jù)集的文本文件,
-
model.h5
,一個預(yù)訓(xùn)練模型,根據(jù)訓(xùn)練數(shù)據(jù)進行訓(xùn)練, - evaluate_model.py、Python 腳本文件,其中包含評估腳本。此腳本在提供的 testData 上評估預(yù)訓(xùn)練 netowrk 的性能,
- testData.npy,Python 數(shù)據(jù)文件,包含用于評估可用預(yù)訓(xùn)練模型的測試數(shù)據(jù),
- groundTruth.npy,Python 數(shù)據(jù)文件,包含測試數(shù)據(jù)的相應(yīng)輸出的地面真值和
- README.md.
這么多文件不要慌,模型訓(xùn)練后得到model.h5
模型,才是我們需要的。
三、新建工程
1.這里默認大家都已經(jīng)安裝好了STM32CubeMX軟件。
在STM32上驗證神經(jīng)網(wǎng)絡(luò)模型(HAR人體活動識別),一般需要STM32F3/F4/L4/F7/L7系列高性能單片機,運行網(wǎng)絡(luò)模型一般需要3MB以上的閃存空間,一般的單片機不支持這么大的空間,CUBEMX提供了一個壓縮率的選項,可以選擇合適的壓縮率,實際是壓縮神經(jīng)網(wǎng)絡(luò)模型的權(quán)重系數(shù),使得網(wǎng)絡(luò)模型可以在單片機上運行,壓縮率為8,使得模型縮小到366KB,驗證可以通過;

然后按照下面的步驟安裝好CUBE.AI的擴展包

這個我安裝了三個,安裝最新版本的一個版本就可以。

接下來就是熟悉的新建工程了

因為安裝了AI的包,所以在這個界面會出現(xiàn)artificial intelligence
這個選項,點擊Enable
可以查看哪一些芯片支持AI

接下來就是配置下載接口和外部晶振了。


然后記得要選擇一個串口作為調(diào)試信息打印輸出。

選擇Software Packs
,進入后把AI
相關(guān)的兩個包點開,第一個打上勾,第一個選擇Validation
。


- System Performance工程:整個應(yīng)用程序項目運行在STM32MCU上,可以準確測量NN推理結(jié)果,CP∪U負載和內(nèi)存使用情況。使用串行終端監(jiān)控結(jié)果(e.g.Tera Term)
- Validation工程:完整的應(yīng)用程序,在桌面PC和基于STM32 Arm Cortex-m的MCU嵌入式環(huán)境中,通過隨機或用戶測試數(shù)據(jù),遞增地驗證NN返回的結(jié)果。與 X-CUBE-A驗證工具一起使用。
- Application Template工程:允許構(gòu)建應(yīng)用程序的空模板項目,包括多網(wǎng)絡(luò)支持。
之后左邊欄中的Software Packs
點開,選擇其中的X-CUBE-AI
,彈出的Mode
窗口中兩個復(fù)選框都打勾,Configuration
窗口中,點開network
選項卡。

選擇剛剛配置的串口作為調(diào)試用。

點擊add network
,選擇上述下載好的model
點h5模型,選擇壓縮倍數(shù)8;

點擊分析,可從中看到模型壓縮前后的參數(shù)對比

點擊validation on desktop 在PC上進行模型驗證,包括原模型與轉(zhuǎn)換后模型的對比,下方也會顯示驗證的結(jié)果。

至此,模型驗證完成,下面開始模型部署
四、模型轉(zhuǎn)換與部署
時鐘配置,系統(tǒng)會自動進行時鐘配置。按照你單片機的實際選型配置時鐘就可以了。



最后點擊GENERATE CODE
生成工程。

然后在MDK中編譯鏈接。

選擇好下載器后就可以下載代碼了。


然后打開串口調(diào)試助手就可以看到一系列的打印信息了。

代碼燒寫在芯片里后,回到CubeMX中下圖所示位置,我們點擊Validate on target
,在板上運行驗證程序,效果如下圖,可以工作,證明模型成功部署在MCU中。


這次就這樣先跑一下官方的例程,以后再研究一下,跑跑自己的模型。
原文標題:我在STM32單片機上跑神經(jīng)網(wǎng)絡(luò)算法
文章出處:【微信公眾號:TopSemic嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4819瀏覽量
106047 -
STM32
+關(guān)注
關(guān)注
2301文章
11073瀏覽量
369342 -
模型
+關(guān)注
關(guān)注
1文章
3609瀏覽量
51418
原文標題:我在STM32單片機上跑神經(jīng)網(wǎng)絡(luò)算法
文章出處:【微信號:TopSemic,微信公眾號:TopSemic嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
評論