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

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

3天内不再提示

如何使用i.MX RT1060跨接MCU通过TensorFlow Lite实施数字识别

嵌入式星球 2020-09-29 11:45 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

i.MX RT1060交叉MCU同样适用于经济高效的工业应用以及需要显示功能的高性能和数据密集型消费类产品。本文通过解释如何实现一种嵌入式机器学习应用程序来演示该基于Arm®Cortex®-M7的MCU的功能,该应用程序可以检测和分类用户的手写输入。

为此,本文重点介绍流行的MNIST eIQ示例,该示例由几个部分组成-数字识别由TensorFlow Lite模型执行,并且GUI用于提高i.MX RT1060设备的可用性。

看一下MNIST数据集和模型


本文使用的数据集包括60,000个训练和10,000个手写数字居中灰度图像测试示例。每个样本的分辨率为28x28像素:

图1.MNIST数据集示例

样本是从美国的高中生和人口普查局员工那里收集的。因此,数据集主要包含在北美书写的数字示例。例如,对于欧洲风格的数字,必须使用其他数据集。与该数据集一起使用时,卷积神经网络通常会提供最佳结果,甚至简单的网络也可以实现高精度因此,TensorFlow Lite是适合此任务的选项。

本文选择的MNIST模型实现可在GitHub上作为正式的TensorFlow模型之一获得,并且使用Python编写。该脚本使用Keras库以及tf.data,tf.estimator.Estimator和tf.layers API,并构建了一个卷积神经网络,可以在测试样本上实现高精度:

图2.所用模型的可视化。

相应的模型定义如下图3所示。

图3.与模型可视化相对应的模型定义。

什么是TensorFlow Lite?在本示例中如何使用?


TensorFlow是一个著名的深度学习框架,已被大型公司广泛用于生产中。这是由Google开发和维护的开源,跨平台深度学习库。提供了一个低级Python API,它对经验丰富的开发人员非常有用,并且提供了高级库(例如本例中使用的库)。此外,TensorFlow得到了广大社区的支持,并获得了Google的出色在线文档,学习资源,指南和示例。

为了使受计算限制的机器(例如移动设备和嵌入式解决方案)能够运行TensorFlow应用程序,Google开发了TensorFlow Lite框架,该框架不支持TensorFlow框架的全部操作。它允许此类设备在已转换为TensorFlow Lite的预训练TensorFlow模型上进行推理。作为回报,这些经过转换的模型无法进行进一步的训练,但可以通过量化和修剪等技术进行优化。

将模型转换为TensorFlow Lite


上面讨论的经过训练的TensorFlow模型必须先转换为TensorFlow Lite,然后才能在i.MX RT1060 MCU上使用。为此,使用tflite_convert对其进行了转换,并且出于兼容性原因,使用TensorFlow的1.13.2版来训练和转换模型:

tflite_convert
--saved_model_dir=
--output_file=converted_model.tflite
--input_shape=1,28,28
--input_array=Placeholder
--output_array=Softmax
--inference_type=FLOAT
--input_data_type=FLOAT
--post_training_quantize
--target_opsTFLITE_BUILTINS

最后,使用xdd实用程序将TensorFlow Lite模型转换为二进制数组,以供应用程序加载:

xxd-iconverted_model.tflite>converted_model.h

xdd是一个十六进制转储实用程序,可用于将文件的二进制形式转换为相应的十六进制转储表示形式,反之亦然。在这种情况下,TensorFlow Lite二进制文件将转换为可添加到eIQ项目的C / C ++头文件。转换过程和tflite_convert实用程序在eIQ用户指南中进行了详细说明。该实用程序也在Google的官方文档中进行了描述。

嵌入式Wizard Studio快速入门

#ifdef__cplusplus
extern"C"{
#endif
/*Ccode*/
#ifdef__cplusplus
}
#endif


为了利用MIMXRT1060-EVK的图形功能,该项目中包含一个GUI。为此,使用了嵌入式向导Studio,这是一个IDE,用于为将在嵌入式设备上运行的应用程序开发GUI。尽管可以使用IDE的免费评估版,但该版本限制了图形用户界面的最大复杂性,并且还在GUI上添加了水印。

Embedded Wizard Studio的优点之一是能够基于XNP的SDK生成MCUXpresso和IAR项目,这意味着在IDE中创建用户界面后,开发人员可以立即在其设备上对其进行测试。

IDE提供了放置在画布上的对象和工具,例如按钮,触敏区域,形状等。然后将其属性设置为适合开发人员的需求和期望。所有这些工作都以直观和用户友好的方式进行,并且大大加快了GUI开发过程。

但是,由于生成的GUI项目在C中,而qIQ示例在C / C ++中,因此,几个转换步骤必须将GUI项目与现有的eIQ应用程序项目合并。因此,某些头文件的内容必须包含以下内容:

