智能健身动作识别:PP-TinyPose打造AI虚拟健身教练!

在人工智能技术更迭及后疫情时代的背景下,随着居民生活模式发生改变,智能运动健身行业得到了极大的发展。刘畊宏带起的“本草纲目”健身热潮也正式开启了居家健身时代,随之而来的便是人们对个性化、智能化的健身动作识别、矫正、计数的强烈需求,如何随时随地进行便捷、标准的健身运动逐渐成为了人们热议的话题。

在健身场景下,动作类型与人体骨骼点的位置变化之间存在着密不可分的关系,因此采取人体关键点检测技术实现智能化健身动作识别与计数就再为合适不过了。

图1:基于PP-TinyPose的健身动作识别

那么具体如何能利用人体关键点检测实现智能化的健身动作识别与计数呢?今天就手把手带大家用飞桨搭建一个AI虚拟健身教练吧!

不慌,先码住完整教程:

https://github.com/PaddlePaddle/PaddleDetection

项目难点

非常规姿态多

在健身、舞蹈等场景中,人体姿态明显区别于常见的站姿,存在较多复杂的姿态。常见的公开数据集中往往缺少这类数据,因此在处理这类复杂姿态时,容易出现检测框位置或关键点位置不准确的问题,导致动作识别出现误检漏检,无法达到令人满意的效果。

模型体积与速度要求高

体育健身动作持续时间通常在秒级以内,因此对检测响应速度要求极高,同时随着边缘端硬件在健身行业的普及,对模型的体积要求也愈加严苛。

视频抖动严重

使用关键点算法处理视频数据时,由于预测针对单帧图像进行,在视频结果上往往会有抖动的现象。对于依靠精细化坐标的应用场景(如健身计数、基于关键点的虚拟渲染等),非常容易造成误检或可视化效果不流畅的问题。

关键点点数需求多变

例如在芭蕾舞场景下,垫脚、勾脚等动作仅依赖脚腕关键点无法进行区分,往往需要更多骨骼点信息才能实现精细化动作识别。

方案设计

图2:方案设计

模型选型

PP-TinyPose的出世彻底打破了精度与速度无法兼得的难题,成为轻量级关键点检测的最佳选择。PP-TinyPose采用Top-Down的方式,先应用3.3M、150FPS的超轻量检测网络PP-PicoDet检测出人体,再用基于Lite-HRNet的移动端优化模型确保关键点检测的高精度,同时扩大数据集,减小输入尺寸,预处理与后处理加入AID、UDP和DARK等策略,保证模型的高性能。实现速度在FP16下达到122FPS的情况下,精度也可达到COCO数据集51.8%AP,不仅比其他类似实现速度更快,精度更是提升了130%!

数据准备

数据收集包含人体检测和人体关键点检测两部分,均使用COCO train2017和AI Challenger trainset作为训练集。将两数据集标注含义进行统一,并转换为COCO数据格式后执行训练。

图3:数据准备

模型训练优化

更令人惊喜的是,在原版的基础上,针对体育健身场景难点,PP-TinyPose分别从场景数据多样性、检测模型迭代、关键点稳定性三个方向全面升级,发布了专为体育动作识别打造的增强版本,最终相比原版在健身场景数据上提升9.1%AP,实现速度85FPS,精度77.1%AP。同时,新增7个复杂动作的精准识别,包括侧身、卧躺、跳跃、高抬腿等非常规动作。具体来看:

场景数据多样性

在COCO数据集和AI Challenger数据集的基础上,进一步结合采集的健身、舞蹈等较难场景数据对模型进行迭代,提升模型预测效果。

图4:PP-TinyPose增强版效果对比图

检测模型迭代

使用PP-PicoDet增强版模型,在原版基础上引入TAL及ETA Head,优化PAN等结构,COCO数据集精度提升2个点以上。基于丰富的健身场景数据,人体检测模型精度提升6.8% mAP****。

关键点稳定性

加入OneEuro滤波器和EMA两种关键点稳定方式,将当前关键点坐标结果和历史关键点坐标结果结合计算,使得输出的坐标更加稳定平滑。

图5:稳定性升级对比图

如果模型仍无法满足要求,开发者还可以基于飞桨目标检测开发套件PaddleDetection所提供的二次开发文档,进行模型训练及优化、关键点新增、删减与类别自定义,5分钟即可实现关键点检测个性化开发。

图6:PP-TinyPose增强版支持手指、脚趾等29个关键点

    完整链接:

https://github.com/PaddlePaddle/PaddleDetection/blob/develop/docs/advanced_tutorials/customization/keypoint_detection.md

后处理逻辑

得到人体关键点检测结果后,可以结合不同关键点在相同帧的相对关系,或者不同帧下同一关键点的位置变化来进行动作识别和计数。

以侧平举为例,当手臂抬起角度接近水平,则认为手臂处于抬起动作;当手臂放下角度接近垂直,则认为手臂处于放下动作;两动作交替完成后认为侧平举动作计数加一。

图7:动作计数逻辑

除此之外,PP-TinyPose增强版还配套了深蹲和站姿上举的动作识别计数实现。

    详细代码链接:

https://github.com/zhiboniu/pose_demo_android/blob/release/1.0/app/src/main/cpp/pose_action.cc

端侧部署

图8:端侧部署效果展示

通过以上方法即可获得高效的健身动作识别计数模型,依托于飞桨端侧推理引擎Paddle Lite,能够灵活快速的部署到各类端侧设备上。

blog.img.cn/img_convert/7479679e3abfb3507e9b0dddb05c8b65.png)

如需更新模型并实现更丰富的健身动作识别,可参考以下流程:

  1. 训练模型导出为.nb后缀的Paddle Lite模型;
  2. 替换pose_demo_android中models下的nb模型文件;
  3. 通过Android Studio编译运行代码,重新生成APP。

作为轻量化骨骼点检测的开源SOTA算法, PP-TinyPose以精度速度高、微小目标识别效果好、多人检测速度快、端侧部署易用性强、体育健身动作检测准著称,在端侧微弱算力上,使用飞桨轻量化推理引擎Paddle Lite,即可快速实现各类健身动作识别与计数!

还在等什么,快来搭建属于你的AI健身教练吧!

    教程文档及模型下载链接:

https://github.com/PaddlePaddle/PaddleDetection/blob/develop/industrial_tutorial/README.md

获取更多技术内容~

经验分享 程序员 微信小程序 职场和发展