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

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

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

測評分享 | 如何在先楫HPM6750上運行輕量級AI推理框架TinyMaix

先楫半導體HPMicro ? 2022-12-12 17:57 ? 次閱讀

3f2eb1e6-78ab-11ed-b116-dac502259ad0.png本期內(nèi)容由先楫開發(fā)者社區(qū)大咖@xusiwei1236分享基于先楫HPM6750的輕量級AI推理框架,趕緊來瞧瞧~

一、TinyMaix是什么?
TinyMaix是國內(nèi)sipeed團隊開發(fā)一個輕量級AI推理框架,官方介紹如下:TinyMaix 是面向單片機的超輕量級的神經(jīng)網(wǎng)絡(luò)推理庫,即 TinyML 推理庫,可以讓你在任意單片機上運行輕量級深度學習模型。甚至在 Arduino ATmega328 (32KB Flash, 2KB RAM) 上都能基于 TinyMaix 進行手寫數(shù)字識別。TinyMaix官網(wǎng)提供了詳細介紹,可以在本文末尾的參考鏈接中找到鏈接。
二、TinyMaix移植
本節(jié)介紹如何將TinyMaix移植到HPM6750,詳細步驟如下:
2.1 開發(fā)環(huán)境搭建先楫官方支持SDK開發(fā)環(huán)境和RT-Thread開發(fā)環(huán)境,兩種開發(fā)環(huán)境的搭建方法均可在官方提供的開發(fā)板用戶手冊(HPM6750EVKMINI USER GUIDE.pdf 或 HPM6750EVK USER GUIDE.pdf 文件)中找到,也可以參考我此前發(fā)布的帖子,具體見本文最后的參考鏈接??紤]到TinyMaix對于現(xiàn)已支持的MCU,基準測試都是基于裸機進行的,因此這里使用的是HPM SDK開發(fā)環(huán)境。另外,基于裸機的移植在RTOS環(huán)境下一般也可以運行。因此,對于MCU芯片的計算類開源項目的移植(例如這里的TinyMaix),最好是基于裸機進行。使用的HPM SDK版本為0.14.0,使用的SEGGER Embedded Studio版本信息為:

SEGGER Embedded Studio for RISC-VRelease 6.40 Build 2022102501.51567Windows x64
2014-2022 SEGGER Microcontroller GmbH 1997-2022 Rowley Associates Ltd.
segger-cc: version 15.0.0segger-ld: version 4.36.0segger-rtl: version 4.20.0
GCC/BINUTILS: built using the GNU RISC-V Toolchain version GCC 12.20/Binutils 2.39 source distribution
Clang/LLVM:builtusingtheversion15.0.0sourcedistribution

2.2 TinyMaix移植步驟由于TinyMaix本身的源代碼文件不多,整個移植過程相對還是比較簡單的。整體基本上分為三步:

  • 目錄規(guī)劃;
  • 修改源碼;
  • 編譯運行;

下面介紹具體操作步驟。2.2.1 目錄規(guī)劃考慮到TinyMaix和hpm_sdk都是使用CMake構(gòu)建的,為了不對TinyMaix進行過多侵入性修改,這里采取的策略是——添加一個中間層。具體是將HPM6750平臺的CMakeLists.txt文件放在TinyMaix源碼目錄的上一層,如下所示:

hpm_sdk/app/├── CMakeLists.txt # HPM6750平臺的CMakeLists.txt├── src│ └── benchmark.c└── TinyMaix/ # TinyMaix源碼目錄

2.2.2 修改源碼

這里在src/benchmark.c文件內(nèi)容如下:

#include #include "board.h"
#define MODEL_MNIST 1#define MODEL_CIFAR10 2#define MODEL_VWW 3#define MODEL_MBNET 4
#define CONFIG_MODEL MODEL_CIFAR10 // 修改這一行切換 測試程序
#define main benchmark_main#if (CONFIG_MODEL == MODEL_MNIST)#include "mnist/main.c"#elif (CONFIG_MODEL == MODEL_CIFAR10)#include "cifar10/main.c"#elif (CONFIG_MODEL == MODEL_VWW)#include "vww/main.c"#elif (CONFIG_MODEL == MODEL_MBNET)#include "mbnet/label.c"#include "mbnet/main.c"#endif#undef main
int main(void){ board_init();
printf("benchmark start...\n"); benchmark_main(0, NULL);
__asm__("wfi");return 0;}

