0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用适用于微控制器的TensorFlow Lite

Tensorflowers 来源:TensorFlow 作者:TensorFlow 2020-11-18 17:18 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

CEVA 是无线连接和智能传感技术的领先授权商。我们的产品可帮助原始设备制造商 (OEM) 为移动设备、消费者、汽车、机器人、工业和物联网等多种终端市场,设计节能、智能和联网的设备。

CEVA
https://www.ceva-dsp.com/

在本文中,我们将说明如何使用适用于微控制器TensorFlow Lite (TensorFlow Lite for Microcontrollers, TFLM),在基于 CEVA-BX DSP 内核的裸机开发板上部署名为 WhisPro 的语音识别引擎及前端。WhisPro 可在设备端有效识别随时出现的唤醒词和语音命令。

适用于微控制器的 TensorFlow Lite
https://tensorflow.google.cn/lite/microcontrollers

图 1 CEVA 多麦克风 DSP 开发板

WhisPro 简介

WhisPro 是语音识别引擎及前端,主要在低功耗、资源受限的边缘设备上运行,包含负责音频样本处理到检测的整个数据流。

WhisPro 支持两种边缘设备用例:

始终开启的唤醒词检测引擎。在此用例中,WhisPro 用于在检测到预定义的短语时唤醒处于睡眠模式下的设备。

语音指令。在此用例中,WhisPro 用于启用基于语音的接口。用户可以使用自己的声音来控制设备。常用指令有:调高音量、调低音量、播放、停止等。

WhisPro 可在集成了 CEVA BX DSP 内核的任何 SoC 上启用语音接口,从而为希望参与语音接口变革的 OEM 和原始设计制造商 (ODM) 降低了准入门槛。

我们的动机

最初,WhisPro 是使用名为 CEVA NN Lib 的内部神经网络库实现的。尽管该实现具有出色的性能,但是开发过程相当复杂。我们意识到,我们可以通过移植 TFLM 运行库,并针对目标硬件对其进行优化的方式,让整个模型移植过程将变得透明且更加可靠(大幅减少需要编写、修改和维护的代码量)。

为 CEVA-BX DSP 系列构建 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-BX 内核构建 TFLM 运行库。
这需要对路径(并非所有必需文件都在“micro”目录下)、链接器脚本文件等编译器标记进行常规的调整。

DebugLog()
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/micro/debug_log.cc

模型移植过程

我们将从模型中的 Keras 实现开始演示。以下是我们在裸机目标硬件上部署模型所采取的步骤:

使用 TF 内置转换器将 TensorFlow 模型转换为 TensorFlow Lite 模型:

$ python3 -m tensorflow_docs.tools.nbfmt [options] notebook.ipynbconverter = 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.ipynbconverter.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

TF 内置转换器
https://tensorflow.google.cn/lite/convert

量化
https://tensorflow.google.cn/lite/performance/model_optimization#quantization

xxd
https://linux.die.net/man/1/xxd

这里,我们发现TFLM(在当时)未能很好地支持模型的某些层(如GRU)。我们期待,随着 TFLM 的继续完善,以及 Google 和 TFLM 社区的持续投入,类似问题将大幅减少。

在我们的案例中,我们选择了相对容易的方式:在完全连接层方面重新实现GRU层。

集成

接下来是将 TFLM 运行库和转换后的模型集成到我们现有的嵌入式 C 前端。该前端将处理音频预处理和特征提取操作。

即使我们的前端在编写时并未考虑 TFLM,但因其有较高的模块化程度,可通过实现单个简单的封装容器函数来轻松完成集成,具体步骤如下:

将 TFLM 运行库链接到我们的嵌入式 C 应用(WhisPro 前端)

实现 wrapper-over-setup 函数,用于将模型映射到可用的数据结构中,以分配解释器和张量

实现 wrapper-over-execute 函数,用于将 WhisPro 前端传递的数据映射到实际执行函数使用的 tflite 张量

将对原始模型执行函数的调用替换为对 TFLM 实现的调用

过程可视化

模型的移植过程将由以下两者执行:

微控制器供应商(在本例中为 CEVA),负责为自身硬件架构优化 TFLM。

