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

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

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

移植CMSIS-NN v6.0.0版本到VisionBoard

RT-Thread官方賬號 ? 2024-07-10 08:35 ? 次閱讀

CMSIS-NN是什么?

官方的解釋是:

CMSIS NN software library is a collection of efficient neural network kernels developed to maximize the performance and minimize the memory footprint of neural networks on Arm Cortex-M processors.

翻譯一下就是:

CMSIS NN 軟件庫是一組高效的神經(jīng)網(wǎng)絡(luò)核(函數(shù)),旨在最大限度地提高 Arm Cortex-M 處理器上神經(jīng)網(wǎng)絡(luò)的性能并最大限度地減少內(nèi)存占用。

CMSIS-NN是一個計(jì)算庫,它向上提供了神經(jīng)網(wǎng)絡(luò)(NN)計(jì)算接口,實(shí)現(xiàn)了神經(jīng)網(wǎng)絡(luò)計(jì)算的硬件加速。它內(nèi)部實(shí)現(xiàn)了純CPU計(jì)算、DSP計(jì)算、MVE計(jì)算,屏蔽了底層硬件的具體細(xì)節(jié),降低了編程難度。

為什么移植CMSIS-NN v6.0.0版本?

1

CMSIS-NN核心特性

總結(jié)一下官方的介紹,可以知道CMSIS-NN庫的核心特性:

專為Cortex-M處理器開發(fā);

神經(jīng)網(wǎng)絡(luò)計(jì)算函數(shù);

最大化性能;

最小化內(nèi)存占用

2

CMSIS-NN的硬件和軟件支持

除此之外,CMSIS-NN庫還有幾點(diǎn)也是值得關(guān)注的:

支持DSP擴(kuò)展的處理器,使用SIMD優(yōu)化,例如Cortex-M4核;

支持ARM的Heilum技術(shù)的處理器,使用M核向量擴(kuò)展(MVE,M-profile Vector Extension)進(jìn)行優(yōu)化,例如 Cortex-M55 或 Cortex-M85;

MVE擴(kuò)展恰好是ARM Cortex-M85內(nèi)置的;

VisionBoard主控芯片瑞薩RA8D1的CPU核正是ARM Cortex-M85;

CMSIS-NN可以作為TensorFlow Lite for Microcontroller的后端實(shí)現(xiàn);

3

CMSIS-NN核心特性

CMSIS-NN v6.0.0版本的發(fā)布說明中,介紹了新特性:

全連接(FC)、卷積(CONV)和深度卷積(DWCONV)添加了MVE指令的int4類型支持;

重新實(shí)現(xiàn) LSTM 以與 TFLM 參考內(nèi)核保持一致;

LSTM 對 int16 輸入的支持

DSP/MVEI 支持轉(zhuǎn)置卷積

支持分組卷積

支持 FC 的非零濾波器偏移

對 MVEI 的 Int16 輸入卷積支持

對 int16x8 卷積的 Int32 偏置支持

更能多內(nèi)容可以查看本文末尾的CMSIS-NN v6.0.0 Release Note;

如何移植CMSIS-NN v6.0.0到VisionBoard?

1

創(chuàng)建RT-Thread項(xiàng)目

RT-Thread Studio創(chuàng)建基于VisionBoard開發(fā)板的模板項(xiàng)目,過程比較簡單,不再贅述。

2

添加CMSIS-NN源碼

RT-Thread Studio創(chuàng)建基于VisionBoard開發(fā)板的模板項(xiàng)目后,

在packages目錄手動下載CMSIS-NN v6.0.0版本:

533952b6-3e54-11ef-a655-92fbcf53809c.png

3

修改RT-Thread代碼

修改項(xiàng)目頂層的Kconfig文件,添加如下代碼行:

535eefd0-3e54-11ef-a655-92fbcf53809c.png

注意:Kconfig修改需要完需要保證最后有一行空行,否則menuconfig命令會報(bào)奇怪的錯誤。

檢查packages目錄內(nèi)是否有SConsript文件,并且內(nèi)容如下:

5374123e-3e54-11ef-a655-92fbcf53809c.png

如果沒有,可以手動創(chuàng)建。

4

修改CMSIS-NN代碼

CMSIS-NN目錄頂層創(chuàng)建SConscript文件,內(nèi)容如下:

538c6e06-3e54-11ef-a655-92fbcf53809c.png53b232a8-3e54-11ef-a655-92fbcf53809c.png53e0046c-3e54-11ef-a655-92fbcf53809c.png