為了不直接拷貝基準測試代碼,簡化代碼結(jié)構(gòu),這里使用了不太常見的:直接#include 某個.c文件;在#include "xxx/main.c"前面,定義宏#define main benchmark_main,之后取消宏定義;這樣實現(xiàn)了將TinyMaix原有的測試代碼作為benchmark.c一部分,而又不與這里的main函數(shù)相沖突的目的。PS:這里為了簡便,并沒有把TinyMaix放到hpm_sdk的middleware目錄,實際項目中使用的話最好將TinyMaix放到middleware目錄。另外,還需要修改`tm_port.h文件:

diff --git a/include/tm_port.h b/include/tm_port.hindex 357fc6b..5d1768c 100644--- a/include/tm_port.h+++ b/include/tm_port.h@@ -31,7 +31,7 @@ limitations under the License.#define TM_OPT_LEVEL TM_OPT0#define TM_MDL_TYPE TM_MDL_INT8#define TM_FASTSCALE (0) //enable if your chip don't have FPU, may speed up 1/3, but decrease accuracy-#define TM_LOCAL_MATH (0) //use local math func (like exp()) to avoid libm+#define TM_LOCAL_MATH (1) //use local math func (like exp()) to avoid libm#define TM_ENABLE_STAT (1) //enable mdl stat functions#define TM_MAX_CSIZE (1000) //max channel num //used if INT8 mdl //cost TM_MAX_CSIZE*4 Byte#define TM_MAX_KSIZE (5*5) //max kernel_size //cost TM_MAX_KSIZE*4 Byte@@ -49,9 +49,10 @@ limitations under the License.#define TM_DBGL() TM_PRINTF("###L%d\n",__LINE__);
/******************************* DBG TIME CONFIG ************************************/-#include -#include -#define TM_GET_US() ((uint32_t)((uint64_t)clock()*1000000/CLOCKS_PER_SEC))+#include "board.h"+#define TM_GET_US() (uint32_t)(HPM_MCHTMR->MTIME * 1000000uLL / clock_get_frequency(clock_mchtmr0))
#define TM_DBGT_INIT() uint32_t _start,_finish;float _time;_start=TM_GET_US();#defineTM_DBGT_START()_start=TM_GET_US();

2.2.3 編譯運行HPM6750項目的生成命令:

generate_project -b hpm6750evkmini -t flash_xip -f

HPM6750項目的編譯、運行,具體可以開發(fā)環(huán)境搭建文章,鏈接見本文末尾。手寫數(shù)字識別(mnist模型),運行后,串口輸出結(jié)果如下:3f91d53c-78ab-11ed-b116-dac502259ad0.png

三、基準測試

下面是TinyMaix四種常用的基準測試模型的基準測試,四個模型分別為:

  • mnist——手寫數(shù)字識別模型,輸入28x28x1
  • cifar——10分類模型,輸入32x32x3
  • vww——人體檢測二分類模型,輸入96x96x3,輸出有無人
  • mbnet——1000分類模型,輸入128x128x3


3.1 場景1: TM_MDL_INT8 + TM_OPT0

3fee72a6-78ab-11ed-b116-dac502259ad0.png
3.2 場景2: TM_MDL_INT8 + TM_OPT1400c7b34-78ab-11ed-b116-dac502259ad0.png
3.3 場景3: TM_MDL_FP32 + TM_OPT0403c1a2e-78ab-11ed-b116-dac502259ad0.png

