MoveNet 技术更新|基于 TensorFlow Lite 的姿态模型预测及分类

发布人:TensorFlow 技术推广工程师 Khanh LeViet 和软件工程师 Yu-hui Chen

自年初在 Google I/O 大会上 宣布推出 MoveNet 以来,我们已经收到了众多积极反馈和功能请求。今天,我们很高兴能与大家分享以下几项技术更新:

  • MoveNet 的 TensorFlow Lite 版本现已在 TensorFlow Hub 上推出。我们对该版本进行了一些可提升准确率的更新,并使其与硬件加速器兼容,其中包括 GPU 和获得 Android NN API 支持的其他加速器。

  • 我们发布了可在 Android 环境下使用 Raspberry Pi 的全新姿态预测示例,可让您在移动设备和 IoT 设备上试用 MoveNet。(即将支持 iOS 系统)

  • 同时,我们还发布了 Colab notebook,旨在教会您如何利用 MoveNet 对自定义姿势进行分类(例如,识别不同的瑜伽姿势)。您可以在上文提到的 Android、iOS 和 Raspberry Pi 应用中试用姿态分类。

什么是姿态预测?

姿态预测是一项机器学习任务,即通过预测图像或视频中特定身体部位(关键点)的空间位置来预测人物姿态。MoveNet 是目前最先进的姿态预测模型,能够检测以下 17 个关键点:

  • 鼻子
  • 左眼和右眼
  • 左耳和右耳
  • 左肩和右肩
  • 左肘和右肘
  • 左腕和右腕
  • 左臀和右臀
  • 左膝和右膝
  • 左脚踝和右脚踝

我们发布了以下两个 MoveNet 版本:

  • MoveNet.Lightning 模型体积更小、速度更快,但在准确性方面不如 Thunder 模型。该模型能在现代智能手机上实时运行。

MoveNet.Thunder 模型准确性更高,但体积较 Lightning 模型而言更大,速度也相对较慢。

各种基准数据集(参见下文表中的评估/基准结果)中的数据表明,MoveNet 模型的表现优于我们先前的 TensorFlow Lite 姿态预测模型 Posenet(论文文章模型)。

以上 MoveNet 模型支持 TensorFlow Lite FP16 和 INT8 量化格式,可最大限度与硬件加速器兼容。

此次 MoveNet 版本可识别输入图像中的单一姿态。如果图像中的人数超过一个,该模型会通过剪裁算法将尽可能地聚焦在离图像中心最近的人物身上。同时,我们还采用了智能剪裁算法,来提高视频检测的准确率。简而言之,该模型将放大前一帧中检测到姿态的区域,继而查看更细节的部分,然后根据当前帧做出更准确的预测。

如果您想深入了解 MoveNet 的实现过程,请查看 之前发布的文章,其中包括 MoveNet 模型架构和其训练时用到的数据集。

Android 与 Raspberry Pi 的示例应用

我们发布了全新的姿态预测示例应用,便于您在所选平台上快速试用不同的姿态预测模型(MoveNet Lightning、MoveNet Thunder 和 Posenet)。

  • Android 示例
  • iOS 示例
  • Raspberry Pi 示例

在 Android 和 iOS 示例中,您也可以选择使用加速器(GPU、NNAPI 或 CoreML)来运行姿态预测模型。

Android 示例应用屏幕截图。图像来自 Pixabay

MoveNet 性能

我们已对 MoveNet 进行优化,使其能在由 TensorFlow Lite 提供支持的硬件加速器(包括 GPU 和获得 Android NN API 支持的加速器)上更好地运行。MoveNet 的性能基准结果可助您选择最适合您用例的运行时配置。

*** 我们在 COCO 关键点数据集的子集上测量 mAP,并在其中筛选并裁剪每张图像,使其只包含一个人像。**

