在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

RT-Thread上部署TinyMaix推理框架,使MCU賦予AI能力

Rice嵌入式開發技術分享 ? 來源:Rice嵌入式開發技術分享 ? 作者:Rice嵌入式開發技術 ? 2023-11-05 08:39 ? 次閱讀


概要

當談到微控制器MCU)和人工智能AI)的結合,我們進入了一個激動人心的領域。傳統上,AI應用程序需要大型計算機或云服務器的處理能力,但隨著技術的發展,現在可以將AI嵌入到微控制器中。這為嵌入式系統物聯網設備、機器人和各種其他應用開啟了新的可能性。

MCU AI的崛起

MCU AI代表著微控制器上的人工智能。它是將機器學習深度學習模型部署到資源有限但功能強大的微控制器中,以實現智能決策和感知。以下是MCU AI的一些關鍵方面:

  • 低功耗:微控制器通常以電池供電,因此低功耗是至關重要的。AI模型需要經過優化,以在微控制器上運行,同時盡量減小能耗。
  • 實時性:微控制器常常用于實時控制系統,因此AI模型需要在極短的時間內執行,以應對即時需求。
  • 感知和決策:MCU AI可以使設備具備感知環境、分析數據并作出決策的能力。這對于自主機器人、智能傳感器和自動控制系統尤為有用。

MCU AI的應用

MCU AI可以應用于各種領域,下面是一些示例:

  • 智能物聯網設備:微控制器上的AI可以使物聯網設備更加智能,例如智能家居設備、智能燈具和智能門鎖。它們可以學習用戶的偏好,并自動適應不同環境。
  • 自主機器人:微控制器上的AI使自主機器人能夠避障、規劃路徑和執行任務,例如清掃機器人和無人機
  • 醫療設備:在醫療設備中,MCU AI可以用于監測患者的生命體征,提供早期警報和更好的病人護理。
  • 工業自動化:微控制器上的AI可用于工業機器人、自動化生產線和質量控制系統,提高效率和質量。

作者開始深入進嵌入式AI這個領域,不過學習之前先了解如何用起來,跑起來。本篇文章聊一下如何移植TinyMaix推理框架到RT-THREAD并運行起來。

TinyMaix

TinyMaix:是矽速科技Sipeed)利用兩個周末的業余時間完成的項目,它是一款專為微控制器設計的輕量級開源機器學習庫,面向單片機的超輕量級的神經網絡推理庫,即TinyML推理庫,可以讓你在任意單片機上運行輕量級深度學習模型。TinyMaix開源代碼鏈接:https://github.com/sipeed/tinymaix。

TinyMaix關鍵特性

  • 核心代碼少于 400行(tm_layers.c+tm_model.c+arch_cpu.h), 代碼段(.text)少于3KB
  • 低內存消耗,甚至 Arduino ATmega328 (32KB Flash, 2KB Ram) 都能基于 TinyMaix 跑 mnist(手寫數字識別)
  • 支持 INT8/FP32/FP16 模型,實驗性地支持 FP8 模型,支持 keras h5 或 tflite 模型轉換
  • 支持多種芯片架構的專用指令優化: ARM SIMD/NEON/MVEI,RV32P, RV64V
  • 友好的用戶接口,只需要 load/run 模型~
  • 支持全靜態的內存配置(無需 malloc )
  • 即將支持 MaixHub 在線模型訓練

TinyMaix底層依賴

TinyMaix可以簡單理解為一個矩陣和向量計算庫,目前已支持如下幾種計算硬件:

#defineTM_ARCH_CPU(0)//default,purecpucompute
#defineTM_ARCH_ARM_SIMD(1)//ARMCortexM4/M7,etc.
#defineTM_ARCH_ARM_NEON(2)//ARMCortexA7,etc.
#defineTM_ARCH_ARM_MVEI(3)//ARMv8.1:M55,etc.
#defineTM_ARCH_RV32P(4)//T-headE907,etc.
#defineTM_ARCH_RV64V(5)//T-headC906,C910,etc.
#defineTM_ARCH_CSKYV2(6)//cskyv2withdspcore
#defineTM_ARCH_X86_SSE2(7)//x86sse2

對于ARM-Cortex系列MCU,可以支持純CPU計算和SIMD計算。其中CPU計算部分無特殊依賴(計算代碼均使用標準C實現)。SIMD部分,部分計算代碼使用了C語言內嵌匯編實現,需要CPU支持相應的匯編指令,才可以正常編譯、運行。