創(chuàng)建Kconfig文件,內(nèi)容如下:

53fb7e0e-3e54-11ef-a655-92fbcf53809c.png

5

編譯RT-Thread項(xiàng)目

完成以上修改之后,已經(jīng)可以編譯CMSIS-NN庫的代碼了。

在命令行中執(zhí)行如下命令,編譯整個項(xiàng)目:

54ae5894-3e54-11ef-a655-92fbcf53809c.png

編譯輸出最后部分如下圖所示:

54c50008-3e54-11ef-a655-92fbcf53809c.png

如何測試CMSIS-NN v6.0.0?

1

CMSIS-NN核心特性

CMSIS-NN庫內(nèi)部帶有了單元測試,具體位于 Tests/UnitTest 子目錄,其中 unittest_targets.py 腳本可以用于生成測試腳手架代碼,使用方法如下:

54ea32e2-3e54-11ef-a655-92fbcf53809c.png

當(dāng)前生成的代碼是單獨(dú)生成elf文件,并在ARM虛擬硬件(AVH)平臺上運(yùn)行的。

默認(rèn)情況下,執(zhí)行python unittest_targets.py —download-and-generate-test-runners命令,會為每個測試用例生成一個main函數(shù),每個測試用例單獨(dú)編譯為一個elf文件,之后使用ARM虛擬硬件(AVH)執(zhí)行elf進(jìn)行測試。

為了能夠生成在RT-Thread上運(yùn)行的測試代碼,需要修改部分測試腳本代碼,實(shí)現(xiàn)將每個測試用例注冊為一個獨(dú)立的finsh命令,在串口命令行中交互測試。

具體修改的代碼差異如下:

5505da74-3e54-11ef-a655-92fbcf53809c.png55269fb6-3e54-11ef-a655-92fbcf53809c.png554cd794-3e54-11ef-a655-92fbcf53809c.png

這段修改實(shí)現(xiàn)了:

調(diào)用unity的ruby腳本,傳遞main_name命令行參數(shù),用于修改單元測試入口函數(shù)名稱(不指定默認(rèn)是main);

生成一個獨(dú)立的RT-Thread finsh命令注冊代碼.c文件;

生成一個用于編譯的SConscript代碼文件;

另外,再結(jié)合上層目錄的SConcsript包含所有子目錄的SConscript,就可以實(shí)現(xiàn)將所有單元測試編譯為finsh命令了。

修改完該腳本文件后,執(zhí)行如下命令,生成RT-Thread平臺測試代碼:

5579459a-3e54-11ef-a655-92fbcf53809c.png

命令執(zhí)行輸出如下:

558aa650-3e54-11ef-a655-92fbcf53809c.png

2

測試代碼的構(gòu)建規(guī)則SConscript

然后需要在CMSIS-NN的Tests子目錄內(nèi),添加SConscript文件:

55ad3ab2-3e54-11ef-a655-92fbcf53809c.png

這段SConscript的作用是,將子目錄的SConscript腳本包含到整個項(xiàng)目的構(gòu)建流程中去。

接著需要在CMSIS-NN的Tests/UnitTest子目錄內(nèi),添加SConscript文件:

55c7f172-3e54-11ef-a655-92fbcf53809c.png

完成以上修改后,通過menuconfig打開 PKG_USING_CMSIS_NN_TESTS 配置項(xiàng)目,再次 scons 編譯,就可以編譯單元測試代碼文件了。

3

解決鏈接失敗問題

但是還會有一些編譯錯誤,原因主要有:

原來的測試腳本為每個測試用例獨(dú)立生成main函數(shù),每個目錄單獨(dú)編譯;

鏈接到一起時,會有大量重復(fù)的setUp/tearDown/resetTest/verifyTest函數(shù)定義;

原來的測試數(shù)據(jù)數(shù)組沒有加static修飾,被重復(fù)include到多個.c文件;

鏈接到一起時,會有數(shù)組重復(fù)的數(shù)組定義

為了解決上述兩類問題,分別創(chuàng)建兩個腳本。

修復(fù)重復(fù)函數(shù)定義的 fix_testCode.sh:

55ed68bc-3e54-11ef-a655-92fbcf53809c.png

解決方法,所有 setUp/tearDown/resetTest/verifyTest 函數(shù)添加 weak 屬性修飾;

修復(fù)重復(fù)數(shù)組定義的 fix_testData.sh:

560975de-3e54-11ef-a655-92fbcf53809c.png

