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

    文章

    329

    浏览量

    60499
  • TensorFlow Lite
    +关注

    关注

    0

    文章

    26

    浏览量

    602
收藏 人收藏

    评论

    相关推荐

    恩智浦发布i.MX 94系列应用处理器

    恩智浦半导体发布i.MX 9系列应用处理器的新成员i.MX 94系列。该系列旨在用于工业控制、可编程逻辑控制器(PLC)、远程信息处理、工业和汽车网关以及楼宇和能量控制。
    的头像 发表于 11-26 17:48 339次阅读

    NXP专为边缘AI打造的i.MX RT700跨界MCU到底强在哪?

    500和i.MX RT600跨界MCU的成功基础上,恩智浦宣布推出i.MX RT700,超低功耗、集成多核和eIQ Neutron神经处理单
    发表于 11-08 09:40 509次阅读
    NXP专为边缘AI打造的<b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>700跨界<b class='flag-5'>MCU</b>到底强在哪?

    如何在i.MX RT微控制器上初始化LWIP协议栈

    i.MX RT微控制器上初始化LWIP协议栈是一个复杂但有趣的过程,它涉及多个步骤和关键组件的配置.
    的头像 发表于 10-12 11:48 299次阅读
    如何在<b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>微控制器上初始化LWIP协议栈

    恩智浦推出全新i.MX RT700跨界MCU系列

    高度集成的全新i.MX RT700跨界MCU旨在显著节省功耗,配备eIQ Neutron神经处理单(NPU),可在边缘端提供高达172倍的AI加速。
    的头像 发表于 10-12 11:41 730次阅读

    i.MX Linux开发实战指南—基于野火i.MX系列开发板

    电子发烧友网站提供《i.MX Linux开发实战指南—基于野火i.MX系列开发板.pdf》资料免费下载
    发表于 10-10 17:23 9次下载

    使用TPS65023的NXP i.MX 7电源设计

    电子发烧友网站提供《使用TPS65023的NXP i.MX 7电源设计.pdf》资料免费下载
    发表于 09-30 10:38 0次下载
    使用TPS65023的NXP <b class='flag-5'>i.MX</b> 7电源设计

    恩智浦半导体发布i.MX RT700系列MCU,赋能智能AI边缘设备

    恩智浦半导体近期震撼发布了其最新力作——i.MX RT700跨界微控制器(MCU)系列,专为推动智能AI在边缘端设备的应用而设计。这款创新产品精准定位可穿戴设备、消费级医疗设备、智能家居系统以及人机交互(HMI)平台等前沿领域,
    的头像 发表于 09-26 16:06 585次阅读

    使用TPS6521815 PMIC为NXP i.MX 6Solo、6DualLite供电

    电子发烧友网站提供《使用TPS6521815 PMIC为NXP i.MX 6Solo、6DualLite供电.pdf》资料免费下载
    发表于 09-13 09:39 0次下载
    使用TPS6521815 PMIC为NXP <b class='flag-5'>i.MX</b> 6Solo、6DualLite供电

    恩智浦i.MX RT1170 uSDHC eMMC启动时间

    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MX RT1170 uSDHC eMMC启动时间。
    的头像 发表于 08-08 15:32 528次阅读
    恩智浦<b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>1170 uSDHC eMMC启动时间

    基于i.MX RT117H IOT EdgeReady智能HMI解决方案

    的复杂性。SLN-TLHMI-IOT基于i.MX RT117H交叉微控制器,是一款1GHz Arm® Cortex®-M7 + 440MHz Arm Cortex-M4MCU,具有智能HMI软件的运行时
    的头像 发表于 05-28 09:17 7211次阅读
    基于<b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>117H IOT EdgeReady智能HMI解决方案

    基于 NXP i.MX RT1060 + IW416 的 Matter Thermostat 智慧温控器应用方案之 Apple 生态系统

    NXP i.MX RT1060 是一款搭载 Arm Cortex-M7 的跨界微控制器,具有强大的处理能力和低功耗特性,而 IW416 则是一款高度集成的 Wi-Fi 4 和 Bluetooth 5.2 系统单芯片(SoC),提供了低成本的连接解决方案。
    的头像 发表于 03-28 15:54 630次阅读
    基于 NXP <b class='flag-5'>i.MX</b> <b class='flag-5'>RT1060</b> + IW416 的 Matter Thermostat 智慧温控器应用方案之 Apple 生态系统

    使用基于muRata CYW4343W的LBEE5KL1DX-883模块,会持续向蓝牙UART发送 0x01 0x03 0x0c 0x00没有收到任何响应的原因?

    大家好,我正在使用基于 muRata CYW4343W的LBEE5KL1DX-883模块。示意图如下,有什么问题吗? 我引用了 I.MX RT1060 SDK 中的示例,我已经成功移植了
    发表于 03-01 09:18

    使用i.MX RT500实现SPI/DMA AN14170应用指南

    电子发烧友网站提供《使用i.MX RT500实现SPI/DMA AN14170应用指南.pdf》资料免费下载
    发表于 02-01 10:05 0次下载
    使用<b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>500实现SPI/DMA AN14170应用指南

    i.MX RT SDK的Wi-Fi TX功率表和信道扫描管理应用指南

    电子发烧友网站提供《i.MX RT SDK的Wi-Fi TX功率表和信道扫描管理应用指南.pdf》资料免费下载
    发表于 01-14 09:27 0次下载
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b> SDK的Wi-Fi TX功率表和信道扫描管理应用指南

    AN14140:将GPIO状态保持在低功耗–i.MX 8ULP

    电子发烧友网站提供《AN14140:将GPIO状态保持在低功耗–i.MX 8ULP.pdf》资料免费下载
    发表于 12-18 09:16 0次下载
    AN14140:将GPIO状态保持在低功耗–<b class='flag-5'>i.MX</b> 8ULP