當(dāng)前位置:首頁 > 學(xué)習(xí)資源 > 講師博文 > stm32部署神經(jīng)網(wǎng)絡(luò)
一、背景與意義
1.1 背景
隨著ai的大力發(fā)展,推動了智能化向終端的延伸。MCU這類設(shè)備雖然資源受限,但是近年來AI模型的輕量化技術(shù)(如模型壓縮、硬件加速、框架優(yōu)化)快速發(fā)展,為單片機部署AI提供了可行性。
1.2 意義
傳統(tǒng)AI應(yīng)用依賴“數(shù)據(jù)上傳云端→模型推理→結(jié)果回傳”的模式,但這種模式存在網(wǎng)絡(luò)延遲和可靠性風(fēng)險,
單片機部署AI模型后,數(shù)據(jù)無需外傳即可本地完成推理,將響應(yīng)時間從“百毫秒級”壓縮到“微秒級”,同時避免網(wǎng)絡(luò)依賴,
單片機的典型應(yīng)用場景(如物聯(lián)網(wǎng)終端、可穿戴設(shè)備、智能家居傳感器)往往對功耗、體積、成本極度敏感,
若依賴云端處理,設(shè)備需持續(xù)上傳數(shù)據(jù)(消耗流量)并保持網(wǎng)絡(luò)連接(增加射頻模塊功耗),導(dǎo)致續(xù)航大幅縮短。
通過部署輕量化AI模型(如經(jīng)過剪枝、量化、知識蒸餾優(yōu)化的模型),單片機可在極低算力下完成AI任務(wù)。
隨著數(shù)據(jù)安全法規(guī)的完善,敏感數(shù)據(jù)的本地化處理成為剛需。
二、stm32部署神經(jīng)網(wǎng)絡(luò)
2.1 方案
在STM32單片機上部署神經(jīng)網(wǎng)絡(luò)模型,一般有兩種方案1.移植支持MCU的神經(jīng)網(wǎng)絡(luò)框架, 2.采用STM32Cube.AI工具。
方案1:需要自己尋找合適的框架,并完成移植,通用性更好。
方案2:僅支持stm32系列單片機,甚至部分系列不支持,但該工具可以結(jié)合STM32CubeMX環(huán)境使用,比較方便。
2.2 NNoM庫
2.2.1 簡介
NNoM是一個專門為了神經(jīng)網(wǎng)絡(luò)在 MCU 上運行的框架。 NNoM 是一個定點神經(jīng)網(wǎng)絡(luò)庫, 現(xiàn)在支持 8-bit定點格式。當(dāng)前 NNoM 支持數(shù)十種操作,卷積,池化,激活,矩陣計算等等。此外還提供多種在線評估方法,包括時間統(tǒng)計,內(nèi)存統(tǒng)計,Top-K 準確度,Confusion Matrix 等等。
它擁有以下優(yōu)點:
快速開發(fā): 電腦上訓(xùn)練的 Keras 模型直接轉(zhuǎn)換成 C 文件。
默認純C后端: 移植和使用暢通無阻,支持32/64bit,MCU/PC。
支持復(fù)雜結(jié)構(gòu): 支持多種復(fù)雜的網(wǎng)絡(luò)模型結(jié)構(gòu)。
完善的文檔: 擁有 API 文檔,入門指南,優(yōu)化指南。
入門簡單: 多個從簡單到復(fù)雜的例子,完全開源。
MCU 上的神經(jīng)網(wǎng)絡(luò)能做什么?
語音關(guān)鍵詞識別 (KeyWord Spotting)
使用運動傳感器識別活動狀態(tài) (Human Activity Recognition)
神經(jīng)網(wǎng)絡(luò)控制系統(tǒng) (替代PID等傳統(tǒng)控制方法)
圖像處理 (帶專用加速器的 MCU)
...
目錄結(jié)構(gòu)
2.2.2 移植NNoM庫
步驟1:新建stm32 keil工程
步驟2:下載源碼https://gitcode.com/gh_mirrors/nn/nnom,將inc、port、src拷貝到stm32 keil工程中。
步驟3:需要將目錄中的所有.c添加到工程,并添加頭文件路徑。
步驟4:由于NNoM庫需要消耗大量空間,建議修改編譯選項,例如-o1
步驟5:后期將訓(xùn)練好的模型文件(weights.h文件)添加到keil工程,編寫對應(yīng)的代碼便可以進行推理。
2.3.1 簡介
STM32Cube.AI是一款適用于STM32微控制器的AI模型優(yōu)化工具,主要用于在STM32微控制器上優(yōu)化并部署由主流AI框架訓(xùn)練的神經(jīng)網(wǎng)絡(luò)模型。目前cube.AI支持各種深度學(xué)習(xí)框架的訓(xùn)練模型,如Keras和TensorFlow™ Lite,并支持可導(dǎo)出為ONNX標準格式的所有框架,如PyTorch™、Microsoft® Cognitive Toolkit、MATLAB®等,然后通過 cube.MX可視化配置界面導(dǎo)入這些深度學(xué)習(xí)框架導(dǎo)出的訓(xùn)練模型來配置及生成c模型,進而部署在STM32芯片上。
2.3.2 基于STM32Cube.AI部署神經(jīng)網(wǎng)絡(luò)
步驟1:通過cubeMx創(chuàng)建工程,注意部分系列無法使用cube.ai,可以過濾器篩選
選擇對應(yīng)的芯片
步驟2:先進行基礎(chǔ)配置,RCC、SYS、UART、時鐘
步驟3:CUBE-AI配置,這里有三種選擇:System Performance(系統(tǒng)性能)、Validation(模型驗證)、Application Template(應(yīng)用模板)
System Performance
用于評估神經(jīng)網(wǎng)絡(luò)模型在目標STM32 MCU上的運行效率,包括推理時間、內(nèi)存占用(RAM/Flash)、CPU利用率等關(guān)鍵指標,幫助判斷模型是否適配當(dāng)前硬件資源。
Validation
完整的應(yīng)用程序,在桌面PC和MCU環(huán)境中,通過隨機或用戶測試數(shù)據(jù),遞增地驗證,與X-CBUE-AI驗證工具一起使用。
Application Template
允許構(gòu)建應(yīng)用程序的空模版項目,包括多網(wǎng)絡(luò)支持。
步驟4:添加模型文件,將訓(xùn)練得到model.h5添加進去,點擊分析
步驟5:配置target參數(shù)
步驟6:查看目標板驗證結(jié)果
步驟7:驗證成功后,便可以編程來使用。