吴忠躺衫网络科技有限公司

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

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

3天內不再提示

TensorFlow Lite實現移植到ART-Pi Smart

RTThread物聯網操作系統 ? 來源:RTThread物聯網操作系統 ? 作者:RTThread物聯網操作 ? 2022-05-10 14:29 ? 次閱讀

af665f38-cdf5-11ec-bce3-dac502259ad0.png

TensorFlow Lite 官方倉庫:

https://github.com/iysheng/tflite-micro

我的ART-Pi-smart倉庫:

https://gitee.com/iysheng/ART-Pi-smart

af754386-cdf5-11ec-bce3-dac502259ad0.pngaf82867c-cdf5-11ec-bce3-dac502259ad0.png

經過了多天的摸索學習,今天將 TensorFlow Lite 的框架移植到了ART-Pi Smart上,但是還是存在一點問題,主要是 C++ 和 C 語言混合編譯的問題,根據目前我的總結,具體體現在:
  • TensorFlow Lite 在函數中定義的靜態對象無法正常構造,必須放在全局變量的位置

  • 全局變量定義的對象只能使用默認的構造函數,無發使用帶有參數的構造函數初始對象

針對上述兩個現象,我在運行測試 Hello world 例程時,對 TensorFlow Lite 做出來的主要改動是:
 1diff--gita/kernel/bsp/imx6ull-artpi-smart/applications/tflm_tree/examples/hello_world/main_functions.ccb/kernel/bsp/imx6ull-artpi-smart/applications/tflm_tree/examples/hello_world/main_functions.cc
 2indexa585ba7..a318c32100644
 3---a/kernel/bsp/imx6ull-artpi-smart/applications/tflm_tree/examples/hello_world/main_functions.cc
 4+++b/kernel/bsp/imx6ull-artpi-smart/applications/tflm_tree/examples/hello_world/main_functions.cc
 5@@-37,18+37,30@@constexprintkTensorArenaSize=2000;
 6uint8_ttensor_arena[kTensorArenaSize];
 7}//namespace
 8
 9+statictflite::MicroErrorReportermicro_error_reporter;
