全身姿态估计怎么做?MMPose 133 关键点实战指南
2026/9/20 21:57:56 网站建设 项目流程

全身姿态估计怎么做?MMPose 133 关键点实战指南

【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose

MMPose 是 OpenMMLab 开源的姿态估计工具箱。做全身姿态估计时,它能在一张图上定位 133 个关键点:身体 17 个、足部 6 个、面部 68 个、双手 42 个,直接输出带置信度的像素坐标。

全身姿态估计:它到底能干什么

输入一张图片或者一段视频,每个被检测到的人都会得到一组 133 个关键点的坐标。关键点覆盖躯干四肢的主关节、双脚、脸部和两只手,每个点附置信度。人体框不需要自己画,可以由检测器自动完成,也可以手动传入现成的框。整条流程是 Top-Down:先定位人,再逐人估计姿态。

输入输出部位覆盖可用规模
图片/视频,人体框自动检测或手动传入每人 133 个关键点坐标 + 置信度身体 17、足部 6、面部 68、双手 42RTMPose m/l 等,256x192 与 384x288 两档输入

图:COCO 测试图,整图输入即可得到框内人物的全身姿态结果。

技术内核拆解

一个头出 133 个通道,而不是拆成四个小网络

RTMPose 全身模型并没有为身体、脸、手、脚各跑一遍网络,而是一个 CSPNeXt 骨干接一个检测头,一次前向输出全部 133 个通道。这样取舍的理由是:单次推理比多次快得多,且身体与手脸共享同一份图像上下文,互相补位。点位密度差异带来的难点,靠配置里按关键点单独调的joint_weights和各部位分阶段训练来消化。133 点的构成就定义在数据集类里:mmpose/datasets/datasets/wholebody/coco_wholebody_dataset.py。

用 SimCC 替代热图,小分辨率也能稳住手指

256x192 的输入经 32 倍下采样后只剩 8x6 的特征图,这个粒度画热图,手指关节根本分不开。RTMPose 换成 SimCC:把每个关键点表示成 x、y 两条一维分布,再按 2 倍比例拉长,等效拿到约 16x12 的分辨率,代价几乎不变。训练用 KLDiscretLoss 优化这两条分布,换来亚像素级定位精度,实时性不受影响。编解码实现见 mmpose/codecs/simcc_label.py。

MMPose 133 关键点效果对比:精度到底多少

下表数据来自仓库内的官方 benchmark,测速基于 COCO-WholeBody v1.0 验证集,人体检测器 AP 为 56.4:

模型规格输入分辨率Whole AP / ARFLOPS (G)推理耗时(RTX 3090,TRT-FP16)
RTMPose-m256x19260.4 / 66.72.221.17~1.84 ms
RTMPose-l256x19263.2 / 69.44.521.44~2.61 ms
RTMPose-l384x28867.0 / 72.310.071.75~4.24 ms

从这张表能读出三件事:桌面 GPU 上 133 点全身推理不到 3 毫秒,整条流水线的瓶颈往往在前置的人体检测而不是姿态模型;分辨率从 256x192 提到 384x288,AP 涨了约 4 个点,但 FLOPS 翻了 2 倍多,收益递减明显;同一模型在 Jetson Orin NX 上是 3.5~7.2 毫秒,边缘设备也够用。完整测速矩阵在 projects/rtmpose/benchmark/README_CN.md。

图:CrowdPose 人群场景测试图,遮挡与密集人群是全身姿态估计的典型难点。

真实场景怎么用

从单张图片检出全身骨架

17 点身体模型看不到手指和脸,做体态分析、形象类应用时信息量不够。MMPose 用单个全身模型一次输出 133 点,人体框由检测器自动补全。命令行入口是demo/image_demo.py,文档在demo/docs/zh_cn/2d_wholebody_pose_demo.md。如果你想快速跑通:

from mmpose.apis import Pose2DInferencer inferencer = Pose2DInferencer( model='configs/wholebody_2d_keypoint/rtmpose/coco-wholebody/' 'rtmpose-m_8xb64-270e_coco-wholebody-256x192.py', weights='rtmpose-m_simcc-coco-wholebody_pt-aic-coco_270e-256x192-cd5e845c_20230123.pth', det_model='rtmdet-m') result = inferencer('tests/data/coco/000000196141.jpg')

给舞蹈或健身动作打分

教培场景里教练打分主观、无法规模化复制。全身关键点把"动作"变成可计算的坐标序列,官方示例projects/just_dance就做了这件事:对齐学生与教练的关键点序列,逐帧算相似度作为评分,核心逻辑见 projects/just_dance/calculate_similarity.py。

用 42 个手部关键点做手势分类

手部区域拿身体模型去套基本失准,手势识别需要足够密的手指点位。仓库提供 OneHand10K 和 hand5(五指 21 点)的 RTMPose 预训练配置,比如configs/hand_2d_keypoint/rtmpose/hand5/rtmpose-m_8xb256-210e_hand5-256x256.py,加载后即可输出每只手的 21 个点位供下游分类。

从 Demo 到生产

云端:把全身姿态估计做成容器化服务

仓库自带 TorchServe 容器方案,镜像构建脚本在docker/serve/Dockerfile,端口与模型目录由 docker/serve/config.properties 控制,inference_address默认监听 8080。最简启动:docker build -f docker/serve/Dockerfile -t mmpose-serve .,然后docker run -p 8080:8080 mmpose-serve。训练侧同理:自定义数据先转 COCO-WholeBody 格式,用tools/dataset_converters/下的脚本转换,再改一份现有配置跑tools/train.py,微调时数据管线、EMA、学习率衰减都是现成的。

边缘:让人体姿态估计 Python 库跑进 Jetson 和手机

  • 剪枝:Group Fisher 剪枝加微调的完整流程在 projects/rtmpose/rtmpose/pruning/,含 prune 与 deploy 两套配置
  • 推理引擎:benchmark 给出了 ONNX Runtime(i7 CPU)、TensorRT FP16(1660Ti/3090)、ncnn(骁龙 865)、Jetson Orin 全系实测延迟,17 点 RTMPose-t 在 3090 上仅 1.12 毫秒
  • 手机端projects/rtmpose/examples/内有 ncnn 推理的 C++ 示例代码
  • 预算紧张时的取舍:133 点全身模型 FLOPS 约 2.2G 起,也可以改用 17 点身体模型加独立手部模型,用一点流水线复杂度换端侧延迟

周边生态与下一步

同仓库的demo/topdown_demo_with_mmdet.py直接把 MMDet 的 RTMDet 检测器和 MMPose 姿态模型串成端到端流水线,视频场景在demo/mmtracking_cfg/里也备好了 MMTracking 的 DeepSORT 配置,部署链则对接 MMDeploy,上文的测速数字就是用 MMDeploy 的 profiler 测出来的。往 3D 走,projects/rtmpose3d提供 3D 版模型,demo/body3d_pose_lifter_demo.py能把 2D 关键点直接提升到 3D;手部方向还有 InterHand3D 的完整配置。

133 个全身关键点、GPU 上不到 2 毫秒的推理,一条命令跑通的全身姿态估计,就是 MMPose 给工程侧留出的全部门槛。

【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询