2022 年 11 月 29 日 — 来自 Sandeep Mistry 的客座文章,Arm简介 表情符号使我们能够在数字世界中表达情感,它们在配备触摸屏虚拟键盘的智能手机和平板电脑设备上相对容易输入,但它们在具有物理键盘的传统计算设备上并不那么容易输入。 要在这些设备上输入表情符号,用户通常使用键盘快捷键或鼠标调出屏幕表情符号选择器,然后使用鼠标从一系列类别中选择所需的表情符号。
来自 Sandeep Mistry 的客座文章,Arm
表情符号使我们能够在数字世界中表达情感,它们在配备触摸屏虚拟键盘的智能手机和平板电脑设备上相对容易输入,但它们在具有物理键盘的传统计算设备上并不那么容易输入。 要在这些设备上输入表情符号,用户通常使用键盘快捷键或鼠标调出屏幕表情符号选择器,然后使用鼠标从一系列类别中选择所需的表情符号。
本博客将重点介绍一个深入的开源指南,该指南在基于 Arm Cortex-M 的设备上使用 tinyML 创建一个专用输入设备。 该设备将从摄像头获取实时输入,并应用机器学习 (ML) 图像分类模型来检测摄像头图像中是否包含一组已知的 手势(✋、👎、👍、👊)。 当以高确定性检测到手势时,该设备将使用 USB 人机界面设备 (HID) 协议 在 PC 上“输入”表情符号。
带有 Arm CMSIS-NN 的 用于微控制器的 TensorFlow Lite 运行时被用作专用输入设备上的设备上 ML 推理框架。 设备上推理将使我们能够减少系统的延迟,因为图像数据将在源头进行处理(而不是传输到云服务)。 用户的隐私也将得到保护,因为在推理时不会有图像数据离开设备。
注意: 完整的深入互动教程可在 Google Colab 上找到,该指南的所有技术资产都可以在 GitHub 上找到。 |
微控制器单元 (MCU) 是嵌入在您每天使用的设备(包括您的键盘!)中的自包含计算系统。 与所有计算系统一样,它们具有输入和输出。
USB 键盘的框图 |
基于计算机视觉的表情符号“键盘”的框图 |
OpenMV 是一个开源的 (Micro) Python 驱动的机器视觉平台。 OpenMV 产品线 包括几个基于 Arm Cortex-M 的开发板。 每个板都配备了板载摄像头和 MCU。 对于此项目,OpenMV Cam H7 或 OpenMV Cam H7 R2 板将满足我们的需求。
OpenMV Cam H7 摄像头(左)和 microSD 卡(右) |
该数据集包含约 23,000 个图像文件,其中包含人们在 30 秒内执行各种手势的图像。
将需要对数据集中的图像进行如下重新标记
|
由于 Kaggle 数据集中的向右滑动和向左滑动手势与这些类别中的任何一个都不对应,因此需要丢弃这些类别中的任何图像以用于我们的模型。
Kaggle 数据集中的图像是在 30 秒内拍摄的,它们可能在系列的开头或结尾包含其他手势。 例如,数据集中的某些人从拳头位置开始,然后最终转为标记的手势举起、向上和向下。 或者,数据集中的某些人从没有手势在帧中开始。
我们已经提前将图像手动重新标记到这些类别中,它可以在 CSV 格式中找到,位于 GitHub 上的数据文件夹 中,并包含约 14,000 个图像的标签。
您可以在 此 Colab 笔记本 中找到有关此处使用的训练管道的更多详细信息。
可以使用 TensorFlow 数据集 使用 tf.keras.utils.image_dataset_from_directory(...) API 加载数据集中的图像。 此 API 支持调整图像的颜色模式(转换为灰度)和大小(96x96 像素),以满足模型所需的输入格式。 数据增强的内置 Keras 层(随机:翻转、旋转、缩放 和 对比度调整)也将在训练期间使用。
MobileNetV1 是一个众所周知的模型架构,用于图像分类任务,包括 用于微控制器的 TensorFlow Lite 人员检测示例。 此模型架构在我们的数据集上进行了训练,使用与 视觉唤醒词数据集 论文中使用的相同的 alpha(0.25)和图像大小(96x96x1)。 MobileNetV1 模型由 28 层组成,但对 Keras tf.keras.applications.mobilenet.MobileNet(...) API 的 **一次** 调用可用于轻松地为 5 个输出类别以及所需的 alpha 和 输入形状 值创建 MobileNetV1 模型
mobilenet_025_96 = tf.keras.applications.mobilenet.MobileNet( |
应用程序处理管道的框图 |
在本项目中,我们介绍了训练自定义图像分类模型的端到端流程,以及如何使用 TensorFlow Lite 将其部署到基于 Arm Cortex-M7 的 OpenMV 开发板。 TensorFlow 在 Google Colab 笔记本中用于训练模型,该模型基于 Kaggle 上重新标记的公共数据集。 训练后,使用 TensorFlow Lite for Microcontrollers 运行时以及加速的 Arm CMSIS-NN 内核,将模型转换为 TensorFlow Lite 格式,以便在 OpenMV 板上运行。
在推理时,使用模型确定性技术处理模型的输出,然后将 (Softmax) 激活输出的输出馈送到指数平滑函数中,以确定何时通过 USB HID 发送按键以在 PC 上输入表情符号。 我们创建的专用输入设备能够以略低于 20 帧/秒的速度捕获和处理灰度 96x96 图像数据,运行在 480 MHz 的 Arm Cortex-M7 处理器上。 设备推理提供了低延迟响应,并通过将所有图像数据保留在源并本地处理来保护用户的隐私。
您可以通过在 openmv.io 或 分销商 上购买 OpenMV Cam H7 R2 板来自己构建一个。 可以通过使用您自己的数据微调模型或应用迁移学习技术并将我们开发的模型用作基础来训练其他手势来扩展该项目。 也许您可以找到另一个用于面部手势的公共数据集,并用它来在您微笑时输入 😀 表情符号!
非常感谢 Sparsh Gupta 在公共领域许可下在 Kaggle 上分享了手势识别数据集,以及我的 Arm 同事 Rod Crawford、Prathyusha Venkata, Elham Harirpoush 和 Liliya Wu 帮助审查本文和相关教程的材料!
2022 年 11 月 29 日 — 由 Sandeep Mistry 撰写,来自 Arm引言 表情符号使我们能够在数字世界中表达情感,它们在配备触摸屏虚拟键盘的智能手机和平板电脑设备上相对容易输入,但它们在具有物理键盘的传统计算设备上并不那么容易输入。 为了在这些设备上输入表情符号,用户通常使用键盘快捷键或…