3.4 注意事項

  • 在SEGGER Embedded Studio中, 可以通過如下菜單Project 'xxx' Options -> Code -> Code Generation -> Optimization Level修改優(yōu)化等級;
  • 在SEGGER Embedded Studio中, 默認的堆大小設(shè)置為16384 字節(jié)(16KB),不夠運行vww96 和 mbnet128 模型,你可以通過菜單 Code -> Runtime Memory Area -> Heap Size修改具體配置大小,例如可以為524288(512KB);
  • 對于FP32模型,需要將RISC-V ISA設(shè)置從默認的rv32imac改為rv32gc(Code -> Code Generation -> RIS-V ISA),確保編譯器可以生成浮點數(shù)操作指令。

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

    關(guān)注

    87

    文章

    30887

    瀏覽量

    269060
  • 先楫半導體
    +關(guān)注

    關(guān)注

    10

    文章

    214

    瀏覽量

    2120
收藏 人收藏

    評論

    相關(guān)推薦

    HPM6750 Bootloader設(shè)計

    我正在做一個hpm6750evk2的bootloader。設(shè)計很簡單,boot工程代碼只做跳轉(zhuǎn)到1M后的APP工程代碼處,APP工程就是做的一個點燈的程序而已,boot、APP工程都是跑
    發(fā)表于 10-23 18:59

    TinyMaix框架的內(nèi)存需求超過了APM32F411的可用內(nèi)存,導致運行失敗,怎么能成功優(yōu)化?

    TinyMaix框架的內(nèi)存需求超過了APM32F411的可用內(nèi)存,導致運行失敗。怎么能成功優(yōu)化?
    發(fā)表于 09-27 09:44

    國產(chǎn)芯運行TinyMaxi輕量級的神經(jīng)網(wǎng)絡(luò)推理庫-米爾基于芯馳D9國產(chǎn)商顯板

    本篇測評由優(yōu)秀測評者“短笛君”提供。本文將介紹基于米爾電子MYD-YD9360商顯板(米爾基于芯馳D9360國產(chǎn)開發(fā)板)的TinyMaxi輕量級的神經(jīng)網(wǎng)絡(luò)推理庫方案測試。 算力測試
    發(fā)表于 08-09 18:26

    國產(chǎn)芯運行TinyMaxi輕量級的神經(jīng)網(wǎng)絡(luò)推理庫-米爾基于芯馳D9國產(chǎn)商顯板

    D9360國產(chǎn)開發(fā)板)的TinyMaxi輕量級的神經(jīng)網(wǎng)絡(luò)推理庫方案測試。 算力測試 TinyMaix 是面向單片機的超輕量級的神經(jīng)網(wǎng)絡(luò)推理
    發(fā)表于 08-07 18:06

    國產(chǎn)芯運行TinyMaxi輕量級的神經(jīng)網(wǎng)絡(luò)推理庫-米爾基于芯馳D9國產(chǎn)商顯板

    TinyMaix是面向單片機的超輕量級的神經(jīng)網(wǎng)絡(luò)推理庫,即TinyML推理庫,可以讓你在任意單片機上運行
    的頭像 發(fā)表于 07-05 08:02 ?1878次閱讀
    國產(chǎn)芯<b class='flag-5'>上</b><b class='flag-5'>運行</b>TinyMaxi<b class='flag-5'>輕量級</b>的神經(jīng)網(wǎng)絡(luò)<b class='flag-5'>推理</b>庫-米爾基于芯馳D9國產(chǎn)商顯板

    【Vision Board創(chuàng)客營連載體驗】TinyMaix進行手寫數(shù)字識別

    1 TinyMaix簡介 TinyMaix是國內(nèi)sipeed團隊開發(fā)一個輕量級AI推理框架,
    發(fā)表于 06-15 08:40

    半導體所有開發(fā)板已RT-Thread主線啦

    型號:HPM6750EVKMINIHPM6750EVKHPM6750EVK2HPM6300EVKHPM6200EVKHPM5300EVKHPM5301EVKLITEHPM6800EVK生態(tài)共贏基于RT-Thread強大的社區(qū)生態(tài)和豐富的軟件包,各位小伙伴可以實現(xiàn)各類圖形圖像、網(wǎng)絡(luò)互聯(lián)、工業(yè)自動化
    的頭像 發(fā)表于 06-05 08:17 ?579次閱讀
    先<b class='flag-5'>楫</b>半導體所有開發(fā)板已<b class='flag-5'>上</b>RT-Thread主線啦

    深度詳解嵌入式系統(tǒng)專用輕量級框架設(shè)計

    MR 框架是專為嵌入式系統(tǒng)設(shè)計的輕量級框架。充分考慮了嵌入式系統(tǒng)在資源和性能方面的需求。通過提供標準化的設(shè)備管理接口,極大簡化了嵌入式應用開發(fā)的難度,幫助開發(fā)者快速構(gòu)建嵌入式應用程序。
    發(fā)表于 04-27 02:32 ?993次閱讀
    深度詳解嵌入式系統(tǒng)專用<b class='flag-5'>輕量級</b><b class='flag-5'>框架</b>設(shè)計

    半導體 hpm_sdk v1.5.0 正式發(fā)布

    半導體 hpm_sdk v1.5.0 正式發(fā)布!功能升級更強大 版本更新概況 新支持的IDE IAR Embedded Workbench for RISC-V (測試版本3.20.1) 新增
    發(fā)表于 04-08 11:14

    AI推理框架軟件ONNX Runtime正式支持龍架構(gòu)

    近日,知名AI推理框架開源社區(qū)ONNX Runtime正式發(fā)布支持龍架構(gòu)的版本1.17.0。
    的頭像 發(fā)表于 03-12 12:23 ?579次閱讀
    <b class='flag-5'>AI</b><b class='flag-5'>推理</b><b class='flag-5'>框架</b>軟件ONNX Runtime正式支持龍架構(gòu)

    基于先HPM5300 RISC-V內(nèi)核MCU的HPM5361EVK開發(fā)板測評效果(二)

    HPM5361EVK是基于先HPM5300系列高性能RISC-V內(nèi)核MCU的一款開發(fā)板。
    的頭像 發(fā)表于 03-12 10:30 ?2911次閱讀
    基于先<b class='flag-5'>楫</b><b class='flag-5'>HPM</b>5300 RISC-V內(nèi)核MCU的<b class='flag-5'>HPM</b>5361EVK開發(fā)板<b class='flag-5'>測評</b>效果(二)

    HPM5361EVK開發(fā)板,網(wǎng)友測評效果(二)

    上海先半導體舉辦的HPM5361EVK開發(fā)板試用活動圓滿結(jié)束,廣大工程師和愛好者們踴躍參與此次試用并提交報告。經(jīng)過先半導體專家組評選,一共產(chǎn)生6名優(yōu)秀獲獎?wù)?。感謝媒體平臺電子工程世界(簡稱
    的頭像 發(fā)表于 03-12 08:16 ?2099次閱讀
    先<b class='flag-5'>楫</b><b class='flag-5'>HPM</b>5361EVK開發(fā)板,網(wǎng)友<b class='flag-5'>測評</b>效果(二)

    HPM5300EVK 優(yōu)秀測評報告(一)

    上海先半導體舉辦的HPM5361EVK開發(fā)板試用活動圓滿結(jié)束,廣大工程師和愛好者們踴躍參與此次試用并提交報告。最終,先半導體專家組評選出6名優(yōu)秀獲獎?wù)摺8兄x媒體平臺EEWORLD電子工程世界
    的頭像 發(fā)表于 03-05 08:19 ?919次閱讀
    <b class='flag-5'>HPM</b>5300EVK 優(yōu)秀<b class='flag-5'>測評</b>報告(一)

    【先HPM5361EVK開發(fā)板試用體驗】(原創(chuàng))5.手把手實戰(zhàn)AI機械臂

    HPM5361EVK開發(fā)板?,F(xiàn)在開始設(shè)計實戰(zhàn)AI機械臂的程序。 代碼結(jié)構(gòu) 由于編寫一個完整的用先HPM5361EVK開發(fā)板控制三組四自由度機械臂,并加入紅外線傳感器、機器視覺和Ch
    發(fā)表于 02-06 10:28

    【先HPM5361EVK開發(fā)板試用體驗】TinyMaix進行手寫數(shù)字識別

    1 TinyMaix簡介 TinyMaix是國內(nèi)sipeed團隊開發(fā)一個輕量級AI推理框架,
    發(fā)表于 01-02 23:34