10+//Thispullsinalltheoperationimplementationsweneed.
11+//NOLINTNEXTLINE(runtime-global-variables)
12+statictflite::AllOpsResolverresolver;
13+statictflite::MicroInterpreter*static_interpreter;
14+
15//ThenameofthisfunctionisimportantforArduinocompatibility.
16voidsetup(){
17+
18+DebugLog("setupbegin.
");
19tflite::InitializeTarget();
20
21+DebugLog("initialok.
");
22+
23//Setuplogging.Googlestyleistoavoidglobalsorstaticsbecauseof
24//lifetimeuncertainty,butsincethishasatrivialdestructorit'sokay.
25//NOLINTNEXTLINE(runtime-global-variables)
26-statictflite::MicroErrorReportermicro_error_reporter;
27+/*這個地方有問題*/
28error_reporter=µ_error_reporter;
29
30//Mapthemodelintoausabledatastructure.Thisdoesn'tinvolveany
31//copyingorparsing,it'saverylightweightoperation.
32+//printf("value:%x%u
",g_hello_world_model_data[0],g_hello_world_model_data_size);
33+
34model=tflite::GetModel(g_hello_world_model_data);
35if(model->version()!=TFLITE_SCHEMA_VERSION){
36TF_LITE_REPORT_ERROR(error_reporter,
37@@-57,15+69,10@@voidsetup(){
38model->version(),TFLITE_SCHEMA_VERSION);
39return;
40}
41-
42-//Thispullsinalltheoperationimplementationsweneed.
43-//NOLINTNEXTLINE(runtime-global-variables)
44-statictflite::AllOpsResolverresolver;
45-
46//Buildaninterpretertorunthemodelwith.
47-statictflite::MicroInterpreterstatic_interpreter(
48+static_interpreter=newtflite::MicroInterpreter(
49model,resolver,tensor_arena,kTensorArenaSize,error_reporter);
50-interpreter=&static_interpreter;
51+interpreter=static_interpreter;
52
53//Allocatememoryfromthetensor_arenaforthemodel'stensors.
54TfLiteStatusallocate_status=interpreter->AllocateTensors();
55@@-102,6+109,7@@intloop(){
56if(invoke_status!=kTfLiteOk){
57TF_LITE_REPORT_ERROR(error_reporter,"Invokefailedonx:%f
",
58static_cast<double>(x));
59+printf("invokestatus:%x
",invoke_status);
60return-1;
61}

參考的資料主要有:

1、tinyML基TensorFlow Lite在Arduino

2、https://github.com/iysheng/tflite-micro/blob/main/tensorflow/lite/micro/docs/new_platform_support.md

特別關鍵的一點是提取基礎框架的文件:python3 tensorflow/lite/micro/tools/project_generation/create_tflm_tree.py -e hello_world /tmp/tflm-tree
根據官方的文檔,上述命令就可以將 hello_world 工程相關的文件提取到指定的 /tmp/tflm-tree 目錄,下一步做的就是將這部分內容添加到 RT-Thread Smart 工程中,編譯出來。相關的代碼,我都上傳到了我的ART-Pi Smart的倉庫。如果有問題歡迎和我討論。展示下,運行起來的效果,為了展示需要,刪除了部分空行打印:
  1U-Boot2017.03-g002b758ac9-dirty(Jul082021-10:45:12+0000)
  2CPU:Freescalei.MX6ULLrev1.1696MHz(runningat396MHz)
  3CPU:Industrialtemperaturegrade(-40Cto105C)at44C
  4Resetcause:POR
  5Model:Freescalei.MX6ULL14x14EVKBoard
  6Board:MX6ULL14x14EVK
  7DRAM:512MiB
  8MMC:FSL_SDHC:0,FSL_SDHC:1
  9Display:TFT7016(1024x600)
 10Video:1024x600x24
 11In:serial
 12Out:serial
 13Err:serial
 14switchtopartitions#0,OK
 15mmc1(part0)iscurrentdevice
 16Net:eth0:ethernet@02188000[PRIME]
 17NormalBoot
 18Hitanykeytostopautoboot:3210
 19ethernet@02188000WaitingforPHYautonegotiationtocomplete....done
 20Usingethernet@02188000device
 21TFTPfromserver10.20.52.39;ourIPaddressis10.20.52.89
 22Filename'rtthread.bin'.
 23Loadaddress:0x80001000
 24Loading:*#################################################################
 25###############################################################
 26159.2KiB/s
 27done
 28Bytestransferred=1866656(1c7ba0hex)
 29##Startingapplicationat0x80001000...
 30|/
 31-RT-ThreadSmartOperatingSystem
 32/|5.0.0buildApr302022
 332006-2020Copyrightbyrt-threadteam
 34docomponentsinitialization.
 35initializerti_board_end:0done
 36initializedfs_init:0done
 37initializert_mmcsd_core_init:0done
 38initializert_usbd_winusb_class_register:0done
 39initializefutex_system_init:0done
 40initializepmutex_system_init:0done
 41initializelwip_system_initlwIP-2.1.2initialized!
 42:0done
 43initializeulog_console_backend_init:0done
 44initializeulog_init:0done
 45initializert_hw_adc_init:0done
 46initializert_hw_csi_init:0done
 47initializert_hw_dbg_mm_init:0done
 48initializeimx6ul_eth_initredfirstva=f00here0000
 49here1111mmu_l2=c107c000
 50[31m[63]E/drv.enet:emacdeviceinitsuccess
 51[0m:0done
 52initializert_hw_i2c_init[32m[70]I/I2C:I2Cbus[i2c1]registered
 53[0m[32m[75]I/I2C:I2Cbus[i2c3]registered
 54[0m[32m[79]I/I2C:I2Cbus[i2c4]registered
 55[0m:0done
 56initializert_hw_elcd_init[86]D/drv.lcd:fbaddress=>0x811c0000
 57:0done
 58initializert_hw_pwm_init:0done
 59initializert_hw_rtc_init:0done
 60initializeimxrt_mci_init:0done
 61initializert_hw_spi_init:0done
 62initializegt911_init[31m[158]E/drv.enet:PHYLinkdown,pleasecheckthecableconnectionandlinkpartnersetting.
 63[0m[32m[192]I/SDIO:emmccardcapacity3817472KB.
 64[0mfoundpart[0],begin:2098176,size:500.0MB
 65foundpart[1],begin:526386176,size:1.0GB
 66foundpart[2],begin:1600128000,size:10.0MB
 67foundpart[3],begin:1610613760,size:200.0MB
 68[32m[328]I/touch:rt_touchinitsuccess
 69[0m[32m[332]I/gt911:touchdevicegt911initsuccess
 70[0m:0done
 71initializert_usbd_init:0done
 72initializert_hw_wdt_init:0done
 73initializenull_device_init:0done
 74initializerandom_device_init:0done
 75initializeurandom_device_init:0done
 76initializezero_device_init:0done
 77initializert_work_sys_workqueue_init:0done
 78initializeptmx_register:0done
 79initializecritical_init:0done
 80initializert_hw_ov5640_init:0done
 81initializecplusplus_system_init:0done
 82initializeelm_init:0done
 83initializedfs_romfs_init:0done
 84initializert_i2c_core_init:0done
 85initializelibc_system_init:0done
 86initializeclock_time_system_init:0done
 87initializesal_init[32m[390]I/sal.skt:SocketAbstractionLayerinitializesuccess.
 88[0m:0done
 89initializemnt_initemmcfilesysteminitializationdone!
 90:0done
 91initializeTF_lite_init[5309]D/drv.enet:enet1linkup
 92:0done
 93initializeem_initopenemfailed!
 94:-1done
 95initializeset_adc_init:0done
 96initializeset_pwm_default:0done
 97initializert_sysinfo_init:0done
 98initializefinsh_system_init:0done
 99Redsay:hellort-smart.
100openlcdokwatchdogstarting.....
101testtf.
102setupbegin.
103gohere
104initialok.
105getmodebegin.
106gethere?
107gethere000?
108constructtheclass.
109initok.
110x_value:1.0*2^-127,y_value:1.0297613*2^-7
111x_value:1.0053092*2^-5,y_value:1.8020826*2^-5
112x_value:1.0053092*2^-4,y_value:1.1584818*2^-4
113x_value:1.507964*2^-4,y_value:1.9308027*2^-4
114x_value:1.0053092*2^-3,y_value:1.0941217*2^-3
115x_value:1.2566366*2^-3,y_value:1.4802819*2^-3
116x_value:1.507964*2^-3,y_value:1.6733624*2^-3
117x_value:1.7592913*2^-3,y_value:1.8664425*2^-3
118x_value:1.0053092*2^-2,y_value:1.0619412*2^-2
119x_value:1.130973*2^-2,y_value:1.1584818*2^-2
特別地:
 1x_value:1.0*2^-127,y_value:1.0297613*2^-7
 2x_value:1.0053092*2^-5,y_value:1.8020826*2^-5
 3x_value:1.0053092*2^-4,y_value:1.1584818*2^-4
 4x_value:1.507964*2^-4,y_value:1.9308027*2^-4
 5x_value:1.0053092*2^-3,y_value:1.0941217*2^-3
 6x_value:1.2566366*2^-3,y_value:1.4802819*2^-3
 7x_value:1.507964*2^-3,y_value:1.6733624*2^-3
 8x_value:1.7592913*2^-3,y_value:1.8664425*2^-3
 9x_value:1.0053092*2^-2,y_value:1.0619412*2^-2
10x_value:1.130973*2^-2,y_value:1.1584818*2^-2
11...
上述部分是模型估算的正弦函數的數據,我繪制成圖表的效果如下:
af901652-cdf5-11ec-bce3-dac502259ad0.png效果還是不錯的,這使用的是官方例程 16 * 16 * 1 的三層模型。

原文標題:在 ART-Pi Smart 上運行 TensorFlow Lite

文章出處:【微信公眾號:RTThread物聯網操作系統】歡迎添加關注!文章轉載請注明出處。

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

    關注

    1

    文章

    383

    瀏覽量

    28193
  • SMART
    +關注

    關注

    3

    文章

    227

    瀏覽量

    44760
  • tensorflow
    +關注

    關注

    13

    文章

    329

    瀏覽量

    60631
  • TensorFlow Lite
    +關注

    關注

    0

    文章

    26

    瀏覽量

    647

原文標題:在 ART-Pi Smart 上運行 TensorFlow Lite

文章出處:【微信號:RTThread,微信公眾號:RTThread物聯網操作系統】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    ART-Pi Smart開發板開箱及愛之初次體驗

    ART-Pi Smart 開發板初次嘗鮮,ART-Pi Smart開箱及初次體驗內置應用.
    的頭像 發表于 05-03 16:25 ?5116次閱讀
    <b class='flag-5'>ART-Pi</b> <b class='flag-5'>Smart</b>開發板開箱及愛之初次體驗

    ART-Pi Smart開發板開箱體驗

    拿到開發板,首先考慮的是如何接線,先看了一遍sdk包里面 ART-Pi-smart-masterdocuments目錄下的操作文檔,然后拿了一根TypeC的usb線連接開發板并開始體驗ART-Pi開發板,如下圖所示。
    發表于 07-07 11:15 ?1193次閱讀

    ART-Pi Studio工程下NimBLE軟件包的使用

    本文主要介紹 ART-Pi Studio 工程下 NimBLE 軟件包的使用
    的頭像 發表于 08-26 10:31 ?1756次閱讀

    ART Pi Smart基于RT-Thread Smart系統的LVGL移植

    ART-Pi Smart開發板為RT-Thread聯合百問科技出品,使用的是 NXP 公司的 i.MX6ULL 處理器,具備單核 ARM Cortex-A7,最高運行頻率可以達到 800MHz。
    的頭像 發表于 11-29 14:29 ?1132次閱讀
    <b class='flag-5'>ART</b> <b class='flag-5'>Pi</b> <b class='flag-5'>Smart</b>基于RT-Thread <b class='flag-5'>Smart</b>系統的LVGL<b class='flag-5'>移植</b>

    ART-PI重力感應無線智能小車設計實現

    實現無線重力感應遙控小車。終極目標:發射板采用MPU6050采集陀螺儀數據,通過wifi+MQTT協議發布主題至Onenet服務器,控制板通過wifi+MQTT訂閱主題,實現無線遙控小車的目標;所有資料開源,PCB可直接打板,小飛哥已經測試,大家放心使用。
    發表于 02-10 06:39

    怎樣在ART-Pi H750上移植TouchGFX呢

    QSPI-FLASH燒錄算法在ART-Pi H750上移植TouchGFX(三)——移植TouchGFXRT-Thread系統在ART-Pi
    發表于 02-22 06:01

    基于ART-Pi Smart平臺的設計方案推薦

    ART-Pi Smart 平臺上實現視頻播放功能;由于ART-Pi Smart 沒有音頻模塊,所以沒有
    發表于 03-24 16:56

    配置ART-Pi Smart開發板的啟動方式資料推薦

    BOOT_MODE 寄存器、eFUSEs、配置管腳等狀態來決定啟動模式以及啟動設備。故在啟動前,用戶可根據自己需要配置 ART-Pi Smart 開發板的啟動方式。目前,ART-Pi Sma
    發表于 05-05 17:30

    分享一種在ART-Pi Smart上進行車標識別的設計方案

    1、在ART-Pi Smart上對攝像頭采集的數據進行車輛識別本來計劃使用 ART-Pi Smart 進行車標識別的,但是現在實際測試發現攝像頭采集的數據顯示有大概率抖動的現象發生,所
    發表于 06-02 15:11

    ART-PI嵌入式人形檢測設計資料實現

    1、ART-PI嵌入式人形檢測設計實現硬件平臺 ART-Pi, 50M FLOPS。我的模型(刪減后的模型)最終部署在板子上是推理時間是56ms,不包括數據處理時間。$ pip
    發表于 08-25 15:33

    ART-PI smart PWM的問題是如何修復的

    art-pi smart PWM問題修復記錄PWM功能是我需要使用的一個重要功能,art-pi smart板子本身就做好了PWM功能。實際一測試,傻眼了:頻率不是1000Hz,只有66
    發表于 09-13 16:46

    RT-Thread聯合百問科技出品ART-Pi Smart開發板

    ART-Pi Smart 開發板是RT-Thread聯合百問科技出品,用于學習和評估RT-Thread Smart微內核操作系統。 硬件配置 i.MX6ULL,單核 ARM Cortex-A7,最高
    的頭像 發表于 11-16 14:32 ?3023次閱讀

    【STM32H750】玩轉ART-Pi(一)——使用STM32CUBMX生成TouchGFX工程

    QSPI-FLASH燒錄算法在ART-Pi H750上移植TouchGFX(三)——移植TouchGFXRT-Thread系統在ART-Pi
    發表于 12-28 19:20 ?11次下載
    【STM32H750】玩轉<b class='flag-5'>ART-Pi</b>(一)——使用STM32CUBMX生成TouchGFX工程

    ART-PI Smart開發板介紹與開發環境的建立

    art-pi smart 是rt-thread公司推出的一款基于NXP公司imx6ull處理器的開發板,主要用來測試評估RT公司去年新發布的混合微內核操作系統RT-Smart
    的頭像 發表于 05-13 09:45 ?1714次閱讀

    ART-Pi Smart上對攝像頭采集的數據進行車標識別

    本來計劃使用 ART-Pi Smart 進行車標識別的,但是現在實際測試發現攝像頭采集的數據顯示有大概率抖動的現象發生,所以實現了將攝像頭采集的數據以 bmp 圖片格式存儲,然后發送到電腦端使用 tflite 格式的模型數據進行
    發表于 07-06 16:53 ?967次閱讀
    灵武市| 大赢家娱乐城| 大发888熊之舞怎么玩| 大发888娱乐场下载yguard| 明升投注 | 金百家乐官网博彩公司| 真人百家乐官网ea平台| 百家乐官网娱乐网佣金| 百家乐视频下栽| 百家乐官网博彩软件| 摩纳哥百家乐官网的玩法技巧和规则 | 百家乐ag厅投注限额| 肯博百家乐的玩法技巧和规则| 大发888屡败屡战| 玛多县| 百家乐官网高手心得| 波音百家乐网上娱乐| 网上百家乐作| 百家乐软件| 百家乐官网五星宏辉怎么玩| 百家乐稳赢赌法| 怎么玩百家乐的玩法技巧和规则| bet365滚球| 赌场百家乐官网破解| 百家乐免费破解外挂| 大发888秘籍| 澳门百家乐官网心德| 3U百家乐官网的玩法技巧和规则 | 澳门百家乐娱乐场开户注册| 德州扑克技巧| 银河百家乐官网的玩法技巧和规则 | 大发888娱乐城英皇国际| 当涂县| 聚宝盆百家乐官网的玩法技巧和规则| 百家乐信息| 网络赌博平台| 查找百家乐官网群| 申博太阳城娱乐| 百家乐官网规则好学吗| 网上百家乐辅助软件| 香港六合彩现场直播|