stm32部署神經(jing)網(wang)絡
時間:2025-07-14 來源:華清遠見
一、背景與意義
1.1 背景
隨著ai的大力發展,推(tui)動了智能化向終端(duan)的延伸。MCU這類(lei)設備雖然(ran)資源受限(xian),但是近年來AI模型(xing)的輕量化技(ji)術(shu)(如模型(xing)壓縮(suo)、硬件加(jia)速、框架優(you)化)快速發展,為單片機部署AI提供了可(ke)行性。
1.2 意義
傳(chuan)統AI應用(yong)依賴“數據上傳(chuan)云(yun)端→模型推理→結果(guo)回傳(chuan)”的模式,但這(zhe)種模式存在網(wang)絡(luo)延遲(chi)和可靠性風險,
單片機部署AI模型后,數據(ju)無需外(wai)傳即可本(ben)地完成推理,將響應時(shi)間從“百毫秒級”壓縮到“微秒級”,同(tong)時(shi)避免網絡依(yi)賴,
單片機的典型應用場景(如物(wu)聯網(wang)終端、可穿戴設備、智能家居傳(chuan)感器)往(wang)(wang)往(wang)(wang)對功耗(hao)、體積、成本(ben)極度敏感,
若依賴云端處理(li),設備需持續上傳(chuan)數據(消耗流(liu)量)并保持網絡連接(增加射頻模塊(kuai)功耗),導致續航大(da)幅縮短。
通過(guo)部署輕量化AI模(mo)型(如(ru)經過(guo)剪枝、量化、知識蒸餾(liu)優化的模(mo)型),單(dan)片機可在極(ji)低算(suan)力(li)下完成AI任(ren)務(wu)。
隨著數(shu)據(ju)(ju)安全法規的(de)完(wan)善,敏(min)感數(shu)據(ju)(ju)的(de)本地化處理成為剛(gang)需。
二、stm32部署神經網絡
2.1 方案
在STM32單片機上部署神(shen)經網絡(luo)模型,一般有兩種方案1.移植支持MCU的神(shen)經網絡(luo)框架, 2.采用STM32Cube.AI工具。
方案(an)1:需要自己尋(xun)找合適的(de)框架,并完成移植,通用性更好。
方案2:僅支持(chi)stm32系列單片機,甚至部(bu)分系列不支持(chi),但該工具可以(yi)結合STM32CubeMX環境使用(yong),比較方便。
2.2 NNoM庫
2.2.1 簡介
NNoM是一個(ge)專門為了(le)神經網(wang)絡在 MCU 上運行的(de)框架。 NNoM 是一個(ge)定點神經網(wang)絡庫, 現在支(zhi)持(chi) 8-bit定點格式。當前 NNoM 支(zhi)持(chi)數(shu)十(shi)種操作,卷積,池化,激活,矩陣計(ji)算等等。此(ci)外還提供多種在線評估方(fang)法(fa),包括時間統(tong)計(ji),內存統(tong)計(ji),Top-K 準確度,Confusion Matrix 等等。

它擁有以下(xia)優點(dian):
快速開發(fa): 電腦上訓練的 Keras 模型(xing)直接轉換成 C 文(wen)件。
默認(ren)純C后端: 移植和使(shi)用暢通(tong)無阻(zu),支持32/64bit,MCU/PC。
支持復(fu)雜(za)結構(gou): 支持多種復(fu)雜(za)的(de)網絡模型結構(gou)。
完善(shan)的文檔: 擁(yong)有 API 文檔,入門(men)指南(nan),優(you)化指南(nan)。
入門簡(jian)單: 多個從簡(jian)單到復雜的(de)例子,完全開源。
MCU 上的神(shen)經網絡能(neng)做什(shen)么?
語音關鍵(jian)詞識別 (KeyWord Spotting)
使(shi)用運動(dong)傳感器識別活動(dong)狀態(tai) (Human Activity Recognition)
神經網絡控(kong)制系統(tong) (替代PID等傳統(tong)控(kong)制方法)
圖像處理(li) (帶專(zhuan)用加速器(qi)的 MCU)
...
目錄結構

2.2.2 移(yi)植NNoM庫
步驟1:新建stm32 keil工程

步(bu)驟2:下載源碼//gitcode.com/gh_mirrors/nn/nnom,將inc、port、src拷貝(bei)到stm32 keil工(gong)程中(zhong)。

步驟3:需要(yao)將目錄中的所有.c添加到工程,并添加頭(tou)文件路徑。


步驟4:由于NNoM庫需要(yao)消耗大量空(kong)間,建議修改編譯選項,例如-o1
步(bu)驟5:后期將訓練好(hao)的模型文件(jian)(weights.h文件(jian))添(tian)加(jia)到keil工程,編寫對(dui)應的代碼(ma)便可以(yi)進行推理。
2.3.1 簡介
STM32Cube.AI是一款適用于STM32微控(kong)制(zhi)(zhi)器的(de)AI模(mo)型優(you)(you)化工(gong)具,主要用于在(zai)STM32微控(kong)制(zhi)(zhi)器上優(you)(you)化并部(bu)署(shu)由主流(liu)AI框架訓(xun)練的(de)神經網絡模(mo)型。目前cube.AI支持各種深度(du)學習框架的(de)訓(xun)練模(mo)型,如Keras和TensorFlow™ Lite,并支持可(ke)導出(chu)為ONNX標(biao)準格(ge)式的(de)所有框架,如PyTorch™、Microsoft® Cognitive Toolkit、MATLAB®等(deng),然(ran)后通過(guo) cube.MX可(ke)視化配置(zhi)界面導入這些(xie)深度(du)學習框架導出(chu)的(de)訓(xun)練模(mo)型來配置(zhi)及生成c模(mo)型,進而部(bu)署(shu)在(zai)STM32芯片上。
2.3.2 基(ji)于STM32Cube.AI部署神經網絡
步驟1:通過cubeMx創(chuang)建工程,注意部分系列無(wu)法(fa)使用cube.ai,可以過濾器篩選(xuan)

選擇對應(ying)的芯片

步驟2:先進(jin)行基礎配(pei)置,RCC、SYS、UART、時鐘
步驟3:CUBE-AI配置,這里有三種選擇:System Performance(系統性能)、Validation(模(mo)型驗證)、Application Template(應用模(mo)板(ban))

System Performance
用于評估神經網絡模型在目標STM32 MCU上的(de)運行(xing)效率,包括推理時間、內存占用(RAM/Flash)、CPU利用率等關鍵指標,幫助判斷模型是否(fou)適配當前硬件資源。
Validation
完整的應用(yong)程序,在桌面PC和MCU環(huan)境中,通過隨機或用(yong)戶(hu)測試(shi)數據,遞增地(di)驗證,與X-CBUE-AI驗證工具(ju)一起使用(yong)。
Application Template
允許構(gou)建應用程(cheng)序的空(kong)模版項目(mu),包括(kuo)多網絡(luo)支(zhi)持。
步驟4:添加模型文件,將訓(xun)練得到model.h5添加進去,點(dian)擊分析

步驟5:配置target參數

步驟6:查看目標板(ban)驗證結果

步驟7:驗證(zheng)成功后(hou),便可(ke)以編程來使用。

