亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Equipment >> 工业机器人

如何使用 i.MX RT1060 Crossover MCU 通过 TensorFlow Lite 实现数字识别

本文以MNIST eIQ为例介绍数字检测和识别,它由几个部分组成——数字识别由TensorFlow Lite模型执行,并使用 GUI 来提高 i.MX RT1060 设备的可用性。

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 模型实现可作为官方 TensorFlow 模型之一在 GitHub 上获得,它是用 Python 编写的。该脚本使用了 Keras 库和 tf.data、tf.estimator.Estimator 和 tf.layers API,构建了一个可以在测试样本上实现高精度的卷积神经网络:

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

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

图 3。 对应于模型可视化的模型定义。

什么是 TensorFlow Lite 以及它在本示例中的用途?

TensorFlow 是著名的深度学习框架,被大公司广泛用于生产。它是由 Google 开发和维护的开源、跨平台深度学习库。可以使用低级 Python API,这对有经验的开发人员和高级库(如本例中使用的库)很有用。此外,TensorFlow 得到了大型社区和来自 Google 的优秀在线文档、学习资源、指南和示例的支持。

为了让移动设备和嵌入式解决方案等计算受限的机器能够运行 TensorFlow 应用程序,谷歌开发了 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_ops TFLITE_BUILTINS

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

xxd -iconverted_model.tflite>converted_model.h

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

Embedded Wizard Studio 的快速介绍

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

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

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

但是,有几个转换步骤必须将 GUI 项目与现有的 eIQ 应用程序项目合并,因为生成的 GUI 项目是用 C 语言编写的,而 qIQ 示例是用 C/C++ 编写的。因此,一些头文件的内容必须用:

#ifdef __cplusplus

extern "C" {

#endif

/* C 代码 */

#ifdef __cplusplus

<代码>}

#endif

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

完成的应用程序及其特点

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

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

TensorFlow Lite 模型准确度

如上所述,该模型在对美式手写数字进行分类时可以在训练和测试数据上获得较高的准确率。然而,在本应用中使用时并非如此,主要是因为用手指在 LCD 上书写的数字与用笔在纸上书写的数字永远不同。这凸显了在真实生产数据上训练生产模型的重要性。

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

实施细节

Embedded Wizard 使用插槽作为触发器来响应 GUI 交互,例如,当用户在输入区域上拖动手指时。在这种情况下,插槽会不断地在手指下方绘制一条像素宽的线。那条线的颜色由主颜色常量定义。

清除按钮的槽将两个字段中每个像素的颜色设置为背景颜色,运行推理按钮保存对输入区域、底层位图和区域宽高的引用,然后将它们传递给原生处理它们的 C 程序。

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

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

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

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

TensorFlow Lite:可行的解决方案

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

i.MX RT 跨界 MCU 系列可以实现到各种嵌入式应用中,如本文提供的示例。 NXP 拥有关于 i.MX RT 跨界 MCU 系列的大量信息,可以帮助弥合性能和可用性之间的差距。

有关 i.MX RT Crossover MCU 的更多信息,请访问 i.MX RT 产品页面。

行业文章是一种内容形式,允许行业合作伙伴以编辑内容不太适合的方式与 All About Circuits 读者分享有用的新闻、消息和技术。所有行业文章都遵循严格的编辑指南,旨在为读者提供有用的新闻、技术专长或故事。行业文章中表达的观点和意见是合作伙伴的观点和意见,不一定是All About Circuits或其作者的观点和意见。


工业机器人

  1. 如何使用自主机器人减少浪费
  2. 使用 PiCamera 进行 AI 数字识别
  3. 使用恩智浦的 i.MX RT500 Crossover MCU 优化电源管理
  4. 了解使用恩智浦 i.MX RT500 跨界 MCU 的 DSP 启用
  5. 如何使用 TensorFlow 构建变分自动编码器
  6. 在艺术品中使用环氧树脂
  7. Java中的接口是什么:如何通过示例实现接口
  8. 如何使用激光距离传感器控制机器人传输系统
  9. 照料数控机床?以下是如何使用 Cobot
  10. 如何开始使用安川机器人编程
  11. 如何开始使用 RoboDK for Raspberry Pi
  12. 如何使用信息模型从 OPC UA 客户端调用功能块