TinyMaix等級選擇

TinyMaix目前支持兩種等級:1. 選擇最少代碼和buf 2. 選擇速度,需要更多代碼和buf

#defineTM_OPT0(0)//default,leastcodeandbuf
#defineTM_OPT1(1)//optforspeed,needmorecodeandbuf
#defineTM_OPT2(2)//TODO

TinyMaix量化

TinyMaix支持不同位寬的量化:

#defineTM_MDL_INT80
#defineTM_MDL_INT161
#defineTM_MDL_FP322
#defineTM_MDL_FP163
#defineTM_MDL_FP8_1434//experimental
#defineTM_MDL_FP8_1525//experimental

TinyMaix核心API

TinyMaix框架對上層應用程序提供的核心API主要位于代碼倉的tinymaix.h文件中,其中:

  1. 模型API包含四個:模型加載,模型卸載,預處理,推理。
/*******************************MODELFUNCTION************************************/
tm_err_ttm_load(tm_mdl_t*mdl,constuint8_t*bin,uint8_t*buf,tm_cb_tcb,tm_mat_t*in);//loadmodel
voidtm_unload(tm_mdl_t*mdl);//removemodel
tm_err_ttm_preprocess(tm_mdl_t*mdl,tm_pp_tpp_type,tm_mat_t*in,tm_mat_t*out);//preprocessinputdata
tm_err_ttm_run(tm_mdl_t*mdl,tm_mat_t*in,tm_mat_t*out);//runmodel
  1. 統計函數:用于輸出模型中間層信息
/*******************************STATFUNCTION************************************/
#ifTM_ENABLE_STAT
tm_err_ttm_stat(tm_mdlbin_t*mdl);//statmodel
#endif
  1. 工具函數,包含FP32和uint8的互轉
/*******************************UTILSFUNCTION************************************/
uint8_tTM_WEAKtm_fp32to8(floatfp32);
floatTM_WEAKtm_fp8to32(uint8_tfp8);

這里的模型,通常是預訓練模型經過腳本轉換生成的TinyMaix格式的模型;

TinyMaix移植到RT-Thread

  1. TinyMaix移植到RT-Thread工作量其實不到,主要適配tm_port.h文件即可。
  2. RT-Thread的配置是通過Kconfig設置一些參數的,所以我把硬件類型,選擇等級,量化類型都修改為Kconfig進行配置。
#defineTM_ARCHR_TINYMAIX_USING_ARCK_TYPE
#defineTM_OPT_LEVELR_TINYMAIX_USING_OPTION_LEVEL
#defineTM_MDL_TYPER_TINYMAIX_USING_MODULE_TYPE
  1. TinyMaix需要對接平臺內聯,內存,打印等接口,所以我們修改對應宏定義,將其適配到RT-Thread平臺的接口上。
#defineTM_INLINErt_inline
#defineTM_WEAKrt_weak

#definetm_malloc(x)rt_malloc(x)
#definetm_free(x)rt_free(x)

#defineTM_PRINTF(...)rt_kprintf(__VA_ARGS__)
  1. TinyMaix調試依賴于精準的計時,我們需要適配其對應的幾個宏定義,因為RT-Thread系統沒有提供微秒級的接口,只有毫秒級的接口,所以我做了簡單的適配。
#defineTM_GET_US()rt_tick_get_millisecond()/1000;

#defineTM_DBGT_INIT()uint32_t_start,_finish;
float_time;
_start=TM_GET_US();

#defineTM_DBGT_START()_start=TM_GET_US();

#defineTM_DBGT(x){
_finish=TM_GET_US();
_time=(float)(_finish-_start)/1.0;
TM_PRINTF("===%suse%.3fmsn",(x),_time);
_start=TM_GET_US();
}
  1. TinyMaix提供了多個實例,如:cifar10,mnist,vww等,RT-Thread支持命令行輸入,為了實例可以在通過命令函運行,我們需要修改一下文件名和接口名字。
  • 我們將examples下的cifar10,mnist,vww三個實例下的main.c修改為對應實例的名字:cifar10.c,mnist.c,vww.c。
  • 將cifar10.c,mnist.c,vww.c中的main函數修改為對應實例名字。
intcifar10(intargc,char**argv)

intmnist(intargc,char**argv)