微控制器用户(在本例中为 CEVA WhisPro 开发者),负责使用优化的 TFLM 运行库在目标微控制器上部署基于神经网络的模型。

未来计划

此项研究已证实 TFLM 平台对我们非常重要。此外,通过支持 TFLM,我们可以在边缘设备上轻松部署神经网络模型,从而为我们的客户和合作伙伴带来更多的价值。我们致力于通过以下方式在 CEVA-BX DSP 系列上深化对 TFLM 的支持:

积极开发 TFLM 项目,以便提高层覆盖率和平台总体的成熟度。

对于在 CEVA-BX 内核上执行的 TFLM 运算符,加大对其的优化力度,以实现完整覆盖。

最终想法

尽管移植过程中遇到了一些困难,但我们最终还是取得了巨大的成功,整个项目耗时约 4 至 5 天。除此之外,从头开始用 C 语言实现模型,以及手动编写从 Python 到 C 的模型转换脚本还需要耗费 2 至 3 周的时间,并进行大量的调试工作。

责任编辑:lq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控制器
    +关注

    关注

    48

    文章

    8249

    浏览量

    162334
  • 语音识别
    +关注

    关注

    39

    文章

    1803

    浏览量

    115553
  • 智能传感
    +关注

    关注

    1

    文章

    128

    浏览量

    17223
  • TensorFlow Lite
    +关注

    关注

    0

    文章

    26

    浏览量

    803

原文标题:案例分享 | CEVA 使用 TensorFlow Lite 在边缘设备部署语音识别引擎及前端

