以下部分将介绍软件包自带语音历程中的 [main_functions.cc](https://github.com/QingChuanWS/tensorflow/tree/master/tensorflow/lite/micro/examples/person_detection_experimental/main_functions.cc) 文件并解释了它如何使用用于微控制器的 Tensorflow Lite 来运行推断。
以下部分将介绍软件包自带语音历程中的 [main_functions.cc](https://github.com/tensorflow/tensorflow/tree/5e0ed38eb746f3a86463f19bcf7138a959ddb2d4/tensorflow/lite/micro/examples/person_detection_experimental/main_functions.cc) 文件并阐述了如何使用 Tensorflow Lite Micro 来进行 AI 推理。
-[`micro_interpreter.h`](https://github.com/tensorflow/tensorflow/tree/5e0ed38eb746f3a86463f19bcf7138a959ddb2d4/tensorflow/lite/micro/micro_interpreter.h) Tensorflow Lite Micro 解释器,用来运行我们的模型。
-[`schema_generated.h`](https://github.com/tensorflow/tensorflow/tree/5e0ed38eb746f3a86463f19bcf7138a959ddb2d4/tensorflow/lite/schema/schema_generated.h) 定义 TensorFlow Lite [`FlatBuffer`](https://google.github.io/flatbuffers/) 数据结构。
-[`version.h`](https://github.com/tensorflow/tensorflow/tree/5e0ed38eb746f3a86463f19bcf7138a959ddb2d4/tensorflow/lite/version.h) 提供 Tensorflow Lite 架构的版本信息。
| --tflitemicro_path | 生成的tensorflow lite micro路径(绝对路径) |
成功运行之后会打印`--tensorflow lite micro source file extract successful--`字样,并在对应的`tflitemicro_path`路径下生成`Source`文件夹存放生成的tensorflow Lite Micro源文件。
脚本成功运行后打印 `--tensorflow lite micro source file extract successful--` 信息,并在对应的 `tflitemicro_path` 路径下生成 `Source` 文件夹存放 Tensorflow Lite Micro 源文件。
## 2.2 将源文件加入 KEIL 工程并生成 .lib 库
## 2. 将源文件加入 KEIL 工程并生成 .lib 库
新建目标芯片的KEIL工程(本次示例以 ARM Cortex M4 为例),将Source目录下的`tensorflow`和`third_party`文件夹拷贝到KEIL工程的根目录下,并添加`tensorflow`目录下除`lite/micro/kernels`以及`lite/micro/tools`文件夹以外的所有源文件(包含.c和.cc),例如下图所示:
在添加`tensorflow/lite/micro/kernel` 目录下的源文件时需要区分 `reference` 算子和 Arm `CMSIS-NN`优化加速算子,`tensorflow/lite/micro/kernel`文件夹内容如下图中所示:
<divalign=center>
<imgsrc="image/cmsis和reference.png"width=80%/>
</div>
如果在生成lib库时想要采用CMSIS的算子的话,则:
**注:CMSIS-NN 是 Arm 在 AI 领域针对 IOT 设备开发神经网络加速库,其目的是为了让 AI 在算力和资源有限的设备上落地,更好的发挥 Arm 的生态优势。相关代码和文档已经开源 (https://www.keil.com/pack/doc/CMSIS/NN/html/index.html) 。在 Tensorflow Lite Micro 框架下基于 CMSIS-NN 加速库设计的 CMSIS-NN 算子与 reference 算子的性能对比可参考[附录](./TFlite_Micro_Component_User_Guide.md#%E9%99%84%E5%BD%95cmsis-nn-%E5%AF%B9-tensorflow-lite-micro-%E7%9A%84%E8%BF%90%E7%AE%97%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96) 。**
TensorFlow Lite Micro 组件是 Google TensorFlow 团队针对微处理器平台专门设计的端侧推理框架,该推理框架主要解决在资源, 功耗, 性能等资源受限的嵌入式系统中, 部署基于 Tensorflow Lite 框架实现深度学习模型任务。
TensorFlow Lite Micro 组件是 Google TensorFlow 团队针对微处理器平台设计的端侧推理框架,该推理框架主要解决在资源, 功耗, 性能受限的嵌入式系统中, 如何简单快速高效部署 Tensorflow Lite 深度学习模型。CMSIS 全称 Software Interface Standard for Arm Cortex-based Microcontrollers,其中 CMSIS-NN 组件为 AI 加速库,包含高效的神经网络算子来减小内存占用和最大化硬件性能。相关代码和文档已经开源并在多个平台上得到验证( https://www.keil.com/pack/doc/CMSIS/NN/html/index.html )。
## 2.目录结构
组件内部整体的目录结构如下图所示:
组件目录结构如下图所示:
```
tflite_micro
├─Source //放置了 TensorFlow Lite Micro 的全部源码
├─KEIL //针对 KEIL 环境需要的适配文件
├─Source // TensorFlow Lite Micro 的全部源码
├─KEIL //针对 KEIL 开发环境所需的适配文件
├─ARM_CortexM4_lib //针对 ARM Cortex M4 生成的 tensorflow_lite_micro.lib 库
├─ARM_CortexM7_lib //针对 ARM Cortex M7 生成的 tensorflow_lite_micro.lib 库