伦伦影院久久影视,天天操天天干天天射,ririsao久久精品一区 ,一本大道香蕉大久在红桃,999久久久免费精品国产色夜,色悠悠久久综合88,亚洲国产精品久久无套麻豆,亚洲香蕉毛片久久网站,一本一道久久综合狠狠老

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

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

3天內不再提示

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

先楫半導體HPMicro ? 2022-12-12 17:57 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

一、TinyMaix是什么?
TinyMaix是國內sipeed團隊開發一個輕量級AI推理框架,官方介紹如下:TinyMaix 是面向單片機的超輕量級的神經網絡推理庫,即 TinyML 推理庫,可以讓你在任意單片機上運行輕量級深度學習模型。甚至在 Arduino ATmega328 (32KB Flash, 2KB RAM) 上都能基于 TinyMaix 進行手寫數字識別。TinyMaix官網提供了詳細介紹,可以在本文末尾的參考鏈接中找到鏈接。
二、TinyMaix移植
本節介紹如何將TinyMaix移植到HPM6750,詳細步驟如下:
2.1 開發環境搭建先楫官方支持SDK開發環境和RT-Thread開發環境,兩種開發環境的搭建方法均可在官方提供的開發板用戶手冊(HPM6750EVKMINI USER GUIDE.pdf 或 HPM6750EVK USER GUIDE.pdf 文件)中找到,也可以參考我此前發布的帖子,具體見本文最后的參考鏈接。考慮到TinyMaix對于現已支持的MCU,基準測試都是基于裸機進行的,因此這里使用的是HPM SDK開發環境。另外,基于裸機的移植在RTOS環境下一般也可以運行。因此,對于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本身的源代碼文件不多,整個移植過程相對還是比較簡單的。整體基本上分為三步:

  • 目錄規劃;
  • 修改源碼;
  • 編譯運行;

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

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

2.2.2 修改源碼

這里在src/benchmark.c文件內容如下:

#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;}

為了不直接拷貝基準測試代碼,簡化代碼結構,這里使用了不太常見的:直接#include 某個.c文件;在#include "xxx/main.c"前面,定義宏#define main benchmark_main,之后取消宏定義;這樣實現了將TinyMaix原有的測試代碼作為benchmark.c一部分,而又不與這里的main函數相沖突的目的。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項目的編譯、運行,具體可以開發環境搭建文章,鏈接見本文末尾。手寫數字識別(mnist模型),運行后,串口輸出結果如下:3f91d53c-78ab-11ed-b116-dac502259ad0.png