文章出处:【微信号:tensorflowers,微信公众号:Tensorflowers】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    PT32L007x系列微控制器

    PT32L007x系列微控制器是厦门澎湃微电子有限公司推出的基于ARM Cortex-M0内核的32位超低功耗高性能MCU。PT32L007x系列MCU以“超低功耗 + 高集成度 + 宽压供电”为
    发表于 11-19 09:21

    AT32F421C8T7微控制器现货库存

    )。USART:2 个接口,支持 LIN、IrDA 和 ISO7816 协议,适用于串行通信。红外发射:1 个,支持红外遥控应用。DMA 控制器1 个 5 通道 DMA 控制器,支持
    发表于 11-05 09:40

    SkyOne® LiTE 中/高频带前端模块,带 3G/4G 功率放大器,适用于 LTE 应用 skyworksinc

    电子发烧友网为你提供()SkyOne® LiTE 中/高频带前端模块,带 3G/4G 功率放大器,适用于 LTE 应用相关产品参数、数据手册,更有SkyOne® LiTE 中/高频带前端模块,带
    发表于 10-23 18:32
    SkyOne® <b class='flag-5'>LiTE</b> 中/高频带前端模块,带 3G/4G 功率放大器,<b class='flag-5'>适用于</b> LTE 应用 skyworksinc

    【上海晶珩睿莓1开发板试用体验】TensorFlow-Lite物体归类(classify)

    目前尚未得知睿莓1开发板上面有NPU或者DPU之类的额外处理,因此使用树莓派系列使用最广泛的TensorFlow-Lite库进行物体归类,使用CPU运行代码,因此占用的是CPU的算力。在
    发表于 09-12 22:43

    无法将Tensorflow Lite模型转换为OpenVINO™格式怎么处理?

    Tensorflow Lite 模型转换为 OpenVINO™ 格式。 遇到的错误: FrontEnd API failed with OpConversionFailure:No translator found for TFLite_Detection_PostP
    发表于 06-25 08:27

    贸泽电子开售NXP RW61x无线微控制器

    贸泽电子开售NXP Semiconductors的RW61x无线微控制器。其中RW612是一款高集成度、高安全性的无线MCU,适用于智能家居、游戏、工业自动化和智能配件等应用。
    的头像 发表于 06-23 11:48 1041次阅读

    SkyOne® LiTE 低频段前端模块,带 2G/3G/4G 功率放大器,适用于 LTE 应用 skyworksinc

    电子发烧友网为你提供()SkyOne® LiTE 低频段前端模块,带 2G/3G/4G 功率放大器,适用于 LTE 应用相关产品参数、数据手册,更有SkyOne® LiTE 低频段前端模块,带 2G
    发表于 06-18 18:31
    SkyOne® <b class='flag-5'>LiTE</b> 低频段前端模块,带 2G/3G/4G 功率放大器,<b class='flag-5'>适用于</b> LTE 应用 skyworksinc

    SkyOne® LiTE 中频和高频带前端模块,适用于 3G、4G 和 5G 应用 skyworksinc

    电子发烧友网为你提供()SkyOne® LiTE 中频和高频带前端模块,适用于 3G、4G 和 5G 应用相关产品参数、数据手册,更有SkyOne® LiTE 中频和高频带前端模块,适用于
    发表于 05-19 18:31
    SkyOne® <b class='flag-5'>LiTE</b> 中频和高频带前端模块,<b class='flag-5'>适用于</b> 3G、4G 和 5G 应用 skyworksinc

    RAA270000KFT适用于 RH850 汽车微控制器的电源管理IC数据手册

    RAA270000KFT 是一款适用于 RH850 汽车微控制器系列的电源管理 IC (PMIC)。RAA270000KFT 包含两个集成的电流模式 DC-DC 转换、四个低压差线性稳压
    的头像 发表于 04-09 16:10 735次阅读
    RAA270000KFT<b class='flag-5'>适用于</b> RH850 汽车<b class='flag-5'>微控制器</b>的电源管理IC数据手册

    带有FPU的32位微控制器RX23T系列数据手册

    RX23T 系列是适用于单逆变器控制的 32 位微控制器,具有内置浮点处理单元(FPU),让用户轻松编程复杂的逆变器控制算法。可大大减少软件开发和维护所需的工时。 此外,由于采用了 R
    的头像 发表于 03-24 17:21 846次阅读
    带有FPU的32位<b class='flag-5'>微控制器</b>RX23T系列数据手册

    适用于单电机控制应用的RX13T系列32位微控制器数据手册

    面积和BOM元器件。 *附件:适用于单电机控制应用的RX13T系列32位微控制器数据手册.pdf 特性 搭载32MHz工
    的头像 发表于 03-19 18:02 1049次阅读
    <b class='flag-5'>适用于</b>单电机<b class='flag-5'>控制</b>应用的RX13T系列32位<b class='flag-5'>微控制器</b>数据手册

    DLPC3470 适用于DLP2010LC数字微镜器件的DLP® 控制器技术手册

    DLPC3470 显示和光控制器为 DLP2010LC 或 DLP2010NIR 数字微镜器件 (DMD) 的可靠运行提供支持,适用于视频显示和光控制应用。DLPC3470 控制器
    的头像 发表于 03-04 15:40 1035次阅读
    DLPC3470 <b class='flag-5'>适用于</b>DLP2010LC数字微镜器件的DLP® <b class='flag-5'>控制器</b>技术手册

    DLPC3479 适用于DLP4710LC的DLP显示和光控制器技术手册

    DLPC3479 显示和光控制器为 DLP4710LC (.47 1080p) 芯片组的一部分,为 DLP4710LC 数字微镜器件 (DMD)的可靠运行提供支持,适用于视频显示和光控制应用。DLPC3479
    的头像 发表于 03-04 14:25 1164次阅读
    DLPC3479 <b class='flag-5'>适用于</b>DLP4710LC的DLP显示和光<b class='flag-5'>控制器</b>技术手册

    DLPC3478 适用于DLP3010LC数字微镜器件的显示和光控制器数据手册

    DLPC3478 显示和光控制器为 DLP3010LC 数字微镜器件 (DMD) 的可靠运行提供支持,适用于视频显示和光控制应用。DLPC3478 控制器提供了连接用户电子产品和 DM
    的头像 发表于 03-04 12:26 911次阅读
    DLPC3478 <b class='flag-5'>适用于</b>DLP3010LC数字微镜器件的显示和光<b class='flag-5'>控制器</b>数据手册

    STM32H753IIT6 一款32位微控制器MCU/MSP430F5325IPNR一款16位MCU

    ‌MSP430F5325IPNR‌是一款16位低功耗微控制器,属于MSP430系列。该微控制器具有以下主要特点和功能: 1、低功耗设计‌:MSP430F5325IPNR采用低功耗设计,适合对能耗敏感
    发表于 02-21 14:59