0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

在STM32單片機上跑神經(jīng)網(wǎng)絡(luò)算法

h1654155149.6853 ? 來源:電子工程世界 ? 作者:電子工程世界 ? 2022-04-13 15:05 ? 次閱讀

摘要:為什么可以在STM32上面跑神經(jīng)網(wǎng)絡(luò)?簡而言之就是使用STM32CubeMX中的X-Cube-AI擴展包將當前比較熱門的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框架訓練:

3786555a-ba5d-11ec-aa7f-dac502259ad0.png

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ù),來判斷人當前的行為,比如走路,跑步,上樓,下樓等,很符合Cortex-M系列MCU的應用場景。使用的數(shù)據(jù)如下圖所示。

3796b0e4-ba5d-11ec-aa7f-dac502259ad0.png

HAR用到的原始數(shù)據(jù)

存儲庫包含以下文件

HAR.py,Python腳本文件,包含基于CNN的人類活動識別(HAR)模型的Keras實現(xiàn),

actitracker_raw.txt、包含此實驗中使用的數(shù)據(jù)集的文本文件,

model.h5,一個預訓練模型,根據(jù)訓練數(shù)據(jù)進行訓練,

evaluate_model.py、Python 腳本文件,其中包含評估腳本。此腳本在提供的 testData 上評估預訓練 netowrk 的性能,

testData.npy,Python 數(shù)據(jù)文件,包含用于評估可用預訓練模型的測試數(shù)據(jù),

groundTruth.npy,Python 數(shù)據(jù)文件,包含測試數(shù)據(jù)的相應輸出的地面真值和

README.md.

這么多文件不要慌,模型訓練后得到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,驗證可以通過;

37a5566c-ba5d-11ec-aa7f-dac502259ad0.png

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

37b6684e-ba5d-11ec-aa7f-dac502259ad0.png

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

37cac5dc-ba5d-11ec-aa7f-dac502259ad0.png

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

37db3354-ba5d-11ec-aa7f-dac502259ad0.png

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

37ece630-ba5d-11ec-aa7f-dac502259ad0.png

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

37fc7c44-ba5d-11ec-aa7f-dac502259ad0.png

380f56f2-ba5d-11ec-aa7f-dac502259ad0.png

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

381edbcc-ba5d-11ec-aa7f-dac502259ad0.png

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

38389256-ba5d-11ec-aa7f-dac502259ad0.png

384c0c46-ba5d-11ec-aa7f-dac502259ad0.png

System Performance工程:整個應用程序項目運行在STM32MCU上,可以準確測量NN推理結(jié)果,CP∪U負載和內(nèi)存使用情況。使用串行終端監(jiān)控結(jié)果(e.g.Tera Term)

Validation工程:完整的應用程序,在桌面PC和基于STM32 Arm Cortex-m的MCU嵌入式環(huán)境中,通過隨機或用戶測試數(shù)據(jù),遞增地驗證NN返回的結(jié)果。與 X-CUBE-A驗證工具一起使用。

Application Template工程:允許構(gòu)建應用程序的空模板項目,包括多網(wǎng)絡(luò)支持。

之后左邊欄中的Software Packs點開,選擇其中的X-CUBE-AI,彈出的Mode窗口中兩個復選框都打勾,Configuration窗口中,點開network選項卡。

3868bdbe-ba5d-11ec-aa7f-dac502259ad0.png

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

387bc224-ba5d-11ec-aa7f-dac502259ad0.png

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

388eef34-ba5d-11ec-aa7f-dac502259ad0.png

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

389e3c3c-ba5d-11ec-aa7f-dac502259ad0.png

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

38adbee6-ba5d-11ec-aa7f-dac502259ad0.png

致此,模型驗證完成,下面開始模型部署

四、模型轉(zhuǎn)換與部署

時鐘配置,系統(tǒng)會自動進行時鐘配置。按照你單片機的實際選型配置時鐘就可以了。

38bd06b2-ba5d-11ec-aa7f-dac502259ad0.png

38cbecc2-ba5d-11ec-aa7f-dac502259ad0.png

38db5e78-ba5d-11ec-aa7f-dac502259ad0.png

最后點擊GENERATE CODE生成工程。

38ec1a9c-ba5d-11ec-aa7f-dac502259ad0.png

然后在MDK中編譯鏈接。

38f910f8-ba5d-11ec-aa7f-dac502259ad0.png

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

3907dc46-ba5d-11ec-aa7f-dac502259ad0.png

3918eed2-ba5d-11ec-aa7f-dac502259ad0.png

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

3927738a-ba5d-11ec-aa7f-dac502259ad0.png

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

39344916-ba5d-11ec-aa7f-dac502259ad0.png

3948bd2e-ba5d-11ec-aa7f-dac502259ad0.png

這次就這樣先跑一下官方的例程,以后再研究一下,跑跑自己的模型。

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 神經(jīng)網(wǎng)絡(luò)

    關(guān)注

    42

    文章

    4779

    瀏覽量

    101095
  • 加速度計
    +關(guān)注

    關(guān)注

    6

    文章

    704

    瀏覽量

    45990
  • STM32單片機
    +關(guān)注

    關(guān)注

    59

    文章

    549

    瀏覽量

    58789

原文標題:干貨 | 我在STM32單片機上跑神經(jīng)網(wǎng)絡(luò)算法

