把Tensorflow Lite Micro 加入到MCU项目

/ 0评 / 1

先说静态编译,因为TFLM每次编译都非常消耗时间,在单片机开发中全量编译也是常见的事情,不如把库先编译成静态,然后放到代码结构里,以后每次都简单一些.

比如为Cortex-M4硬件浮点支持制作静态库的命令.

make -f tensorflow/lite/micro/tools/make/Makefile OPTIMIZED_KERNEL_DIR=cmsis_nn TARGET=cortex_m_generic TARGET_ARCH=cortex-m4+fp microlite

具体参考文档

https://github.com/tensorflow/tflite-micro/tree/main/tensorflow/lite/micro/cortex_m_generic

创建.a文件之后,可以通过链接到工程里用,但是源码还是可以放进去调试的,至于如果不需要源码,也可以只保留头文件.

除了microlite这个目标,还有list_library_sources这个目标也很实用,因为TFLM源码很多,根本不知道那些需要编译哪些不需要,如果不做静态链接,那么就很有必要控制哪些文件加入到项目了.


现在开始说直接拿源码加到工程,先通过list_library_sources找到需要哪些文件编译进去.

右边添加需要编译的文件,左边把依赖库也要放进去,依赖库版本可以看官方的Makefile调用就知道(有强制特定版本)

添加设备宏定义以及CMSIS-NN库.

需要C调用的部分修饰一下.

extern "C" int tflm_main(void) {
  tflite::InitializeTarget();
  TF_LITE_ENSURE_STATUS(ProfileMemoryAndLatency());
  TF_LITE_ENSURE_STATUS(LoadFloatModelAndPerformInference());
  TF_LITE_ENSURE_STATUS(LoadQuantModelAndPerformInference());
  MicroPrintf("~~~ALL TESTS PASSED~~~\n");
  return kTfLiteOk;
}

然后就可以在C语言文件上进行调用了.

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注