跳至内容
深圳市捷比信实业有限公司 · 产品选型与采购咨询联系业务人员
点火电阻捷比信 · 专业器件主题站

如何将TensorFlow Lite用于微控制器

CEVA是无线连接和智能传感技术的领先许可方。我们的产品可以帮助原始设备制造商(OEM)为各种最终市场设计节能,智能和联网的设备,例如移动设备,消费者,汽车,机器人,工业和物联网。 CEVAhttps://www.ceva-dsp.com/在本文中,我们将说明如何使用TensorFlowLite(用于微控制器的TensorFlowLite,TFLM)将微控制器部署在基于CEVA-BXDSP核心语音识别引擎的裸机开发板上的WhisPro。和前端。 WhisPro可以有效地识别随时出现在设备侧的唤醒单词和语音命令。用于微控制器的TensorFlowLite https://tensorflow.google.cn/lite/microcontrollers图1 WhisPro简介,这是CEVA多麦克风DSP开发板,包含负责音频样本处理到检测的整个数据流。 WhisPro支持两种边缘设备用例:永远在线唤醒字检测引擎。在这种使用情况下,当检测到预定义的短语时,使用WhisPro在睡眠模式下唤醒设备。语音命令。在这种使用情况下,WhisPro用于启用基于语音的界面。用户可以使用自己的声音来控制设备。常用命令包括:​​调高音量,调低音量,播放,停止等。WhisPro可以在集成CEVABXDSP内核的任何SoC上启用语音接口,从而降低OEM和原始设计制造商(ODM)的进入门槛。想参加语音接口革命的人。我们的动力最初,WhisPro是使用称为CEVANNLib的内部神经网络库实现的。尽管此实现具有出色的性能,但开发过程非常复杂。我们意识到,我们可以移植TFLM运行时库并针对目标硬件对其进行优化,以使整个模型移植过程透明且更可靠(显着减少了需要编写,修改和维护的代码量)。为CEVA-BXDSP系列构建TFLM首先,我们需要弄清楚如何将TFLM移植到我们的平台。我们发现,遵循“指南:移植到新平台”会非常有用。指南:移植到新平台https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/micro/docs/new_platform_support.md在该指南的指导下,我们执行了以下操作:验证平台支持DebugLog()实现。在基于CEVA的Eclipse IDE中创建TFLM运行时库项目:在CEVA的IDE中创建一个新的CEVA-BX项目,并将所有必需的源文件添加到该项目中,以为CEVA构建TFLM运行时库。 -BX核心。这需要对路径进行常规调整(并非所有必需的文件都在“ micro”目录中),链接脚本文件和其他编译器标签。 DebugLog()https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/micro/debug_log.cc将通过在模型中执行Keras来演示模型移植的过程。以下是我们在裸机目标硬件上部署模型的步骤:使用TF内置转换器将TensorFlow模型转换为TensorFlowLite模型:$ python3-mtensorflow_docs.tools.nbfmt [options] notebook.ipynbconverter = tf.lite .TFLiteConverter.from_keras_model(keras_model)converter.experimental_new_converter = Truetflite_model = converter.convert()open(“ converted_to_tflite_model.tflite”,“ wb”)。write(tflite_model)$ s tensor_flow.docs执行以下量化操作。选项]注意优化= [tf.lite.Optimize.OPTIMIZE_FOR_SIZE] converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS_INT8] converter.representative_dataset = representative_data_gen使用xxd将TensorFlowLite模型选项转换为TFtool模型3- notebook.ipynb $> xxd–Imodel.tflite> model.ccTF内置转换器https://tensorflow.google.cn/lite/convertQuantization https://tensorflow.google.cn/lite/performance/model_optimization#qua ntizationxxdhttps://linux.die.net/man/1/xxd在这里,我们发现TFLM(当时)不能很好地支持模型的某些层(例如GRU)。我们希望,随着TFLM的不断改进以及Google和TFLM社区的不断投资,类似的问题将会大大减少。在我们的案例中,我们选择了一种相对简单的方法:根据完全连接的层重新实现GRU层。集成下一步是将TFLM运行时库和转换后的模型集成到我们现有的嵌入式C前端中。前端将处理音频预处理和特征提取操作。尽管我们的前端在编写时没有考虑TFLM,但由于其高度的模块化,可以通过实现一个简单的包装函数轻松完成集成。具体步骤如下