https://blog.tensorflowcn.cn/2019/09/body-movement-recognition-in-smart-baduanjin-app.html
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNJO-XX9UV5EhidnvBsyoaGZkRxOwgUe1_moxSIzJGZHNEE2GRjB6ncaankTEKSycYekPI9Lnr8_Rdljydx9rDFKsjNL3kBK5j92BWyQHPilqT49RrBuHlOxQ4tQ8ivty-c3dAf0YOrRQ/s1600/pic1.png
OliveX 工程团队 Keith Chan 和 Vincent Zhang 的客座文章
简介
OliveX 是一家总部位于香港的专注于健身相关软件的公司,自 2018 年首次推出以来,已为超过 200 万用户提供服务。我们的许多用户是老年人,我们的八段锦应用程序帮助他们练习八段锦,同时最大程度地减少受伤的可能性。为了实现这一点,我们利用最新的 **人工智能** 技术在我们的应用程序中自动检测八段锦练习的动作,并为我们的用户提供相应的反馈。
目标和需求
八段锦是一种流行的锻炼方式,它包含八种肢体运动和控制呼吸。精确的动作和控制对于八段锦至关重要,它能改善身体的身心健康。
通过使用“智能八段锦”应用程序,用户可以使用 AI 追踪他们的动作,来判断他们是否正确地执行了动作。通过利用最新的机器学习技术,我们希望用更愉快的互动体验来取代传统的学习方法,在传统的学习方法中,用户只是跟随练习视频,而在新的方法中,用户可以实时获得他们身体动作的反馈。我们也希望这些功能能够帮助老年人更有效地练习八段锦,并降低受伤的风险。
在分析和优先考虑我们的目标之后,我们定义了整体产品需求
- 我们的用户通常在户外环境中练习八段锦,因此我们的产品需要是“移动的”
- 当用户练习八段锦时,他/她通常需要跟随演示视频并模仿教练的动作,因此我们的产品应该能够播放有声音的视频
- 为了为我们的用户提供有价值的实时反馈,我们需要使用前置摄像头捕捉用户的身体动作
具体来说,关于身体动作识别,我们希望我们的算法能够做到以下几点
- 识别整个序列中的每个八段锦动作
- 根据用户身体动作的正确性给出评分
- 对不理想的动作提供纠正指导
技术分析
ML 框架选择
根据上述要求,我们需要选择合适的深度学习框架来实现我们的项目。特别是,我们正在寻找一个具有以下特点的框架:
- 对移动设备有强大的支持,即使在中低端智能手机上也能平稳运行
- 友好的 API 设计和丰富的调试工具
- 成熟的社区支持和可用资源
经过全面的调查和评估,我们发现 TensorFlow Lite 满足了我们的需求和要求。此外,谷歌开源了
PoseNet,这是一个专门为检测人体姿势而设计的应用程序,并提供了基于 TensorFlow.js 的演示代码(编辑:我们最近发布了基于 TensorFlow Lite 的
PoseNet 示例)。谷歌不仅帮助我们借助开源代码完成了人体姿势识别的初始工作,而且还让我们相信我们的动作识别算法可以在移动设备上运行,因为在 JavaScript 上的性能非常好。
算法
身体动作识别
在我们开发的初始阶段,我们调查了现有的身体动作识别算法。目前,主流算法大多是基于分析视频帧序列。虽然这些算法可以满足我们的要求,但网络相当复杂,在上面运行推理会消耗大量的计算资源。但由于我们的一个硬性要求是在移动设备上运行模型,我们不得不权衡准确性和性能之间的关系。
我们的方法是首先通过 PoseNet 获取关键的人体关节,然后根据人体关节运动的序列识别特定动作。由于 PoseNet 只跟踪 17 个身体关节,与全尺寸图像相比,计算量大大减少。下面我们展示了我们算法的工作流程:首先我们使用 PoseNet 从输入视频中提取身体关节数据,然后我们根据身体关节数据进行动作分类。
关键动作
在确定技术方法之后,我们需要定义应用程序中识别重要的关键身体动作。为此,我们将身体动作识别问题转化为一个典型的机器学习分类问题。下面是一个关于我们如何定义关键八段锦动作的示例:
我们训练了一个传统的深度神经网络来对用户的身体动作进行分类。经过多次超参数调整和训练数据优化/增强,我们的最终模型具有良好的准确率,能够满足我们的产品要求,如下所示。
移动设备上的挑战
在完成深度学习模型之后,我们的下一步是将我们的模型部署到 iOS 和 Android 移动设备上。起初,我们尝试了 TensorFlow Mobile。但由于我们需要实时获得识别结果,TensorFlow Mobile 并不是一个可行的选择,因为它的性能无法满足这一要求。当我们试图解决性能挑战时,谷歌发布了
TensorFlow Lite,它在性能方面比 TensorFlow Mobile 有了很大的进步。我们将在下面比较这两个产品:
我们还展示了我们的模型的初始基准测试结果:
根据基准测试数字,我们得出结论,基于 512x512 输入大小,在大多数 Android 设备上实时进行身体动作识别是不可行的。为了解决这个问题,我们对我们的机器学习模型进行了分析,发现 PoseNet 是瓶颈,它消耗了 95% 的计算时间。因此,我们调整了 PoseNet 输入大小和超参数,并重新训练了我们的动作识别算法来弥补由于减小输入大小而导致的准确率损失。最后,我们选择了 337x337 RGB 作为输入,并将 Android 上的 MobileNet 的宽度乘数设置为 0.5。
我们的目标用户主要是老年人,因此他们往往使用低端设备。即使我们通过调整 PoseNet 参数提高了性能,但仍然不令人满意。因此,我们求助于智能手机中普遍存在的加速器:GPU。谷歌恰好在那个时候发布了
TensorFlow Lite GPU 代理(实验性),这为我们节省了大量的工程资源。
移动 GPU 极大地加速了我们的模型执行。以下是我们对用户中流行的几种设备进行的基准测试,有无 GPU 代理。
由于八段锦的动作对于老年用户来说比较慢,因此在集成 TensorFlow Lite GPU 代理(实验性)之后,我们的产品可以在大多数设备上平稳运行。
结论
我们在 iOS 和 Android 上成功完成了我们的“智能八段锦”产品,并收到了测试用户的积极反馈。通过利用 ML 技术和 TensorFlow,我们为八段锦初学者提供了一个“教程模型”,以便他们可以跟随演示视频并学习动作。对于经验丰富的八段锦练习者,我们提供了有价值的反馈,例如分数,帮助他们进一步提高技能。目前,“智能八段锦”在
App Store 和
Google Play 上均可免费使用。
同时,OliveX 正在积极探索将人体姿势估计应用于其他健身练习。我们发现,许多其他练习方式与八段锦类似,即练习者的身体动作的正确性非常重要。正确的身体动作不仅可以帮助人们避免身体受伤,还可以提高他们的锻炼效率。因此,我们希望将从八段锦项目中获得的知识和技能转移到其他领域。