解決方法,所有測試數(shù)據(jù)的數(shù)組添加static修飾。

分別執(zhí)行上面兩個腳本之后,再次編譯,就沒有編譯錯誤了。

4

運(yùn)行單元測試

順利編譯之后,下載固件:

561ba34e-3e54-11ef-a655-92fbcf53809c.png

運(yùn)行后,在串口輸入help命令可以看到:

56347568-3e54-11ef-a655-92fbcf53809c.png

輸入命令,運(yùn)行avgpool算子的測試:

564d885a-3e54-11ef-a655-92fbcf53809c.png

其他幾個算子的s8類型測試:

5661f3e4-3e54-11ef-a655-92fbcf53809c.png56755c72-3e54-11ef-a655-92fbcf53809c.png56bb0de4-3e54-11ef-a655-92fbcf53809c.png56e61a84-3e54-11ef-a655-92fbcf53809c.png56f8cc24-3e54-11ef-a655-92fbcf53809c.png57143982-3e54-11ef-a655-92fbcf53809c.png572c7416-3e54-11ef-a655-92fbcf53809c.png5776a3ce-3e54-11ef-a655-92fbcf53809c.png57902290-3e54-11ef-a655-92fbcf53809c.png57a4727c-3e54-11ef-a655-92fbcf53809c.png57bca658-3e54-11ef-a655-92fbcf53809c.png

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

    關(guān)注

    0

    文章

    39

    瀏覽量

    11855
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    4895

    瀏覽量

    97055
  • RT-Thread
    +關(guān)注

    關(guān)注

    31

    文章

    1261

    瀏覽量

    39836
