2021/12/02 初次做动作识别项目经历和总结(二)

1.前言


上节,我们说到反编译了别人的小程序,拿到了核心技术,poseNetTensorFlowJS的姿态识别模型,正因为发现了这个模型,证实了能在小程序客户端识别姿态,因此,接下来,就是用这一门技术,TensorFlowJS

2. 小程序阶段(初步)


TensorFlowJS,这个名字,在我脑海里一直留存着,并且这也是我的微信名称。

说起来也是有缘,正好,三年前刚工作的我,当时看着前辈们,花里胡哨的微信名称(各种技术名称),我和我的小伙伴们,都纷纷去网上找,符合自己又向往的技术。

在网络上各种技术专词当中,我第一眼,就相中了TensorFlow-人工智能,因为我知道,未来,智能化是一个趋势。

并且那时,TensorFlow就已经涉及前端领域,也就是TensorFlowJS,它就是我们前端的智能框架,我也十分好奇,它是如何能实现智能化的。

当时的我,深深被这个技术吸引了,微信名称马上就换成了TensorFlow。

现在我知道,我们可以用它的api来,创建模型,训练模型,也可以调用它里面自成的模型,来进行一些相关的识别。

没错,所以我们就使用了TensorFlowJS里面的模型-posenet,并实现了初步的姿态识别。

小程序相较h5,它需要添加一个TensorFlowJS的插件,其他所依赖的包,也需要构建npm,才能使用。

当时,posenet模型出来,也有一定时间了,一些坑点不能说没有,还是有不少,我借鉴着网上别人的经验,反复调用api并进行调参。

最终,解决了谷歌模型跨域(解决使用了国内镜像地址),相机帧率过高导致内存泄漏(解决使用栈的概念,只存一帧,并使用定时器,调整帧率),点位不准(解决调整camera相机参数,canvas画布大小要与camera分辨率一致)等一系列问题后。

我们的动作识别demo雏形逐渐浮出水面,看着手机里随着自身跳动的火柴人,心底的喜悦又更甚了几分。

但略有不足的是,往往背景太过复杂或者与实体颜色相似的情况下,点位不断跳动(精准度不高,容易被背景干扰),难以定位。

由于考虑到受众人群是一般患者,在家里,在室外,任何背景下,都可以进行康复训练,所以这就导致,一定要将去除背景干扰的影响,至少干扰程度要降到最低。

保松哥,是python大佬,就针对于这个问题,我和他沟通了许久,他建议我将背景分割处理,然后将切割的图像进行识别,这样的去做,肯定大大降低了背景的干扰。

嗯,说的有道理,我就带着这份希望,去TensorFlowJS官网查找一些去除背景的模型,心想,这种去除干扰的方法,谷歌大佬们应该都踩过吧。

果不其然,bodyPix,谷歌开源的人体分割算法的模型,早早的加入到了tfjs-model模型库里面,这突如其来的惊喜(白嫖),犹如一柄长枪,捅穿了成堆的困难险阻。

仔细地过了一遍github文档,竟然发现,bodyPix竟然沿用了posenet模型一样的数据结构,这将大大地减少了,我换模型的时间,只需要将模型导入,和读取的方法名替换一下,就完成了poseNet =>bodyPix的转变。

改版后,我满怀信心,邀请了保松哥和志坚哥,来看看姿态识别小程序,看看之前点位被背景干扰,导致不准的问题,或者说还有没有需要优化改进的地方。

我们测了所有能测的环境,整个流程走下来后,发现效果改进不大,精准度并没有提升很高,如果在相似颜色背景下,抬起手臂的时候,点位还是没有跟着手臂走上去,或者有些时候点位老是上下跳动。

不应该啊,这分割了背景,降低了背景干扰的影响,按道理来说,能拉的都拉满了。

思来想去,也只能把锅甩给平台和模型,模型对于移动端兼容性和性能,还是比不上pc和服务器。

当时,完成bodyPix的那个版本,从拿到需求,已经快过去两个星期了,后续又接手了其他项目,这个小程序,除了特殊情况,识别准度都够,当时没有想到其他更好的方法,所以就搁置了一段时间。

万万没有想到,接下来,就是见证封神的旅程。。。

3. 小程序阶段(终)


由于忙其他项目,搁置了识别优化,闲暇时间,无意之间在TensorFlowJS Hub Blog里面翻到了不久前的资讯。

开头标题就是暴击,谷歌推出最新动作检测模型Movenet

我滴天,最新动作检测,就这标题,两暴击词,直冲我世界观,让我想起了之前posenet和bodypix的模型。

它们,都是好几年前的模型了,而且仅仅是姿态(pose)识别,最佳效果是以识别图片姿态,所以相机识别可能会导致有些点位识别不准。

而此MoveNet模型,竟然有此等能耐,被叫做动作(move)检测模型,它又是如何检测运动过程中人体的关键点的呢?

预览了一遍,发现movenet会有对称猜测,缓存前面的帧,对后续的帧进行预计算,也就是视频训练,识别精度相对来说,特别强。

而且MoveNet 是在两个数据集上训练的:COCO 和一个名为 Active 的谷歌内部数据集。虽然 COCO 是检测的基准数据集 —— 由于其场景和规模的多样性 —— 但它并不适合于健身和舞蹈应用,因为它们的姿态具有挑战性,动作也很模糊。Active 通过在 YouTube 上的瑜伽、健身和舞蹈视频中标注关键点(采用了 COCO 的 17 个身体关键点标准)而产生。在训练时,每段视频不要超过三帧,以促进场景和个体的多样性。(+精准度提升)

对于 Active 验证数据集的评估表明,与仅使用 COCO 训练的相同架构相比,性能得到了显著提高。这并不令人惊讶,因为 COCO 通常不会表现出极端的个人姿态(比如瑜伽,俯卧撑,倒立等等)。(+性能提升)

并且官方为对 MoveNet 的推理速度进行量化,该模型在多个设备上进行了基准测试。在使用 WebGL 的 GPU 和 WebAssembly(WASM)上测量了模型的延迟。(+兼容性提升)

三方面都增强了,bodyPix都已经够强了,movenet这岂不是,乱杀局面,我已经想象到了用movenet识别模型跑起来的画面了,那画面,不要太完美。

替换模型的工作,我已经不是第一次了,替换下来,发现,有些参数根本不需要填写,因为使用默认值,就已经是最好的配置了。

替换成movenet的识别小程序,已经从姿态识别,过渡到动作识别了,所以现在叫做动作识别小程序

不出我所望,movenet所展现来的效果,完美解决了之前的总总问题,甚至还能预测我相机范围外的点,自然而然地收获了领导们的赞赏和肯定。

(天时,movenet出来的时间正好在我做项目的时候,解决了我燃眉之急。)

(地利,早在2年前,就对TensorFlowJS感兴趣,目前工作中需要用到。)

(人和,有着保松哥前辈的经验,还有志坚哥领导的支持。)

占据了天时地利人和,我以一己之力,见证了动作识别小程序,从零到有,从有到优的过程。

动作识别小程序的经历,犹如人生经历一般,喜忧参半,你永远不知道下一颗糖是什么滋味!

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值