文章出處:【微信號:電子工程世界,微信公眾號:電子工程世界】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    神經(jīng)網(wǎng)絡(luò)教程(李亞非)

    網(wǎng)絡(luò)BP算法的程序設(shè)計  多層前向網(wǎng)絡(luò)BP算法源程序  第4章 Hopfield網(wǎng)絡(luò)模型  4.1 離散型Hopfield
    發(fā)表于 03-20 11:32

    遺傳算法 神經(jīng)網(wǎng)絡(luò) 解析

    關(guān)于遺傳算法神經(jīng)網(wǎng)絡(luò)
    發(fā)表于 05-19 10:22

    【案例分享】基于BP算法的前饋神經(jīng)網(wǎng)絡(luò)

    傳播的,不會回流),區(qū)別于循環(huán)神經(jīng)網(wǎng)絡(luò)RNN。BP算法(Back Propagation):誤差反向傳播算法,用于更新網(wǎng)絡(luò)中的權(quán)重。BP神經(jīng)網(wǎng)絡(luò)
    發(fā)表于 07-21 04:00

    如何設(shè)計BP神經(jīng)網(wǎng)絡(luò)圖像壓縮算法

    ,并能在腦海中重現(xiàn)這些圖像信息,這不僅與人腦的海量信息存儲能力有關(guān),還與人腦的信息處理能力,包括數(shù)據(jù)壓縮能力有關(guān)。各種神經(jīng)網(wǎng)絡(luò)中,多層前饋神經(jīng)網(wǎng)絡(luò)具有很強的信息處理能力,由于其采用BP算法
    發(fā)表于 08-08 06:11

    神經(jīng)網(wǎng)絡(luò)和反向傳播算法

    03_深度學習入門_神經(jīng)網(wǎng)絡(luò)和反向傳播算法
    發(fā)表于 09-12 07:08

    反饋神經(jīng)網(wǎng)絡(luò)算法是什么

    反饋神經(jīng)網(wǎng)絡(luò)算法
    發(fā)表于 04-28 08:36

    MATLAB訓練好的神經(jīng)網(wǎng)絡(luò)移植到STM32F407上

    MATLAB中進行了神經(jīng)網(wǎng)絡(luò)模型訓練,然后將訓練好的模型的閾值和權(quán)值導出來,移植到STM32F407單片機上進行計算,但是
    發(fā)表于 06-16 11:14

    STM32上驗證神經(jīng)網(wǎng)絡(luò)模型

    STM32CubeMx.AI的使用歡迎使用Markdown編輯器STM32論壇中看到這樣一個視頻:視頻中,
    發(fā)表于 08-03 06:59

    xr806板子上如何實現(xiàn)用ncnn神經(jīng)網(wǎng)絡(luò)mnis呢

    xr806板子上如何實現(xiàn)用ncnn神經(jīng)網(wǎng)絡(luò)mnis呢?
    發(fā)表于 12-28 06:51

    神經(jīng)網(wǎng)絡(luò)移植到STM32的方法

    神經(jīng)網(wǎng)絡(luò)移植到STM32最近在做的一個項目需要用到網(wǎng)絡(luò)進行擬合,并且將擬合得到的結(jié)果用作控制,就在想能不能直接在單片機上神經(jīng)網(wǎng)絡(luò)計算,這
    發(fā)表于 01-11 06:20

    如何用神經(jīng)網(wǎng)絡(luò)進行語音降噪

    本文是基于NNoM神經(jīng)網(wǎng)絡(luò)框架實現(xiàn)的。NNoM是一個為單片機定制的神經(jīng)網(wǎng)絡(luò)框架,可以實現(xiàn)TensorFlow 模型的量化和部署到單片機上,可以
    的頭像 發(fā)表于 04-11 10:38 ?5116次閱讀

    什么是神經(jīng)網(wǎng)絡(luò)?什么是卷積神經(jīng)網(wǎng)絡(luò)?

    介紹卷積神經(jīng)網(wǎng)絡(luò)之前,我們先回顧一下神經(jīng)網(wǎng)絡(luò)的基本知識。就目前而言,神經(jīng)網(wǎng)絡(luò)是深度學習算法的核心,我們所熟知的很多深度學習
    的頭像 發(fā)表于 02-23 09:14 ?3659次閱讀

    【技術(shù)分享】STM32實現(xiàn)單麥克風實時神經(jīng)網(wǎng)絡(luò)降噪

    本文是基于NNoM神經(jīng)網(wǎng)絡(luò)框架實現(xiàn)的。NNoM是一個為單片機定制的神經(jīng)網(wǎng)絡(luò)框架,可以實現(xiàn)TensorFlow模型的量化和部署到單片機上,可以
    的頭像 發(fā)表于 04-11 10:33 ?5478次閱讀
    【技術(shù)分享】<b class='flag-5'>STM32</b>實現(xiàn)單麥克風實時<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>降噪

    卷積神經(jīng)網(wǎng)絡(luò)的介紹 什么是卷積神經(jīng)網(wǎng)絡(luò)算法

    卷積神經(jīng)網(wǎng)絡(luò)的介紹 什么是卷積神經(jīng)網(wǎng)絡(luò)算法 卷積神經(jīng)網(wǎng)絡(luò)涉及的關(guān)鍵技術(shù) 卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networ
    的頭像 發(fā)表于 08-21 16:49 ?1941次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)算法是機器算法

    卷積神經(jīng)網(wǎng)絡(luò)算法是機器算法嗎? 卷積神經(jīng)網(wǎng)絡(luò)算法是機器算法的一種,它通常被用于圖像、語音、文本等
    的頭像 發(fā)表于 08-21 16:49 ?872次閱讀