此外,大多数源文件和头文件已移至SDK的中间件文件夹中的新文件夹,并且添加了新的包含路径以反映这些更改。最后,比较并正确合并了一些特定于设备的配置文件。

完成的应用程序及其功能

该应用程序的GUI显示在触敏LCD上。它包含一个用于输入数字的输入区域和一个显示分类结果的区域。运行推断按钮执行推断,清除按钮清除输入和输出字段。应用程序将预测的结果和置信度输出到标准输出。

图4.示例应用程序的GUI包含一个输入字段,一个输出字段和两个按钮。结果和置信度也会打印到标准输出中。

TensorFlow Lite模型精度

如上所述,该模型在对美国风格的手写数字进行分类时可以在训练和测试数据上实现高精度。但是,在本应用程序中不是这种情况,主要是因为用手指在LCD上书写的数字与用笔在纸上书写的数字永远不会相同。这突出了在实际生产数据上训练生产模型的重要性。

为了获得更好的结果,必须收集一组新的数据。此外,方法必须相同。在这种情况下,必须使用触摸屏输入来采集样品以绘制数字。存在进一步的技术来增加预测的准确性。恩智浦社区网站包含使用迁移学习技术的演练。

实施细节

嵌入式向导使用插槽作为触发器来对GUI交互做出反应,例如,当用户在输入区域上拖动手指时。在这种情况下,插槽会在手指下方连续绘制一个像素宽的线。该行的颜色由主颜色常数定义。

清除按钮的插槽将两个字段中每个像素的颜色设置为背景色,运行推断按钮将保存对输入区域,基础位图以及该区域的宽度和高度的引用,然后将其传递给本机处理它们的C程序。

由于来自机器学习模型的位图只有28x28像素大,并且输入区域被创建为112x112正方形,以使应用程序使用起来更加舒适,因此在缩小图像时需要进行额外的预处理。否则,该过程会使图像失真太多。

首先,创建一个具有输入区域尺寸的8位整数数组,并用零填充。然后,对图像和数组进行迭代,并将图像中每个绘制的像素存储为数组中的0xFF。处理输入时,主要颜色的像素被认为是白色,其他所有像素都被认为是黑色。此外,每个像素都扩大为3x3正方形以加粗线条,这将使图像缩小更为安全。在将图像缩放到所需的28x28分辨率之前,将图形裁剪并居中以类似于MNIST图像:

图5.包含预处理输入数据的数组的可视化。

当应用程序启动时,将分配,加载和准备机器学习模型。对于每个推理请求,模型的输入张量都将带有预处理输入,并传递给模型。输入必须逐像素复制到张量中,并且在此过程中必须将整数值转换为浮点值。NXP应用笔记包含了代码的详细内存占用。

TensorFlow Lite:可行的解决方案


使用机器学习的手写数字识别可能给嵌入式系统带来问题,TensorFlow Lite提供了可行的解决方案。使用此解决方案,可以实现更复杂的用例,例如数字锁上的引脚输入字段。如本文所述,在实际生产数据上训练生产模型至关重要。本文中使用的培训数据由用笔写在纸上的数字组成。反过来,当用于检测触摸屏上绘制的数字时,这会降低模型的整体准确性。此外,必须考虑到地区差异。

