2020 年 10 月 16 日 — 由 CEVA 的 Ido Gus 撰写的一篇客座文章 CEVA 是无线连接和智能传感技术的领先授权商。我们的产品帮助 OEM 设计适用于各种终端市场的节能、智能和互联设备,包括移动、消费、汽车、机器人、工业和物联网。在本文中,我们将介绍我们如何使用 面向微控制器的 TensorFlow Lite (TFLM) 来部署…
由 CEVA 的 Ido Gus 撰写的一篇客座文章
CEVA 是无线连接和智能传感技术的领先授权商。我们的产品帮助 OEM 设计适用于各种终端市场的节能、智能和互联设备,包括移动、消费、汽车、机器人、工业和物联网。
在本文中,我们将介绍我们如何使用 面向微控制器的 TensorFlow Lite (TFLM) 来部署一个名为 WhisPro 的语音识别引擎和前端,它运行在基于我们 CEVA-BX DSP 核心 的裸机开发板上。WhisPro 在设备上高效地检测始终开启的 唤醒词 和语音命令。
图 1 CEVA 多麦克风 DSP 开发板
WhisPro 是一款语音识别引擎和前端,面向低功耗、资源受限的边缘设备运行。它旨在处理从处理音频样本到检测的整个数据流。
WhisPro 支持边缘设备的两种用例
WhisPro 使得集成 CEVA BX DSP 核心的任何 SoC 都能实现语音接口,降低了对希望加入语音接口革命的 OEM 和 ODM 的进入门槛。
最初,WhisPro 是使用一个名为 CEVA NN Lib 的内部神经网络库实现的。虽然该实现取得了出色的性能,但开发过程相当复杂。我们意识到,如果我们将 TFLM 运行时库移植到我们的目标硬件并进行优化,整个模型移植过程将变得透明且更加可靠(需要编写、修改和维护的代码行数将大大减少)。
我们首先要弄清楚如何将 TFLM 移植到我们自己的平台。我们发现,遵循这个 移植到新平台指南 非常有用。
按照指南,我们
我们的起点是模型的 Keras 实现。让我们来看看我们为将模型部署到裸机目标硬件所采取的步骤
使用 TF 内置转换器 将 TensorFlow 模型转换为 TensorFlow Lite
$ python3 -m tensorflow_docs.tools.nbfmt [options] notebook.ipynb
```
converter = tf.lite.TFLiteConverter.from_keras_model(keras_model)
converter.experimental_new_converter = True
tflite_model = converter.convert()
open("converted_to_tflite_model.tflite", "wb").write(tflite_model)
```
使用 量化
$ python3 -m tensorflow_docs.tools.nbfmt [options] notebook.ipynb
```
converter.optimizations = [tf.lite.Optimize.OPTIMIZE_FOR_SIZE]
converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS_INT8]
converter.representative_dataset = representative_data_gen
```
使用 xxd 将 TensorFlow Lite 模型转换为 TFLM
$ python3 -m tensorflow_docs.tools.nbfmt [options] notebook.ipynb
```
$> xxd –I model.tflite > model.cc
```
Here we found that some of the model layers (for example, GRU) were not properly supported (at the time) by TFLM. It is very reasonable to assume that, as TFLM continues to mature and Google and the TFLM community invest more in it, issues like this will become rarer.
In our case, though, we opted to re-implement the GRU layers in terms of Fully Connected layers, which was surprisingly easy.
下一步是将 TFLM 运行时库和转换后的模型集成到我们现有的嵌入式 C 前端中,该前端处理音频预处理和特征提取。
尽管我们的前端不是为 TFLM 而设计的,但它足够模块化,可以通过实现一个简单的包装函数来轻松集成,如下所示
我们描述的过程由两个组件执行
这项工作证明了 TFLM 平台对我们的重要性,以及支持 TFLM 可以为我们的客户和合作伙伴带来的巨大价值,它使他们能够在边缘设备上轻松部署神经网络模型。我们致力于通过以下方式进一步支持 CEVA-BX DSP 系列上的 TFLM
虽然移植过程遇到了一些障碍,但最终还是取得了巨大成功,大约花了 4-5 天的时间。从头开始用 C 实现一个模型,并手工制作从 Python 到 C 的模型转换脚本,可能需要 2-3 周的时间(以及大量的调试)。
要了解更多信息,欢迎观看 CEVA 的虚拟研讨会 - 无线音频会议,内容涵盖 TFLM 以及其他主题。
2020 年 10 月 16 日 — 由 CEVA 的 Ido Gus 撰写的一篇客座文章 CEVA 是无线连接和智能传感技术的领先授权商。我们的产品帮助 OEM 设计适用于各种终端市场的节能、智能和互联设备,包括移动、消费、汽车、机器人、工业和物联网。在本文中,我们将介绍我们如何使用 面向微控制器的 TensorFlow Lite (TFLM) 来部署…