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