MoveNet流程解析

MoveNet是一个基于CenterNet模型的轻量级人体姿态估计模型,由Google于2021年提出。MoveNet采用自下而上的检测策略,能够检测人体的17个关键点,包括头部、颈部、肩部、肘部、手腕、髋部、膝盖和脚踝等关键点。其轻量级设计使其可以在计算资源受限的设备上运行,例如移动设备和嵌入式设备。此外,MoveNet还具有高效的推理速度和较低的模型大小,使其适合实时的应用场景,如健身跟踪、手势识别和虚拟试衣等。
模型主要分为三部分:Backbone、Header、后处理
Backbone:特征提取器采用MobileNet2+特征金字塔(FPN),实现高分辨率(步长为4)且语义丰富的特征图。高分辨率(步长为4)的理解:步长为4就意味着特征图上的一个像素点对应着原图像44的像素点,因此特征图具有高分辨的特征。
主干网络
Header:经过Backbone网络后输出四个Header,如下图所示:
在这里插入图片描述
B代表batchsize 、h,w代表特征图的宽高、k代表预测人体检测关键点的数量
Center:预测人体的几何中心点。数据预处理:官方博客采用,将所有人的关键点求算术平均数(arithmetic mean)解出中心点的坐标。
Keypoint Regression:预测特征图中每个人的k个关键点与其中心坐标偏移值,分为x,y值,所有有2k通道。
Keypoint Heatmap:当前特征图中所有人的关键点
Local Offsets:每个关键点的偏移场。降采样会导致特征图存在量化误差,即实际原图(192
192)x=0与x=3映射到特征图中(48*48)是同一个像素点,因此需要加一个偏移。
通过Backbone提取出4个Header后,通过下图的后处理部分,获取最靠近图片中心的人体所有关键点信息
在这里插入图片描述
第一步:对于Center Head,与一个图片中心位置加权矩阵相乘,选出最靠近图像中心的人体中心的坐标

第二步:根据选出的人体中心点坐标,从Regression Head 通道中选取对应的关键点x、y值坐标,得到最靠近图像中心的人体的粗略的关键点信息。

第三步:根据粗略的关键点信息,构造一个以这个关键点坐标为中心生成一个权重矩阵,直接以等差数列0-47(47的原因是当关键点信息在边界时能够覆盖整个特征图(48*28)),中心点最小为0,往外依次递增的权重系数矩阵。然后用Heatmap Header除于这个权重矩阵,求解出来的结果最大的就是该人体的关键点。原因:如果Heatmap中这个关键点与粗略关键点最靠近,说明这个关键点就属于最靠近图像中心的人的关键点,求解出来的结果也是最大的。

第四步:根据坐标点将Local offset Header中对应的偏移值加上就可以得到结果了

参考链接:
2021轻量级人体姿态估计模型修炼之路(附谷歌MoveNet复现经验)

Next-Generation Pose Detection with MoveNet and TensorFlow.js

### MoveNet TensorFlow Pose Estimation Model Usage and Implementation #### Overview of MoveNet MoveNet 是由 Google 提供的一种高效的姿态估计模型,专为实时应用设计。它能够快速检测人体的关键点位置,并适用于多种设备和平台,包括移动设备和边缘计算环境。该模型的核心目标是在保持高精度的同时降低推理延迟[^1]。 #### Key Features of MoveNet MoveNet 基于深度学习技术构建,采用了优化的网络结构来提升性能。它的架构类似于 Hourglass 设计理念,通过多次下采样与上采样的操作提取特征并恢复细节信息[^3]。此外,为了进一步提高效率,MoveNet 利用了轻量化组件 Slim-Neck 来减少深度可分离卷积 (Depthwise Separable Convolution, DSC) 对整体效果的影响,从而充分发挥 DSC 的优势[^4]。 #### Two Variants of MoveNet 目前 MoveNet 主要有两个变体:`MoveNet Lightning` 和 `MoveNet Thunder`。 - **Lightning**: 更加注重速度,在低功耗设备上的表现尤为突出。 - **Thunder**: 虽然稍慢一些,但在准确性方面更胜一筹,适合对精度有更高需求的应用场景。 这两种版本均支持单人或多人群组的姿态估计任务,具体取决于输入数据的形式以及预处理方式的选择。 #### Example Code for Using MoveNet with TensorFlow 以下是利用 TensorFlow Hub 加载并运行 MoveNet 模型的一个简单示例: ```python import tensorflow as tf import numpy as np from PIL import Image # Load the MoveNet model from TensorFlow Hub model = tf.saved_model.load("https://tfhub.dev/google/movenet/singlepose/lightning/4") # Prepare input image input_image = Image.open("path_to_your_image.jpg").resize((192, 192)) input_tensor = tf.convert_to_tensor(input_image)[tf.newaxis, ...] # Run inference outputs = model(input_tensor) # Extract keypoints keypoints_with_scores = outputs['output_0'].numpy() print(keypoints_with_scores) ``` 上述代码展示了如何加载预训练好的 MoveNet Lightning 版本,并针对一张图片执行姿态预测的操作流程。 #### Applications of MoveNet 由于其实时性和灵活性特点,MoveNet 广泛应用于健身指导、舞蹈教学、虚拟试衣间等领域。例如,在运动健康领域中可以用来分析用户的动作姿势是否标准;而在娱乐行业,则可用于增强现实游戏中的角色控制等功能开发。 #### Challenges in Similarity Determination Between Point Sets 当涉及到两组匹配二维点之间的相似度判断时,通常会考虑欧几里得距离或其他几何变换不变性的衡量方法。这方面的研究可能涉及强化学习框架下的策略优化算法 GRPO 等工具辅助完成复杂情况下的配准工作[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值