i.MX RT跨接MCU系列可以实现到各种嵌入式应用程序中,例如本文提供的示例。恩智浦(NXP)拥有有关i.MX RT跨接MCU系列的大量信息,可帮助弥合性能与可用性之间的鸿沟。


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

    关注

    13

    文章

    331

    浏览量

    61853
  • TensorFlow Lite
    +关注

    关注

    0

    文章

    26

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    i.MX RT1180实现EtherCAT+伺服控制的终极实践

    今天继续为大家介绍i.MX RT1180实现EtherCAT+伺服控制的终极实践:双电机控制与Ethercat资源使用。
    的头像 发表于 11-26 08:19 2348次阅读
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>1180实现EtherCAT+伺服控制的终极实践

    使用恩智浦i.MX RT700跨界MCU打造智能手表

    智能手表已经成为我们生活中不可或缺的可穿戴设备。随着技术和市场的演进,如今的智能手表功能越来越丰富,而用户对其续航能力的期望也越来越高。应对这一挑战,恩智浦专为可穿戴、消费级医疗、智能家居和HMI设备而设计的i.MX RT700跨界MC
    的头像 发表于 10-27 09:33 799次阅读

    恩智浦i.MX RT1180跨界MCU助力下一代伺服控制系统

    今天我们将聚焦一项正在重塑工业自动化边界的技术组合 —— 基于NXP的i.MX RT1180微控制器,实现EtherCAT通信与高性能伺服控制的融合方案。
    的头像 发表于 09-28 14:16 4261次阅读
    恩智浦<b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>1180跨界<b class='flag-5'>MCU</b>助力下一代伺服控制系统

    恩智浦i.MX RT1180跨界处理器如何选型

    i.MX RT1180 跨界处理器包含众多的型号,以满足客户对不同性能与价格的需求,今天就先给大家说说如何选型。
    的头像 发表于 09-28 14:01 2017次阅读
    恩智浦<b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>1180跨界处理器如何选型

    恩智浦MCU方案 单颗i.MX RT1180实现EtherCAT+伺服控制

    介绍基于单颗i.MX RT1180芯片的EtherCAT+伺服电机控制方案-伺服控制板硬件电路资源介绍,即为下图中的Servo Motor Driver Board。
    的头像 发表于 09-11 14:27 5.1w次阅读
    恩智浦<b class='flag-5'>MCU</b>方案 单颗<b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>1180实现EtherCAT+伺服控制

    基于恩智浦i.MX RT芯片内部RAM运行LVGL工程

    随着越来越多用户选择i.MX RT系列芯片制作产品,产品的需求以及芯片的用法也越来越多。本文将介绍在i.MX RT平台中,如何创建LVGL项目并将其运行在内部SRAM而非SDRAM上。
    的头像 发表于 07-01 09:33 2190次阅读
    基于恩智浦<b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>芯片内部RAM运行LVGL工程

    如何实现安卓与恩智浦i.MX RT1170的无线投屏与控制

    Scrcpy是一款免费开源的软件,支持将安卓端屏幕投影到其他设备,并支持被投屏设备对安卓的反向控制。基于ADB工具,安卓端无需安装任何软件,延迟低,稳定性好。现在,安卓也可投屏到恩智浦i.MX RT1170上。
    的头像 发表于 06-26 09:53 1936次阅读
    如何实现安卓与恩智浦<b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>1170的无线投屏与控制

    i.MX RT系列中FlexSPI DQS信号引脚配置GPIO方法

    i.MX RT060项目(采用QSPI Flash)的实际应用中,有客户反馈,其在设计阶段并未预留DQS信号引脚,而是将该引脚作为GPIO用于控制关键外设的开关,这导致程序无法正常运行。在此背景下
    的头像 发表于 06-16 11:30 1270次阅读
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>系列中FlexSPI DQS信号引脚配置GPIO方法

    NXP i.MX RT1060移植TinyUSB:快速扩展大量USB Class示例

    前言   为啥是TinyUSB?给强大的RT配个轻巧的USB栈! USB这个让我们方便快捷的接口,几乎无处不在。在嵌入式世界里,尤其是用上了像NXP i.MX RT这样性能强劲的跨界MCU
    的头像 发表于 05-15 09:25 2192次阅读
    NXP <b class='flag-5'>i.MX</b> <b class='flag-5'>RT1060</b>移植TinyUSB:快速扩展大量USB Class示例

    是否可以为RT1060添加HDMI输出?

    是否可以为 RT1060 添加 HDMI 输出?我想支持标准 720p 分辨率并使用图形加速。
    发表于 04-10 08:04

    如何禁用i.MX RT1170 MCU中的M4内核?

    如何禁用 i.MX RT1170 MCU 中的 M4 内核? 您能否提供具体的可行方法? 或者是否可以将内核的工作时钟频率降低到 0 ?
    发表于 04-09 07:28

    i.MX RT 1176上正常运行代码时与使用IAR调试代码时存在一些奇怪的差异,为什么?

    我在 i.MX RT 1176 上正常运行代码时的行为与使用 IAR 调试代码时的行为之间存在一些奇怪的差异,并注意到这是由于堆栈指针的初始化方式造成的。 我的重置向量表将其指向 DTC 的顶部
    发表于 03-17 07:26

    恩智浦推出FRDM i.MX 93开发板

    备受嵌入式开发者青睐的恩智浦FRDM开发平台,迎来了一位新成员——FRDM i.MX 93开发板,这也是第一块配备i.MX MPU的FRDM开发板,意味着强大的FRDM生态合作体系,已经扩展到i.MX应用处理器。
    的头像 发表于 02-21 14:22 2911次阅读

    i.MX RT处理器上使用PXP实现缩放和旋转组合操作

    本文主要探讨如何使用PXP实现缩放和旋转组合操作,PXP是NXP推出的一个2D图形加速器,主要完成对图像的数据格式转换、固定角度旋转(90°,180°,270°),任意比例缩放、混色,移位以及翻转等功能。运行平台为i.MX RT1170/1160/
    的头像 发表于 02-20 10:53 1571次阅读
    在<b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>处理器上使用PXP实现缩放和旋转组合操作

    恩智浦i.MX RT700系列MCU的优势

    作为边缘智能时代的嵌入式工程师,你对一款理想的MCU有何期待?高性能、高集成、低功耗、更安全,以及出众的AI推理能力……恩智浦半导体新近发布的i.MX RT700跨界MCU系列,就是你
    的头像 发表于 12-09 09:16 2935次阅读