intvww(intargc,char**argv)
  • 將實例接口導出到命令行中。
MSH_CMD_EXPORT(cifar10,TinyMaixcifar10example);

MSH_CMD_EXPORT(mnist,TinyMaixmnistexample);

MSH_CMD_EXPORT(vww,TinyMaixvwwexample);

TinyMaix運行效果

實例的運行環境:STM32F401RE,M4內核,時鐘頻率:84MHz,RAM:96 KB,Flash:512 KB

  1. cifar10實例,分類檢測,識別圖片是一只鳥:
c22d8754-7b73-11ee-b3e3-92fbcf53809c.jpgc241c2be-7b73-11ee-b3e3-92fbcf53809c.jpg
  1. mnist實例,數字識別,圖片是一個數字2:

c2558a9c-7b73-11ee-b3e3-92fbcf53809c.png

c2693f74-7b73-11ee-b3e3-92fbcf53809c.jpg
  1. vww實例,檢測有沒有人,圖片有人:
c27013e4-7b73-11ee-b3e3-92fbcf53809c.jpg

c2758cc0-7b73-11ee-b3e3-92fbcf53809c.png

總結

  1. TinyMaix作者已經做了一個RT-Thread的軟件包:r-tinymaix。可以在RT-Thread中工程中加入軟件包即可以驗證。
  2. r-tinymaix的開源鏈接:https://github.com/RiceChen0/r-tinymaix
  3. TinyMaix非常贊,可以讓一個普普通通的單片機擁有AI能力,讓嵌入式AI成本減低。

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

    關注

    146

    文章

    17148

    瀏覽量

    351186
  • AI
    AI
    +關注

    關注

    87

    文章

    30887

    瀏覽量

    269068
  • RT-Thread
    +關注

    關注

    31

    文章

    1289

    瀏覽量

    40125
  • 深度學習
    +關注

    關注

    73

    文章

    5503

    瀏覽量

    121157
  • TinyML
    +關注

    關注

    0

    文章

    42

    瀏覽量

    1237
