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