![af665f38-cdf5-11ec-bce3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/95/4F/wKgZomTm_QqAGxWKAAAAn4YuUA8177.png)
TensorFlow Lite 官方倉庫:
https://github.com/iysheng/tflite-micro
我的ART-Pi-smart倉庫:
https://gitee.com/iysheng/ART-Pi-smart
![af754386-cdf5-11ec-bce3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/95/4F/wKgZomTm_QuAJ4fsAAAAn4YuUA8371.png)
![af82867c-cdf5-11ec-bce3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/95/4F/wKgZomTm_QuADTTJAAAAn4YuUA8335.png)
經過了多天的摸索學習,今天將 TensorFlow Lite 的框架移植到了ART-Pi Smart上,但是還是存在一點問題,主要是 C++ 和 C 語言混合編譯的問題,根據目前我的總結,具體體現在:
-
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](https://file1.elecfans.com//web2/M00/95/4F/wKgZomTm_QuAW9zyAABf4lL2tYk655.png)
-
移植
+關注
關注
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基于RT-Thread Smart系統的LVGL移植
![<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>](https://file1.elecfans.com/web2/M00/B3/82/wKgZomVm2RCAbVlCAAGK1LjP1po010.jpg)
ART-PI重力感應無線智能小車設計實現
怎樣在ART-Pi H750上移植TouchGFX呢
配置ART-Pi Smart開發板的啟動方式資料推薦
分享一種在ART-Pi Smart上進行車標識別的設計方案
ART-PI嵌入式人形檢測設計資料實現
ART-PI smart PWM的問題是如何修復的
RT-Thread聯合百問科技出品ART-Pi Smart開發板
【STM32H750】玩轉ART-Pi(一)——使用STM32CUBMX生成TouchGFX工程
![【STM32H750】玩轉<b class='flag-5'>ART-Pi</b>(一)——使用STM32CUBMX生成TouchGFX工程](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論