三、基準測試

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

  • mnist——手寫數字識別模型,輸入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修改優化等級;
  • 在SEGGER Embedded Studio中, 默認的堆大小設置為16384 字節(16KB),不夠運行vww96 和 mbnet128 模型,你可以通過菜單 Code -> Runtime Memory Area -> Heap Size修改具體配置大小,例如可以為524288(512KB);
  • 對于FP32模型,需要將RISC-V ISA設置從默認的rv32imac改為rv32gc(Code -> Code Generation -> RIS-V ISA),確保編譯器可以生成浮點數操作指令。

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

    關注

    91

    文章

    40715

    瀏覽量

    302355
  • 先楫半導體
    +關注

    關注

    12

    文章

    287

    瀏覽量

    3375
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    hpm6750 高頻發送 udp_send 時 過一段時間就返回ERR_INPROGRESS

    現在發生的異常是 運行環境是 hpm6750 開發的一個例程 是用lwip 裸機(無os) 每500us 發送一個 udp請求 開始運行的時候正常 運行一段時間后就返回ERR_INPR
    發表于 04-06 21:49

    【瑞薩AI挑戰賽】手寫數字識別模型在RA8P1 Titan Board的部署

    的高性能嵌入式AI開發板,其硬件配置完美適配輕量級神經網絡的端側部署需求,核心硬件資源如下: 主控MCU:R7KA8P1KFLCAC,搭載1GHz Arm? Cortex?-M85與250MHz Arm
    發表于 03-15 20:42

    hpm6750 兩個板載網卡+usbcdc_ecm網卡,多次調用ftp,切換網卡后,報錯

    hpm6750 兩個板載網卡+usbcdc_ecm網卡,多次調用ftp,多次切換網線后,出現報錯pbuf_free:p->ref>0;有時候出現[E
    發表于 01-19 16:05

    重磅更新 | 先半導體HPM_APPS v1.10.1發布

    重磅更新 | 先半導體HPM_APPS v1.10.1發布
    的頭像 發表于 12-26 08:33 ?1269次閱讀
    重磅更新 | 先<b class='flag-5'>楫</b>半導體<b class='flag-5'>HPM</b>_APPS v1.10.1發布

    瑞芯微SOC智能視覺AI處理器

    。B2版本通常在功耗、穩定性和部分外圍接口支持上有所優化。NPU: 集成0.8 TOPS的NPU,支持INT8/INT16混合運算,能滿足大多數邊緣側的輕量級AI推理需求(如分類、檢測、識別)。多媒體
    發表于 12-19 13:44

    何在DGX Spark運行NVIDIA Omniverse

    首先感謝 Vigor 同學第一時間的分享,以下是具體如何在 DGX Spark 運行 Omniverse 的方法。
    的頭像 發表于 12-17 10:13 ?847次閱讀
    如<b class='flag-5'>何在</b>DGX Spark<b class='flag-5'>上</b><b class='flag-5'>運行</b>NVIDIA Omniverse

    【CW32】uart_obj_fw 輕量級串口框架

    輕量級跨平臺串口通信框架,專為資源受限的嵌入式設備設計。單個對象RAM占用最小68字節左右(不算緩沖區),ROM占用1-2k字節左右,功能支持裁剪,資源占用小并不代表低性能,該庫參考了freeRTOS
    的頭像 發表于 09-29 18:02 ?7910次閱讀

    請問如何在RK3588使用npu,用onnx模型來推理

    請問如何在瑞芯微 RK3588使用npu,用onnx模型來推理。官網上介紹說要把ONNX模型轉換成RKNN模型。但是我并不想這么干,請問有什么辦法嗎?
    發表于 08-09 00:51

    基于米爾瑞芯微RK3576開發板部署運行TinyMaix:超輕量級推理框架

    本文將介紹基于米爾電子MYD-LR3576開發平臺部署超輕量級推理框架方案:TinyMaix 摘自優秀創作者-短笛君 TinyMaix
    發表于 07-25 16:35

    何在RK3576開發板運行TinyMaix :超輕量級推理框架--基于米爾MYD-LR3576開發板

    本文將介紹基于米爾電子MYD-LR3576開發平臺部署超輕量級推理框架方案:TinyMaix摘自優秀創作者-短笛君TinyMaix是面向單片
    的頭像 發表于 07-25 08:03 ?4370次閱讀
    如<b class='flag-5'>何在</b>RK3576開發板<b class='flag-5'>上</b><b class='flag-5'>運行</b><b class='flag-5'>TinyMaix</b> :超<b class='flag-5'>輕量級</b><b class='flag-5'>推理</b><b class='flag-5'>框架</b>--基于米爾MYD-LR3576開發板

    信而泰×DeepSeek:AI推理引擎驅動網絡智能診斷邁向 “自愈”時代

    、資源分配的最優策略建議,減少資源浪費,提升整體網絡效率。 客戶實證:AI推理引擎的精準力量某大型政務云平臺遭遇核心業務運行緩慢問題,初步懷疑網絡帶寬不足。在利用信而泰xnSight網絡應用性能管理系統
    發表于 07-16 15:29

    半導體HPM6E8Y:先實時控制芯片驅動的機器人關節“芯”時代

    機器人的運動控制需要兼顧通信的高實時性及高帶寬,以確保機器人能夠迅速響應外部指令和環境變化。如何去解決機器人運動下的通信難題,在松山湖中國IC創新高峰論壇,上海先半導體科技有限公司嵌入式專家
    發表于 05-13 11:50 ?1863次閱讀
    先<b class='flag-5'>楫</b>半導體<b class='flag-5'>HPM</b>6E8Y:先<b class='flag-5'>楫</b>實時控制芯片驅動的機器人關節“芯”時代

    重磅更新 | 先半導體HPM_APPS v1.9.0發布

    重磅更新 | 先半導體HPM_APPS v1.9.0發布
    的頭像 發表于 05-13 11:29 ?1959次閱讀
    重磅更新 | 先<b class='flag-5'>楫</b>半導體<b class='flag-5'>HPM</b>_APPS v1.9.0發布

    【強勢新】HPM5E00:EtherCAT運動控制MCU,先半導體再拓工業總線產品新版圖

    。該系列是繼HPM6E00后的又一重磅布局,標志著先在EtherCAT工業通信領域的持續發力與技術深化。 HPM5E00系列 在延續HPM6E00高算力基因的基礎
    發表于 05-07 14:07 ?1175次閱讀
    【強勢<b class='flag-5'>上</b>新】<b class='flag-5'>HPM</b>5E00:EtherCAT運動控制MCU,先<b class='flag-5'>楫</b>半導體再拓工業總線產品新版圖

    【強勢新】HPM5E00:EtherCAT運動控制MCU,先半導體再拓工業總線產品新版圖

    HPM6E00后的又一重磅布局,標志著先在EtherCAT工業通信領域的持續發力與技術深化。HPM5E00系列在延續HPM6E00高算力基因的基礎
    的頭像 發表于 05-06 11:09 ?1531次閱讀
    【強勢<b class='flag-5'>上</b>新】<b class='flag-5'>HPM</b>5E00:EtherCAT運動控制MCU,先<b class='flag-5'>楫</b>半導體再拓工業總線產品新版圖