**** 在持续负载下,我们使用带有 TensorFlow 2.5 的 Android 和 Raspberry Pi 示例应用测量端到端的延迟时间。**

  • 选择 Lightning 或 Thunder 模型。首先,您应该了解 Lightning 模型的准确率能否满足您的用例。

    • 对于您的用例而言,如果 Lightning INT8 模型的准确率足够高,则可以选择该模型,因为它是系列模型中体积最小、速度最快的模型。模型的越快则意味着其能耗越少。

    • 如果准确率对于您的用例而言至关重要,Thunder FP16 模型则是理想之选。

  • 选择加速器。加速器的性能会因不同的制造商制造的 Android 设备而异。

    • CPU 是最为安全便捷的选择,因为可以肯定的是,CPU 几乎可以在任何能运行 TensorFlow Lite 的 Android 设备上正常工作。但在通常情况下,相较于在加速器上运行模型,在 CPU 运行模型时速度更慢,且耗能更高。所有 MoveNet 模型都能在 CPU 上运行良好,因此您应该根据自身的准确率需求选择模型。

    • GPU 是应用最广泛的加速器,能够提供出色的性能提升。如果您想使用 GPU,FP16 量化模型则是理想之选。

    • Android NNAPI 是一种能在 Android 设备上支持其他 ML 加速器的便捷方式。如果您已经将 CPU 或 GPU 用于其他工作负载,并且用户设备运行版本为 Android 10 或更高版本,则您可以选择满足您准确率需求的模型,并让 NNAPI 选择最适合您模型的路径。

    • 如果您是 IoT 开发者,不妨使用 Coral 来提升推理速度。请在 此处 查看 Coral 基准数据。

  • 对模型进行无线部署,而非将其捆绑在应用的二进制文件中。

由于 Android 生态系统的多元化,我们无法提供适用于所有用户的统一模型。对于使用低端设备的用户而言,Lightning INT8 模型是最佳选择,因为该模型速度最快,且能耗最少。然而对于使用高端设备的用户而言,不妨凭借 Thunder FP16 模型提供更为出色的性能。如果您想根据用户设备更改模型,则可以考虑使用 免费版 Firebase ML 托管您的模型,而非将所有打算使用的模型捆绑到应用中。如果用户开始使用需要 TFLite 模型的应用功能,则您可以编写逻辑,为每个用户设备下载最佳模型。

姿态分类

TensorBoard 是 TensorFlow 的可视化工具包。通过将 TensorFlow Quantum 模型与 TensorBoard 进行集成,您将获得许多开箱可用的模型可视化数据,例如训练损失和准确性、可视化模型图和程序分析。

为简化姿态分类流程,我们还发布了 Colab notebook,该工具能够教您如何通过结合 MoveNet 和 TensorFlow Lite,并根据自定义姿态数据集来训练自定义姿态分类模型。这表示如果您想要识别瑜伽姿势,您需要做的就是收集您想识别的姿态图像并为其添加标签,然后按照教程进行训练,接着将瑜伽姿势分类器部署到您的应用中。

姿态分类器由两个阶段构成:

1. 利用 MoveNet 检测输入图像中的关键点。
2. 利用小型 TensorFlow Lite 模型,对已检测到的关键点进行姿态分类。

利用 MoveNet 进行姿态分类的示例。输入图像来自 Pixabay

为训练自定义姿态分类器,您需要准备姿态图像,并将它们放入下图所示的文件夹结构中。您可以根据想要识别的类别为每个子文件夹命名。然后运行 notebook 来训练自定义姿态分类器,并将其转换为 TensorFlow Lite 格式。

yoga_poses
|__ downdog
    |______ 00000128.jpg
    |______ 00000181.bmp
    |______ ...
|__ goddess
    |______ 00000243.jpg
    |______ 00000306.jpg
    |______ ...
...

TensorFlow Lite 姿态分类模型非常小,其大小只有 30KB 左右。该模型从 MoveNet 中获取标记点输出,使姿态坐标标准化,并将坐标传递至几个完全连接的层中。模型的输出是一个概率列表,即姿态为每个已知的姿态类别。

TensorFlow Lite 姿态分类模型概览

您可以在任何已发布的 AndroidRaspberry Pi 姿态预测示例应用中试用姿态分类模型。

未来计划

我们的目标是提供核心的姿态预测技术以及动作识别引擎,让开发者在此基础上构建创新性应用。以下是我们目前正在积极研究的一些方向:

  • 对 MoveNet 当前版本做出改进,使其能在同一转接路径中检测多种姿态。
  • 研发新型动作识别技术,使其能在多个帧上检测姿态。

如果您有任何反馈或建议,请通过 [email protected]TensorFlow 论坛 联系我们!

致谢

我们想要感谢 MoveNet 的其他贡献者:Ronny Votel、Ard Oerlemans、Francois Belletti 以及 TensorFlow Lite 相关人员:Tian Lin 和 Lu Wang。

原文:Pose estimation and classification on edge devices with MoveNet and TensorFlow Lite
中文:TensorFlow 公众号