收藏 人收藏

    評論

    相關推薦

    基于RT-Thread的RoboMaster電控框架設計

    由于 RT-Thread 穩定高效的內核,豐富的文檔教程,積極活躍的社區氛圍,以及設備驅動框架、Kconfig、Scons、日志系統、海量的軟件包……很難不選擇 RT-Thread 進行項目開發。
    發表于 09-06 15:21 ?703次閱讀

    RT-Thread AI kit輕松部署 STM32Cube-AIRT-Thread 精選資料推薦

    RT-AK 簡介RT-AK:RT-Thread AI kit,RT-Thread AI套件
    發表于 07-20 08:20

    關于RT-AK開源輕松實現一鍵部署AI模型至RT-Thread解析

    RT-AK 是 RT-Thread 團隊為 RT-Thread 實時操作系統所開發的 AI 套件,能夠一鍵將 AI 模型
    的頭像 發表于 04-26 18:07 ?4261次閱讀
    關于<b class='flag-5'>RT</b>-AK開源輕松實現一鍵<b class='flag-5'>部署</b><b class='flag-5'>AI</b>模型至<b class='flag-5'>RT-Thread</b>解析

    RT-Thread AI kit開源:輕松實現一鍵部署AI模型至 RT-Thread

    RT-AK 是 RT-Thread 團隊為 RT-Thread 實時操作系統所開發的 AI 套件,能夠一鍵將 AI 模型
    發表于 01-25 18:18 ?3次下載
    <b class='flag-5'>RT-Thread</b> <b class='flag-5'>AI</b> kit開源:輕松實現一鍵<b class='flag-5'>部署</b><b class='flag-5'>AI</b>模型至 <b class='flag-5'>RT-Thread</b>

    RT-Thread大會:瑞薩e- AI成功案例及部署

      RT-Thread IoT OS Global Tech Conference (RT-Thread GTC,RT-Thread全球技術大會)致力于圍繞RT-Thread IoT
    的頭像 發表于 05-27 10:18 ?1398次閱讀
    <b class='flag-5'>RT-Thread</b>大會:瑞薩e- <b class='flag-5'>AI</b>成功案例及<b class='flag-5'>部署</b>

    RT-Thread全球技術大會:RT-Thread上的單元測試框架與運行測試用例

    RT-Thread全球技術大會:RT-Thread上的單元測試框架與運行測試用例 ? ? ? ? ? ? ? ? 審核編輯:彭靜
    的頭像 發表于 05-27 16:21 ?1628次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術大會:<b class='flag-5'>RT-Thread</b>上的單元測試<b class='flag-5'>框架</b>與運行測試用例

    RT-Thread設備模型框架及創建注冊設備的實現

    RT-Thread設備模型框架及創建注冊設備的實現方式介紹如下:
    的頭像 發表于 05-28 10:38 ?2188次閱讀
    <b class='flag-5'>RT-Thread</b>設備模型<b class='flag-5'>框架</b>及創建注冊設備的實現

    RT-Thread文檔_RT-Thread 簡介

    RT-Thread文檔_RT-Thread 簡介
    發表于 02-22 18:22 ?5次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> 簡介

    RT-Thread文檔_RT-Thread SMP 介紹與移植

    RT-Thread文檔_RT-Thread SMP 介紹與移植
    發表于 02-22 18:31 ?9次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> SMP 介紹與移植

    RT-Thread文檔_utest 測試框架

    RT-Thread文檔_utest 測試框架
    發表于 02-22 18:43 ?2次下載
    <b class='flag-5'>RT-Thread</b>文檔_utest 測試<b class='flag-5'>框架</b>

    如何在RT-Thread OS環境下使用ncnn進行AI推理

    今天簡報較短,主要演示一下如何在RT-Thread OS環境下使用ncnn進行AI推理
    的頭像 發表于 05-04 16:29 ?1340次閱讀
    如何在<b class='flag-5'>RT-Thread</b> OS環境下使用ncnn進行<b class='flag-5'>AI</b><b class='flag-5'>推理</b>

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

    本期內容由先楫開發者社區大咖@xusiwei1236分享基于先楫HPM6750的輕量級AI推理框架,趕緊來瞧瞧~一、TinyMaix是什么?Tiny
    的頭像 發表于 12-12 17:57 ?1578次閱讀
    測評分享 | 如何在先楫HPM6750上運行輕量級<b class='flag-5'>AI</b><b class='flag-5'>推理</b><b class='flag-5'>框架</b><b class='flag-5'>TinyMaix</b>

    淺析RT-Thread設備驅動框架

    RT-Thread 設備框架屬于組件和服務層,是基于 RT-Thread 內核之上的上層軟件。設備框架是針對某一類外設,抽象出來的一套統一的操作方法及接入標準,可以屏蔽硬件差異,為應用
    的頭像 發表于 08-07 15:39 ?1972次閱讀

    基于 RT-Thread 的 RoboMaster 電控框架(一)

    由于 RT-Thread 穩定高效的內核,豐富的文檔教程,積極活躍的社區氛圍,以及設備驅動框架、Kconfig、Scons、日志系統、海量的軟件包……很難不選擇 RT-Thread 進行項目開發
    的頭像 發表于 09-19 19:55 ?769次閱讀

    基于RT-Thread的RoboMaster電控框架(二)

    由于 RT-Thread 穩定高效的內核,豐富的文檔教程,積極活躍的社區氛圍,以及設備驅動框架、Kconfig、Scons、日志系統、海量的軟件包
    的頭像 發表于 09-20 15:16 ?755次閱讀
    主站蜘蛛池模板: 免费看片免| h国产在线| 1000部又爽又黄的做黄禁片| 啪啪午夜| 久久精品国产精品亚洲精品| 亚洲狠狠操| 扒开双腿猛进湿润18p| 五月天精品在线| 欧美视频a| 高清毛片一区二区三区| 天天搞天天色| 欧美成人黄色| 中文字幕成人乱码在线电影| 色婷婷影视| 国产免费一级高清淫日本片| 天天弄| 热re99久久精品国产99热| 香蕉久久久久久狠狠色| 欧美成人午夜精品一区二区| 爆操极品美女| 国产精品毛片天天看片| 久久人人澡| 久久久精品免费国产四虎| 天天色亚洲| 国产区亚洲区| 欧美一区二区三区高清视频| h色小视频| 波多野结衣的毛片| 宅男午夜| 久青草久青草高清在线播放| 午夜精品久久久久久久99| 日本人69xxx| 全日本爽视频在线| 伊人网综合在线视频| 欧美三级黄| 欧美一区二区三区视频| 手机看福利片| 免看一级a毛片一片成人不卡| 日本.www| 黑色丝袜美美女被躁视频| 99国产在线|