收藏 人收藏

    評論

    相關(guān)推薦

    SPC5-Studio V6.0.0只能默認(rèn)安裝C盤是怎么回事?

    SPC5-Studio V6.0.0只能默認(rèn)安裝C盤?
    發(fā)表于 03-27 07:24

    [基于GD32F350RB的音頻識別器] 3. CMSIS-NN神經(jīng)網(wǎng)絡(luò)配置解析

    cmsis-nn的函數(shù)和定義,對應(yīng)建立層數(shù)和激活函數(shù),構(gòu)成圖,導(dǎo)入訓(xùn)練輸出的模型數(shù)據(jù)。最后,調(diào)試并運(yùn)行。如果開發(fā)板具有攝像頭,可以把攝像頭的截圖及時裁剪并輸入計(jì)算圖中,就可以得出對應(yīng)數(shù)據(jù)。
    發(fā)表于 09-21 11:34

    CMSIS-NN神經(jīng)網(wǎng)絡(luò)內(nèi)核助力微控制器效率提升

    自然會想到Arm Cortex-M系列處理器內(nèi)核,那么如果您想要強(qiáng)化它的性能并且減少內(nèi)存消耗,CMSIS-NN就是您最好的選擇?;?b class='flag-5'>CMSIS-NN內(nèi)核的神經(jīng)網(wǎng)絡(luò)推理運(yùn)算,對于運(yùn)行時間/吞吐量將會有4.6X的提升,而對于能效將有4.9X的提升。
    發(fā)表于 07-23 08:08

    CMSIS-NN神經(jīng)網(wǎng)絡(luò)內(nèi)核可以讓微控制器效率提升5倍是真的嗎?

    全新CMSIS-NN神經(jīng)網(wǎng)絡(luò)內(nèi)核讓微控制器效率提升5倍
    發(fā)表于 03-15 06:55

    DSP數(shù)字信號處理和CMSIS-NN神經(jīng)網(wǎng)絡(luò)教程

    之后,開啟第2版DSP數(shù)字信號處理和CMSIS-NN神經(jīng)網(wǎng)絡(luò)教程,同步開啟三代示波器。軟件:1、開發(fā)板預(yù)裝出廠程序,各種外設(shè)驅(qū)動包全做好了,可以檢測全部硬件功能...
    發(fā)表于 08-04 06:59

    如何將TensorFlow Lite應(yīng)用程序移植Arm Cortex-M55系統(tǒng)上

    設(shè)備上實(shí)現(xiàn)更高水平的機(jī)器學(xué)習(xí)和信號處理。MCU開發(fā)人員已經(jīng)在使用開源庫(如CMSIS-DSP、CMSIS-NN)和ML框架(如用于微控制器的TensorFlow Lite)將機(jī)器學(xué)習(xí)應(yīng)用程序移植
    發(fā)表于 03-31 10:40

    詳細(xì)說明將TensorFlow Lite的微控制器應(yīng)用程序移植Arm Cortex-M55上的過程

    CMSIS-NN庫與TensorFlow Lite for Microcontrollers的緊密集成,使得將ML工作負(fù)載移植新的Cortex-M設(shè)備的過程變得快捷,易于使用。?F urthermore
    發(fā)表于 06-01 16:44

    AT32講堂016 | AT32 MCU DSP使用案例和網(wǎng)絡(luò)神經(jīng)算法CMSIS-NN案例

    概述CMSIS DSP庫移植AT32常用示例展示CMSIS NN with DSP注意:本文是基于AT32F403A的硬件條件,若使用者需
    發(fā)表于 08-16 19:40

    ARM Cortex-M系列芯片神經(jīng)網(wǎng)絡(luò)推理庫CMSIS-NN詳解

    1、ARM Cortex-M系列芯片神經(jīng)網(wǎng)絡(luò)推理庫CMSIS-NN詳解CMSIS-NN是用于ARM Cortex-M系列的芯片的神經(jīng)網(wǎng)絡(luò)推理庫,用于低性能芯片/架構(gòu)的神經(jīng)網(wǎng)絡(luò)部署
    發(fā)表于 08-19 16:06

    如何在SDKv2.12中選擇正確的CMSIS文件夾?

    ./CMSISeiq 下的 CMSIS 似乎包含更新版本CMSIS-NN,但 Core 和 DSP 文件夾僅包含頭文件。所以這個 CMSIS 與 SDK 根文件夾下的相比看起來不
    發(fā)表于 03-29 08:22

    CMSIS-NN版本轉(zhuǎn)換Arm Cortex-M的神經(jīng)網(wǎng)絡(luò):r0p0指南

    2. 概覽 指南向您展示了如何將神經(jīng)網(wǎng)絡(luò)從任何框架轉(zhuǎn)換成一個基于 Arm Cortex-M-M 裝置的實(shí)施工具, 使用 Arm CMSIS- NN 庫。 此教程用于不再支持的 CMSIS
    發(fā)表于 08-11 07:06

    求助,cmsis_RTOS v1版本怎么進(jìn)臨界?

    這個cmsis_RTOS v1版本怎么進(jìn)臨界? 難道是把所有任務(wù)掛起嗎? V2 還可以鎖內(nèi)核
    發(fā)表于 11-02 06:15

    基于CMSIS-NN內(nèi)核的神經(jīng)網(wǎng)絡(luò)推理運(yùn)算 對運(yùn)行時間/吞吐量和能效有顯著提升

    想到Arm Cortex-M系列處理器內(nèi)核,那么如果您想要強(qiáng)化它的性能并且減少內(nèi)存消耗,CMSIS-NN就是您最好的選擇?;?b class='flag-5'>CMSIS-NN內(nèi)核的神經(jīng)網(wǎng)絡(luò)推理運(yùn)算,對于運(yùn)行時間/吞吐量將會有4.6X的提升,而對于能效將有4.9X的提升。
    的頭像 發(fā)表于 01-31 11:29 ?1.1w次閱讀
    基于<b class='flag-5'>CMSIS-NN</b>內(nèi)核的神經(jīng)網(wǎng)絡(luò)推理運(yùn)算 對運(yùn)行時間/吞吐量和能效有顯著提升

    unc0ver 6.0.0版本或?qū)⒅С謎OS 14.3全設(shè)備越獄

    今日,unc0ver 6.0.0版本發(fā)布,添加了對iOS 12.4.9~12.5.1、iOS 13.5.1-13.7以及iOS 14.0-14.3的支持,只要是版本符合,那么全設(shè)備都可越獄,包括最新的A14處理器iPhone 1
    的頭像 發(fā)表于 03-01 09:30 ?2306次閱讀

    事隔五年之后,開啟第2版DSP數(shù)字信號處理和CMSIS-NN神經(jīng)網(wǎng)絡(luò)教程,同步開啟三代示波器,前50章發(fā)布(2021-11

    事隔五年之后,開啟第2版DSP數(shù)字信號處理和CMSIS-NN神經(jīng)網(wǎng)絡(luò)教程,同步開啟三代示波器,前50章發(fā)布(2021-11-02)
    發(fā)表于 11-26 10:36 ?0次下載
    事隔五年之后,開啟第2版DSP數(shù)字信號處理和<b class='flag-5'>CMSIS-NN</b>神經(jīng)網(wǎng)絡(luò)教程,同步開啟三代示波器,前50章發(fā)布(2021-11