干这行做人体姿态估计,最常被问到的问题不是"哪个模型最准",而是"我到底该用哪个"。然后给对方甩一张 COCO 榜单,结果人家根本下不了手。因为榜单上的模型和真正能跑进你业务里的模型,往往不是一回事。
我过去几年在动作识别、健身计数、体态分析这些项目里反复折腾过 OpenPose、HRNet、MediaPipe 这些模型,踩了不少坑,也摸清楚了它们各自的"脾气"。这篇文章不打算堆榜单数据,而是把这 9 个真正高频出现的模型按技术路线、适用场景、部署成本拆开讲清楚。你不需要挨个试,看完基本就知道哪个该进你的技术选型表。
1. 选模型之前,先把姿态估计的"技术底牌"看清
很多人一上来就纠结模型名字,忽略了姿态估计模型背后其实是两条完全不同的技术路线。这两条路线的差异,直接决定了模型的精度上限、运行速度、甚至写代码的复杂度。不看这个,选型就是在碰运气。
1.1 自顶向下与自底向上:多人姿态估计两条路线
先解释两个术语。
自顶向下(Top-Down)的思路是:先用目标检测器把人框出来,再对每个人单独做关键点检测。相当于你先找到现场有几个人,然后一个个点名让他们站好拍证件照。HRNet、AlphaPose、ViTPose都是这个路子。优点很简单,单人的姿态估计精度可以做得非常高,因为模型只在一个人身上工作,不需要考虑人与人之间的干扰。缺点是整个过程被拆成了两步,检测器漏框,姿态就跟着丢;人一多,计算时间也会往上翻。
自底向上(Bottom-Up)的思路反过来:先把图像里所有关键点一次性都检测出来,再通过某种算法把这些点"组装"成不同的人。相当于我不关心谁是谁,先把所有眼睛、手肘、膝盖都找出来,再用连线规则把它们拼回每个人。OpenPose 就是这条路线最出名的代表。它的优点是速度和人数的关系不大,适合人群密集的场景;缺点也很明显,当两个人靠得很近或者互相遮挡时,点与点之间的配对很容易出错。
我刚入行的时候以为精度差距只是模型结构造成的,后来发现根本不是,而是这两条技术路线的天花板不同。如果你的场景是健身房单人、瑜伽体态,Top-Down 几乎是稳赢;如果你要做商场人流分析、多人互动行为识别,Bottom-Up 的稳定性反而更好。选型先选路线,再选具体模型,这个顺序不能反。
1.2 热力图回归与坐标回归:模型在输出什么
除了检测路线,还有一个隐藏的技术分叉:模型输出关键点的方式。这个细节决定了模型训练难度、精度表示方式,也决定了部分模型为什么天生适合移动端。
热力图回归(Heatmap Regression)是主流做法。模型输出一张张概率图,图上某个位置值越高,说明关键点越可能出现在那里。比如输入图片大小是 256x256,输出就是 64x64 的热力图,最后通过 argmax 找到峰值点坐标。由于热力图天生保留了空间信息,配合高斯标签训练,精度通常更高,尤其是对亚像素级别的微小位移更敏感。HRNet 的精度优势有很大一部分就来自这里。
坐标回归(Coordinate Regression)直接让模型输出 (x, y) 坐标值。这是回归任务里最直接的表达,没有热力图那种空间分辨率损失,模型也可以做得非常小、跑得非常快。MediaPipe 中的 BlazePose 和早期 PoseNet 用的就是这类方法,所以在手机 CPU 上都能跑几十毫秒。代价是精度上限通常不如热力图方法,尤其在小目标、复杂姿态场景下容易吃亏。
理解这点之后,你再看模型参数或推理速度时,就不会被单一指标带着跑。一个 MobileNet 级别的热力图模型和一个坐标回归模型,哪怕 FLOPs 差不多,真实效果和训练难度也会差很多。在移动端项目里,如果姿态本身比较规整,坐标回归完全够用;如果要做精度敏感的动作打分,还是别省热力图带来的精度收益。
2. 九个常用模型逐个拆解:它们各自靠什么吃饭
下面这 9 个模型是我实际用过或在项目中认真评估过的,在各自方向上都算"常青树"。不是按排行榜精度排序,而是按它们在真实项目里的出场频率和定位来排。
2.1 OpenPose:自底向上路线的开山鼻祖
OpenPose 是 CMU 在 2017 年左右开源的项目,当年火到只要是讲姿态估计的课件,必然有它的身影。它最核心的贡献是提出了 PAF(Part Affinity Fields,部分亲和场),解决了"关键点属于哪个人"的组装问题。PAF 简单理解就是每个关键点之间还带了一个方向向量场,模型不仅知道"这里有个手肘",还知道"这个手肘的受力方向朝向哪个手腕",凭借这个方向信息完成人与人的区分和肢体连接。
OpenPose 官方支持 18 个关键点或 25 个关键点的输出,另外还能顺带检测人脸和手部关键点。当年它最大的优点是"一个人玩全家桶",一张图里人的框、骨架、手、脸都能出。但代价也大:模型文件动辄 200MB 以上,纯 CPU 推理一张图经常要几秒钟,GPU 上速度也不算快。我自己在早期做过一个动作对比项目,用 OpenPose 做离线批次处理没问题,但想推到实时摄像头里,直接放弃了。
现在的意义更多是"基准"和"教学"。很多入门者用 OpenPose 跑通第一条管线,理解 PAF 的配对逻辑,再迁移到其他自底向上方法时就不抓瞎。
2.2 HRNet:让高分辨率特征贯穿全程的基线之王
HRNet(High-Resolution Net)是 2019 年微软和中科大合作提出的模型,核心技术点是全程保持高分辨率特征图,而不是像其他模型那样先下采样再上采样。你可以把它理解成一个团队里始终保留"高精度组",虽然旁边有几个低分辨率的组在快速处理信息,但高精度组一直在线,最后融合各组结果,所以输出细节特别丰富。
HRNet 在 COCO 单人姿态估计榜单上霸榜了很长时间,关键是它不只在姿态估计上强,做分割、检测也是通用骨干网络。这个特性让它在工业界特别吃香。后来很多项目里,HRNet 都作为"精度高但重"的对比基线存在。
实际用下来,HRNet 的精度确实靠得住,尤其对遮挡和肢体交叉也有不错的鲁棒性。但它的计算量大,官方模型没有针对性优化的话,一般只有 GPU 才跑得动。我做健身动作打分项目时,如果用户只有手机,HRNet 直接被排除;如果是服务端处理短视频,那 HRNet 完全值得作为主力模型。
2.3 AlphaPose:精度优先的自顶向下代表
AlphaPose 是上海交大提出的,号称是 "Regional Multi-Person Pose Estimation" 的代表,也就是先检测人再定位关键点。它在自顶向下路线上做了很多优化,比如对称空间变换网络(SSTN)、姿态引导的区域框生成、姿态 NMS,这些细节让它在各项数据集上的精度一直排在第一梯队。
AlphaPose 的一个特点是"干净"。因为它整体设计就是围绕多人场景的 top-down 展开,检测框准、单人姿态网络又强,所以在多人互相遮挡时比很多同类方法稳。但代价也一致——依赖人体检测器的质量。一旦检测器漏检了人,后面再强的姿态分支也发挥不出来。
从工程角度看,AlphaPose 的代码仓库经历了比较大变动,现在也支持把检测器换成 YOLO 系列,解耦性比早期版本好。如果你要做的是多人场景但预算充足、可以用 GPU 推理,AlphaPose 是比 HRNet 更"省心"的选择,因为它把多人检测和姿态整合得更紧密。
2.4 MediaPipe BlazePose:移动端实时姿态的普及者
Google 的 MediaPipe 框架里内置了 BlazePose,它在 2020 年左右出现时几乎重新定义了"移动端姿态估计"。它输出 33 个关键点,除了人体骨骼点,还额外覆盖了脸部部分关键点。模型采用坐标回归方式,所以非常轻量,官方宣称在手机 CPU 上就能跑到实时。
但注意,它不是直接回归 33 个点那么简单。为了兼顾速度和精度,BlazePose 会先用一个检测器定位人体 ROI,再做姿态回归。所以虽然输出是坐标,整体仍然有 top-down 的思路。这种设计让它在单人场景里非常稳定,多人场景也能通过反复检测每个人来处理,只是 CPU 占用会线性上升。
我在实际项目里的经验是:BlazePose 特别适合做"能不能用"的原型和 App 端功能。它部署太方便了,MediaPipe 一条命令就能装好,Python 和移动端都支持。精度方面,它的关键点抖动比热力图模型明显,直接拿来做精细的关节角度计算还要加滤波,否则相邻两帧的角度能跳好几度。
2.5 MoveNet:轻量级里的速度担当
MoveNet 是 Google 在 TensorFlow Hub 上开源的轻量级姿态模型,主打速度和边缘设备友好。它提供 Lightning 和 Thunder 两个版本,前者追求极致速度,后者在速度和精度之间平衡。和 BlazePose 一样走坐标回归路线,但 MoveNet 是单阶段模型,不需要额外的检测器,直接整图出关键点,所以管线更简单。
MoveNet 最让我喜欢的是它在 CPU 上跑得飞快。一段 640x640 的视频在普通 x86 CPU 上也能保持较高帧率,在树莓派这种设备上也有实用价值。关键点输出是 17 个骨骼点,同时模型内部自带一个"人中心"预测,可以辅助追踪,做多人场景时可以通过多次裁剪来实现。
它的缺点也明显:非常依赖训练数据的分布,对"非常规姿态"(比如倒立、旋转)的鲁棒性不如 OpenPose 和 HRNet。如果你做的是 2D 姿态估计且场景比较常规、设备算力有限,MoveNet 的非专业选择里性价比很高。
2.6 ViTPose:Transformer 在姿态估计上的爆发
ViTPose 是 2022 年提出的基于视觉 Transformer 的姿态估计模型。它把整张图片切成 patch 喂给 Transformer 编码器,不再只依赖卷积网络堆叠。ViTPose 的理念很简单——既然预训练 ViT 在图像分类上那么强,直接拿来当作姿态估计骨干,再配一个轻量的解码器输出热力图就行。
效果确实惊人。ViTPose 在不同大小的 ViT-B/L/H 上都刷新了 COCO 榜单,关键它还有个优势:对预训练权重非常敏感,用 ImageNet 预训练的 ViT 以后,不用太多领域数据就能微调出不错的姿态模型。
从工程角度,ViTPose 不像 HRNet 那样需要在低分辨率特征上做多次跨层融合,结构更直白,可以比较容易地塞进现有 top-down 流程。不过推理开销也不小,ViT 在 GPU 上虽然好使,CPU 上就吃力了。如果你的硬件以 GPU 为主、目标是把精度往 SOTA 上冲,ViTPose 值得认真考虑。
2.7 RTMPose:实时部署的综合优选
RTMPose 是 OpenMMLab 在 2023 年推的模型,出自 MMPose 团队。它的设计目标很清晰:既要准,又要快,还要容易部署。RTMPose 的技术路线是 top-down + 自研的关键点 Transformer 解码器,但和 ViTPose 这种大编码器方案不同,它的编码器轻量,解码器用专门设计的方式直接把特征映射成热力图,训练流程经过精心设计。
真正让我觉得 RTMPose 实用的是它的生态。模型从 nano、tiny、small 到 large 都有,覆盖从手机、CPU 到 GPU 全场景。实测下来,RTMPose-t 在 COCO 上精度已经接近甚至超过一些重型模型,而体积和速度又能和 MoveNet 掰手腕。OpenMMLab 同时给了一套标准的部署转换流程,导出 ONNX、TensorRT 都很顺畅。
如果你不想用 MediaPipe 那种黑盒,又想要一个能跑在自己模型框架里的轻量热力图模型,RTMPose 目前是首选。它解决了我长期以来的一个痛点:热力图模型的精度 + 轻量模型的部署便利性,这两件事以前很难兼得。
2.8 YOLOv8-Pose:检测与姿态一条流水线
Ultralytics 的 YOLOv8 提供了官方 Pose 模型,在 YOLOv8n/s/m/l/x 各尺度下都带了姿态分支,输出 17 个 COCO 关键点。它是把检测任务和姿态任务在一个网络里同时做,所以推理时直接输出 "目标的框 + 框内关键点",一条流水线搞定,不需要像 top-down 那样拆两个模型。
从技术本质看,它更接近"基于单阶段的紧凑型多人姿态估计",关键点是回归出来的(具体形式是坐标回归变体),所以在边界精度上跟纯热力图模型比会吃亏,但换来的是极快的端到端体验。我用 YOLOv8s-pose 在普通 GPU 上跑 1080p 视频,推理速度非常可观,而且后处理代码量极少,ultralytics 库直接给你画好图、给好坐标。
它的定位其实是"工程便利型"模型。如果你项目里本来就在用 YOLO 做检测,只是顺手要出个骨架图,YOLOv8-Pose 是低摩擦方案。但如果你的核心业务就是高精度姿态分析,我建议还是用 RTMPose 或 HRNet。
2.9 DeepLabCut:科研实验场景的开源利器
DeepLabCut 不太像前面几个"通用模型",它更像一个"给研究者自定义训练姿态模型"的实验框架,比较典型的应用场景是动物行为分析。它基于 ResNet 或 ResNeXt 骨干网络做热力图回归,图形界面能标注数据、训练和评估,上手门槛控制得很低。
我最开始在小白鼠动作分析项目里见过它被用得出神入化,后来自己也试过用它训练新的自定义关键点。它的核心价值在于"标注-训练-预测"闭环做得很顺,而且关键点个数、种类全部自定义,不需要去匹配 COCO 那 17 个点。DeepLabCut 对实验研究人员来说比从零用 PyTorch 写训练代码友好得多,但这种框架耦合度也高,一旦涉及特殊的数据增强或自定义损失函数,会比在 MMPose 这类库里改代码更受限。
所以如果你想做的是通用人体姿态估计,DeepLabCut 不是首选;但如果你做的是特定场景、特定物种、特定关键点的估计,它可以省掉你大量造轮子的时间。
3. 横向对比真实差距:一张表看懂如何选型
给每个模型单独夸了一轮,最后还是要落到硬指标上。这里我不会写死某个 AP 数值,因为这些模型都有不同版本,训练配置也不一样,直接抄数值容易误导。我更建议你看相对量级和适用场景。
3.1 9 个模型核心参数与表现对照
下面这张表是我基于自己测试和社区公开数据整理的参考,适合当"第一轮筛选"工具。
| 模型 | 技术路线 | 关键点输出 | 相对精度 | 速度表现 | 部署友好度 | 典型场景 |
|---|---|---|---|---|---|---|
| OpenPose | 自底向上 | 18/25/135 | 中等 | 慢,GPU 可用 | 中 | 人群分析、教学演示 |
| HRNet | 自顶向下 | 17 | 很高 | 慢,GPU 必需 | 中 | 精度优先的离线分析 |
| AlphaPose | 自顶向下 | 17 | 很高 | 中等,GPU 推荐 | 中 | 多人高精度姿态 |
| MediaPipe BlazePose | 检测+坐标回归 | 33 | 中等 | 极快,CPU/移动端 | 很高 | 手机 App、实时交互 |
| MoveNet | 单阶段回归 | 17 | 中低 | 极快,CPU 可跑 | 高 | 边缘设备、实时 |
| ViTPose | 自顶向下 | 17 | 最高 | 较慢,GPU 必需 | 低中 | 竞赛刷分、离线高精度 |
| RTMPose | 自顶向下 | 17 | 高 | 快,CPU/GPU/移动端均可 | 高 | 工业落地、实时 |
| YOLOv8-Pose | 单阶段检测+姿态 | 17 | 中高 | 很快,GPU 友好 | 很高 | 已有 YOLO 检测的项目 |
| DeepLabCut | 自定义热力图 | 自定义 | 依训练数据 | 中等 | 中低 | 动物行为、科研标注 |
真到了项目里,很多人卡在精度和速度的价值判断上。我给个经验值:如果姿态只是中间信号,后续还要做动作分类,那中等精度模型完全够用,真正影响结果的是时序平滑和分类器设计;如果姿态本身就是产品结果,比如"体态评估报告",那 HRNet 和 RTMPose 的优势就非常明显。
3.2 按业务场景选型的四条建议
第一条,纯移动端 App,别折腾自训练模型。直接用 MediaPipe 或 MoveNet 起步,先跑通产品逻辑,等用户量和精度需求上来了再替换成 RTMPose-nano。
第二条,服务端实时多人分析,优先考虑 RTMPose 或 YOLOv8-Pose。RTMPose 胜在精度和速度平衡得很好,YOLOv8-Pose 胜在检测+姿态一体,部署人为成本低。这两个默认都带完善的推理代码,能省掉很多后处理的活。
第三条,精度要求极高、不要求实时的场景,比如专业运动分析、康复评估,直接让 HRNet 或 AlphaPose 做主力。搭配一个合理的人体检测器,绝大多数单人高精度需求都能覆盖。
第四条,科研或动物行为分析,直接上 DeepLabCut。它给你的是"自定义关键点 + 完整训练工作流",这是通用模型给不了的。
4. 模型背后绕不开的数据集与评估指标
姿态估计模型的精度都是"被数据集逼出来的"。大部分常用模型都在 COCO、MPII 等公开数据集上预训练或评估,你要是对这些数据集和评估方式没有概念,看模型指标就跟看天书似的。
4.1 COCO、MPII、PoseTrack 各管什么
COCO 数据集(Common Objects in Context)是姿态估计领域最常用的基准。人体关键点任务里,COCO 标注了 17 个关键点,包括鼻子、眼睛、耳朵、肩膀、手肘、手腕、胯、膝盖、脚踝。数据集中大量图片包含多人、遮挡、复杂背景,所以在这个榜单上分数高的模型,一般"泛化性"都不差。日常我提到"这个模型 COCO AP 多少"的时候,指的就是这个数据集上的指标。
MPII 数据集是另一个经典,标注了 16 个关键点(缺少脚踝?更准确说是包含肢体主要关节),数据来自 YouTube 视频,很多是日常活动、体育动作,也包含单人多人姿态。MPII 的历史地位很高,但如今很多新模型已经把评估重心完全转向 COCO 了。
PoseTrack 则是视频姿态估计数据集,核心特点是连续帧的多人姿态跟踪。它比单帧数据集更难,要求模型在视频里保持身份和关键点的时序一致性。做动作识别、行为分析的项目,PoseTrack 风格的指标比 COCO 更有参考价值。
如果你要自建常见人体动作数据集,我的建议是:别从零开始拍。先找一个通用姿态模型跑出关键点序列,再人工检查修正,会比纯手工标注效率高很多。这也是很多常见人体动作数据集(比如健身动作、舞蹈动作分类任务)实际采用的生产路径。
4.2 OKS 和 AP 是怎么算出来的
OKS(Object Keypoint Similarity)是姿态估计评估的核心单位,本质上衡量"预测关键点与真实关键点的归一化距离"。公式不算复杂,但关键在于每个关键点有一个标准差 $\sigma$,比如头部和脚踝允许的误差范围不一样,这样预测点在头部偏一点可能算准,在脚踝偏一点可能算错。OKS 归一化之后,我们就可以设定阈值,比如 OKS=0.5,代表预测点和真实点之间的相似度超过 0.5 才算这个关键点预测正确。
AP(Average Precision)则是把测试集里所有图片、所有人的关键点预测结果都拿来算一遍精度和召回率,然后对不同 OKS 阈值取平均。所以你会看到 COCO 榜单上有个 AP 值,术语叫"AP@0.5:0.95",意思是多个阈值下 AP 的平均。这个数字能较全面地反映模型的定位精度,但并不能直接等同于业务效果。业务里你的最终指标应该是"用户动作判对率"或"关节角度误差",模型之间的 AP 差两三个点,在业务上可能完全体现不出来。
5. 部署阶段最容易踩的坑和我的处理习惯
模型选好之后,真正的工程量才刚刚开始。这里写几个我反复踩过、也帮很多人排查过的坑,希望你能绕开。
5.1 输入分辨率与预处理
大多数姿态模型并不是原图直接进模型的。虽然有各种尺寸要求,但你得知道:输入分辨率决定了小目标的检出率。比如用 HRNet 推理 1080p 图片时,通常会把人的区域裁剪出来再缩放。裁剪时如果把人框裁得太紧,边缘手脚容易被截断;裁得太松,人变小了,精度又掉。
我常用的做法:检测框在上下左右各扩展 10% 到 20% 的余量,然后再做缩放。另外,关键点输出的坐标是相对于裁剪图的,必须根据裁剪偏移量、缩放比例反算回原图坐标。这个反算看着简单,但很多人的代码 bug 就出现在"忘了除以缩放系数"。我建议把预处理和后处理封装成独立函数,写好单测,用一张已知坐标的图验证一遍。
5.2 多人、遮挡、误检:top-down 的直接痛点
如果你选了 top-down 模型,真正的心病几乎都是人体检测器带来的。检测器漏检,姿态没戏;检测器产生"假人框",姿态模型还会强行往框里预测出一堆低置信度点。这类问题最常见的处理是在检测阶段调置信度阈值和 NMS IoU 阈值。
实际项目里我会给检测结果加一个"最小框面积"过滤,把特别小的框、比例不合理的框直接扔掉。对于遮挡严重的多人场景,alpha 集成多帧信息会比死磕单帧模型更有效:跟踪每个人物框,预测的关键点再用时间滤波平滑,遮挡瞬间的抖动会明显减少。OpenPose 这类自底向上模型对遮挡的容忍度更高,但代价是姿态细节精度不足,所以如果硬要实时、多人、又高精度,最好接受"没有完美模型"这个现实,在算法层面做取舍。
5.3 输出后处理与性能优化
关键点输出不是直接用就行的。坐标回归模型天生带抖动,热力图模型相对好些,但也需要根据具体帧率做处理。最常用的是一阶低通滤波或指数滑动平均,比如smoothed = alpha * current + (1 - alpha) * previous,这个 alpha 一般取 0.2 到 0.5。调大会让动作平滑但滞后,调小又容易抖,需要针对动作快慢测试。
如果做实时系统,我建议把所有模型推理放到 GPU 或线程池里,不要让姿态估计阻塞主逻辑。输入端可以先降采样,检测框周围只裁出小区域,再送进姿态模型,这个"检测大图 + 姿态小图"的组合能省不少时间。TensorRT、ONNX Runtime 这类加速引擎对生产环境几乎是必选项,我实测 RTMPose 转 TensorRT 后模型延迟能降一半左右。
最后一个习惯,我会把每个阶段的时间开销都打点记录下来。姿态估计项目优化到后期,瓶颈往往不在模型本身,而在图像解码、预处理拷贝、后处理可视化这些"周边代码"上。有了监控,你才知道该把力气花在哪。
各人做姿态估计的侧重点不同,有人要实时,有人要精度,有人只想要个最低成本的骨架图。这 9 个模型我都亲手跑过,没有哪个是万能的,但每个都有自己最合适的落点。如果你还在犹豫不决,我的建议是先按"业务场景"倒推,把路线定死,再对照上面那张表缩小范围。实在拿不准,就先拿 RTMPose 和 MediaPipe 各跑一个 Demo,它们部署成本最低,试错速度最快,项目启动总比对着榜单纠结强。